From a3c6b551c0652b9472b0a9e142f68d60197aeaca Mon Sep 17 00:00:00 2001 From: Steven9708m Date: Wed, 21 Aug 2024 01:55:35 -0500 Subject: [PATCH 001/539] steven9708m.py --- .../python/steven9708m.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/steven9708m.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/steven9708m.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/steven9708m.py new file mode 100644 index 0000000000..ff84d337b5 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/steven9708m.py @@ -0,0 +1,31 @@ +# https://www.python.org + +# Esto es un Comenatrio de una linea + +""" +Este es un comentario de varias líneas. +Puedes escribir tanto como necesites +dentro de estas comillas triples. +""" + +''' +Con estas otras comillas tambien puedo +colocar comentarios. +''' + +my_variable = "Variable de Prueba" + +MY_CONSTANT = "Mi constante que puede variar" + +my_int = 1 +my_float = 1.5 +my_bool = True +my_bool = False +my_string = "Mi cadena de texto" +my_other_string = 'Mi otra cadena de texto' +my_variable_bytes = b"Tipo de dato primitipo de Bytes" + + +#Impresion por consola + +print ("¡Hola, Phyton! . . . Steven a cumplido su tarea :)") \ No newline at end of file From b6f6100f7337988e52a6bd897263e690caa0e732 Mon Sep 17 00:00:00 2001 From: Albert Mantaras <34039293+Mantaras96@users.noreply.github.com> Date: Sat, 24 Aug 2024 20:38:28 +0000 Subject: [PATCH 002/539] Solucion 34 Java --- .../java/Mantaras96.java" | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 "Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/java/Mantaras96.java" diff --git "a/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/java/Mantaras96.java" "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/java/Mantaras96.java" new file mode 100644 index 0000000000..95d9808817 --- /dev/null +++ "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/java/Mantaras96.java" @@ -0,0 +1,110 @@ +package org.example; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class Mantaras96 { + + public static void main(String[] args) { + + // Crear personas + Person person1 = new Person("Meri"); + Person person2 = new Person("John"); + Person child1 = new Person("Tom"); + Person child2 = new Person("Anna"); + + // Establecer relaciones + person1.setPartner(person2); + + // Añadir hijos + person1.addChild(child1); + person1.addChild(child2); + + // Imprimir la familia de person1 + printFamily(person1); + System.out.println("####################### Persona2 #######################"); + printFamily(person2); + + } + + public static class Person { + + private final String identifier; + private Person partner; + private final String name; + private List children; + + public Person(String name) { + this.identifier = UUID.randomUUID().toString(); + this.name = name; + this.children = new ArrayList(); // Initialize the list + } + + public String getIdentifier() { + return identifier; + } + + public Person getPartner() { + return partner; + } + + public void setPartner(Person partner) { + if (this.partner != partner) { + this.partner = partner; + if (partner != null && partner.getPartner() != this) { + partner.setPartner(this); + } + } + } + + public String getName() { + return name; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public void addChild(Person child) { + if (!this.children.contains(child)) { + this.children.add(child); + if (this.partner != null && !this.partner.getChildren().contains(child)) { + this.partner.getChildren().add(child); + } + } + } + + @Override + public String toString() { + return "My name is " + this.name; + } + + } + + private static void printFamily(Person persona) { + String info = persona.toString(); + if (persona.getPartner() != null) { + info += " y mi pareja es " + persona.getPartner().getName(); + } else { + info += " y no tengo pareja"; + } + System.out.println(info); + + if (persona.getChildren().size() > 0) { + System.out.println("----------- Hijos ----------"); + for (Person child : persona.getChildren()) { + System.out.println("Soy el hijo de " + persona.getName() + " y mi nombre es " + child.getName()); + printFamily(child); + } + } else { + System.out.println(" No tengo hijos "); + } + } + + +} From 9dfa34093d7fcd0bf3e29257a66d398d44f45a37 Mon Sep 17 00:00:00 2001 From: clotrack Date: Thu, 5 Sep 2024 11:49:35 +0200 Subject: [PATCH 003/539] # 01 - Kotlin --- .../kotlin/Clotrack.kt | 121 ++ e | 1385 +++++++++++++++++ 2 files changed, 1506 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/kotlin/Clotrack.kt create mode 100644 e diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/kotlin/Clotrack.kt b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/kotlin/Clotrack.kt new file mode 100644 index 0000000000..fb3e89d3e1 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/kotlin/Clotrack.kt @@ -0,0 +1,121 @@ +// 01 OPERADORES Y ESTRUCTURAS DE CONTROL + // EJERCICIO: + /* 01-01 Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: + * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) + */ + // Inicializo unas variables random para trabajar con ellas, para todos los ejercicios + var myOperator1 = 5 + var myOperator2 = 3 + var myProveOperator = 0 + var i = 0 + var myBooleanTrue = true + var myBooleanFalse = false + var rangeAlfabet = 'a'..'d' + var myCahr = 'b' + + // En kotlin tenemos 5 tipos de operadores aritmeticos [+] [-] [*] [/] [%] a continuacion unos ejemplos variados + myProveOperator = myOperator1 + myOperator2 ++ + println(myProveOperator) + myProveOperator = myOperator1 -- + println(myProveOperator) + println(myOperator1 * 9) + println((myProveOperator * myOperator1) / myOperator2) + if(myProveOperator % 2 == 0) { + println("El numero " + myProveOperator + " es par") + } + // En kotlin tenemos cuatro operadores logicos [|] = OR [&] = AND [.xor()] = XOR y Desigualdad [!] y a continuacion unos ejemplos + println("${myBooleanTrue || myBooleanFalse} \n${myBooleanTrue && myBooleanFalse} \n${myBooleanFalse.xor(myBooleanTrue)} \n${!myBooleanTrue}") + + // En Kotlin tenemos diferentes comparadores [>] mayor [<] menor y [=] que podemos jugar con ellos y mezclarlos con igualdad [>=] + if(myOperator1 > 20){ + println("El numero $myOperator1 es mayor que 20") + } else if(myOperator1 < 20){ + println("El numero $myOperator1 es menor que 20") + } else { + println("El numero $myOperator1 es igual a 20") + } + + // No podemos olvidarnos de los comparadores [==] de igualdad o el de [!=] diferencia + if(myOperator1 == myProveOperator){ + println("Te va a tocar la loteria") + } else if(myOperator1 != myProveOperator){ + println("No hay suerte colega, asi es la vida") + } else { + println("Esto no tendria que pasar colega!") + } + + //Ya por ultimo y para mi sorpresa se pueden utilizar comparaciones como [a..d] o [1..4] + if (myCahr in rangeAlfabet){ // este tipo de comparador [a..d] se debe usar dentro de una variable + println("El caracter $myCahr esta dentro del rango entre a y d") + } else{ + println("El caracter $myCahr esta fuera del rango entre a y d") + } + + if (myOperator2 !in 1..4){ + println("El numero $myOperator2 esta dentro del rango entre 1 y 4") + } else{ + println("El numero $myOperator2 esta fuera de rango entre el 1 y el 4") + } + + /* 01-02 Utilizando las operaciones con operadores que tú quieras, crea ejemplos + * que representen todos los tipos de estructuras de control que existan + * en tu lenguaje: Condicionales, iterativas, excepciones... + */ + // Me cae tanta gracia que dejadme repetir este ejemplo condicional de 'if, else if y else' ;) + if(myOperator1 == myProveOperator){ + println("Te va a tocar la loteria") + } else if(myOperator1 != myProveOperator){ + println("No hay suerte colega, asi es la vida") + } else { + println("Esto no tendria que pasar colega!") + } + + // No es el unico condicional tambien tenemos 'when' es en apariencia identico a un swithc + when (myProveOperator){ + myOperator1 -> println("Los espiritus estan de tu lado hoy") + myOperator2 -> println("Ten cuidado al salir dedida, ponte crema solar o arderas como un misto") + else -> { + println("Ten cuidado esta noche al salir con la luna llena") + } + } + + // Comencemos con los bucles en este caso con el 'while' quiero aclarar un concepto la condicion de cierre del + // bucle es hacer mientras la condicion se cumpla! en el ejemplo mientras myProbeOperator sea menor que 10 + while (myProveOperator < 10){ + println("El valor del operador de prueba es $myProveOperator ") + myProveOperator ++ + } + + //Sigamos con el bucle 'do-while que en este caso si o si almenos una vez debe ejecutarse el do manejar con cuidado! + do{ + println("Numero de veces que declare mi amor y me rompieron el corazon en mil trocitos $myProveOperator") + myProveOperator ++ + } while (myProveOperator < myOperator2) + + // Ya para finalizar el marabilloso y explendido bucle 'for' aclarar que la diferencia esque la condicion de + // cierre de este bucle es hacer asta que se cumpla la condicion! + for (myProveOperator in 5 downTo 1){ + println("Doy vuelta y vueltas sin parar, que mareo! Ya ne se cuanto tiempo llevo aqui!") + } + + // Ahora que tenemos la variable myProbeOperator en 0 y viendo lo extraño que es declarar 'for' en kotlin + // quiero imprimir una tabla de multiplicar del 5 ;) sin operaciones dentro del 'for' directamente en su condicion + // debo aclarar que no he podido crear las tipicas variables dentro del bucle como [i, j o k] sino fuera del bucle :( + for (myProveOperator in 0..50 step 5){ + println("$i x 5 = $myProveOperator") + i ++ + } + // 01-03 Debes hacer print por consola del resultado de todos los ejemplos. + // Todos los ejemplos/resultados anteriores ya han sido impresos por consola anteriormente!! + + /* 01-04 DIFICULTAD EXTRA (opcional): + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + */ + i = 10 + for (i in 10..55) { + if (i % 2 == 0 && i != 16 && i % 3 != 0){ + println(i) + } + } \ No newline at end of file diff --git a/e b/e new file mode 100644 index 0000000000..9bd756e443 --- /dev/null +++ b/e @@ -0,0 +1,1385 @@ +commit db7fa5bc2dc7ba8171068f68cb815c2a332f4723 (HEAD -> main, origin/main, origin/HEAD) +Author: Clotrack +Date: Fri Aug 16 20:48:58 2024 +0200 + + #00 - kotlin + +commit 95993ab6ce339278d700d4e6bf7822a263d6e53d +Merge: 90b74284d 967955942 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sun Jul 21 08:34:46 2024 -0300 + + Merge pull request #5003 from Nikorasu-d/main + + #29 - Python / #00 - Python + +commit 90b74284da3eee1fcd7d2e097e0c223d8828efb0 +Merge: 5980f2d97 56987945e +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sun Jul 21 08:33:32 2024 -0300 + + Merge pull request #5002 from Hyromy/main + + #17 - Python + +commit 5980f2d97724cfe23ad046f1065f2f1d5c3707a5 +Merge: 8dbbd6b7f d91cf0576 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sun Jul 21 08:32:35 2024 -0300 + + Merge pull request #5001 from jrgranadosb/patch-2 + + Create jrgranados.py + +commit d91cf0576920b83e911caf144236620687a5b218 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sun Jul 21 08:31:52 2024 -0300 + + Rename jrgranados.py to jrgranadosb.py + +commit 8dbbd6b7fcbcd0b411008fcd733b96f12927cf21 +Merge: 8f6f0572c b9f2caef0 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sun Jul 21 08:30:55 2024 -0300 + + Merge pull request #5013 from Sac-Corts/main + + #23, #24, #25, #26, #27, #28, #29 - Python + +commit 8f6f0572c35e775f12b8b5f775cef75d82044472 +Merge: 6ab30d47f 1962d9be2 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sun Jul 21 08:30:01 2024 -0300 + + Merge pull request #5000 from santyjL/main + + #26 - python + +commit 6ab30d47f1f1c778c6ff20b4d5d2e8e4852ad995 +Merge: c25c1bf1f 5d099fdd1 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sun Jul 21 08:28:08 2024 -0300 + + Merge pull request #4999 from RaulDoezon/24-JavaScript + + #24 - JavaScript + +commit c25c1bf1f0ec58f34c18e66f711632337a0320c6 +Merge: 5ca591a68 2dd41f3bc +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sun Jul 21 08:27:34 2024 -0300 + + Merge pull request #4998 from Rikmij/main + + Roadmap #29 - Python y Kotlin + +commit 5ca591a68eb8c12b91cbed66b84015fda96b5c2f +Merge: 6a605856a 6901ee09b +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sun Jul 21 08:26:01 2024 -0300 + + Merge pull request #4997 from cyberdidac/main + + #28 - Python + +commit 6a605856a2b97767812b3bdb9a507175fbaced4f (CursoAprendizajeC) +Merge: a9a8bb335 1201a09f8 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sun Jul 21 00:01:24 2024 -0300 + + Merge pull request #5012 from Magupe09/main + + #00-javascript + +commit 1201a09f87951d43afe376c99e921514323b6b6f +Author: Mauro +Date: Sat Jul 20 20:48:13 2024 -0500 + + #01-javascript + +commit b9f2caef0468a73ee3a3e58dd8a172bc82126102 +Author: Isaac Cortés +Date: Sat Jul 20 19:30:49 2024 -0500 + + #29 - Python + +commit 0d0d296ef6610cf00dec6909a80aec94e06ae76d +Author: Isaac Cortés +Date: Sat Jul 20 19:30:32 2024 -0500 + + #28 - Python + +commit 491281383f117c27d66bc95fe63574129ecd35d2 +Author: Isaac Cortés +Date: Sat Jul 20 19:30:12 2024 -0500 + + #27 - Python + +commit fea8bfc4d4e88833d17434d4cb7771ea0fb23afe +Author: Isaac Cortés +Date: Sat Jul 20 19:29:52 2024 -0500 + + #26 - Python + +commit 733f5359ac3b3639b4125092a0ab4503487a52d1 +Author: Isaac Cortés +Date: Sat Jul 20 19:28:13 2024 -0500 + + #25 - Python + +commit fef17e472f5730429c153a25a2e7e761c942e7dc +Author: Isaac Cortés +Date: Sat Jul 20 19:27:51 2024 -0500 + + #24 - Python + +commit 1c35d7471b831a8209d80da15a1392152167484f +Author: Isaac Cortés +Date: Sat Jul 20 19:27:10 2024 -0500 + + #23 - Python + +commit a9a8bb33582370f0ab54b4aa55754598157567b3 +Author: mouredev +Date: Sun Jul 21 00:15:22 2024 +0000 + + Update stats + +commit 77375a6bbfff29f2b3a99aa1b6198345a1c05842 +Merge: d88f6aed4 398def93b +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sat Jul 20 20:46:44 2024 -0300 + + Merge pull request #4996 from raulG91/raulG91 + + #28 - python + +commit d88f6aed400e24475e7db6b857f199d4017b6f04 +Merge: 8313509bc abfe3e6af +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sat Jul 20 20:46:22 2024 -0300 + + Merge pull request #4995 from Vdroiid/main + + 03 - Python + +commit 8313509bcee750197e0acb5ef6156c22b8a05291 +Merge: e550e01c9 1fc6dd2ec +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sat Jul 20 20:45:21 2024 -0300 + + Merge pull request #4994 from DaniBack95/main + + #01 - JavaScript + +commit e550e01c9b54de3cf244d036115ba407ff9bf523 +Merge: 672a29a67 510be5091 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Sat Jul 20 20:44:43 2024 -0300 + + Merge pull request #4993 from JesusAntonioEEscamilla/JesusAEE + + #29 - JavaScript + +commit 96795594248b5e16636c4c6e830506726407123e +Author: nikorasu-d +Date: Sat Jul 20 16:03:57 2024 -0400 + + #00 - Python + +commit e5b3052f75d2712739def5bd72da14b96840286f +Author: Mauro +Date: Sat Jul 20 09:59:58 2024 -0500 + + #00-javascript + +commit 510be5091048ec61286bcb5218800858d1abe8ab +Merge: 06612409a 672a29a67 +Author: Jesus Antonio Escamilla +Date: Sat Jul 20 02:35:59 2024 -0600 + + Merge branch 'main' of github.com:mouredev/roadmap-retos-programacion; branch 'JesusAEE' of github.com:JesusAntonioEEscamilla/roadmap-retos-programacion into JesusAEE + +commit b1b4833cf1ceb58a4e6468992e625efb6912ed9c +Author: nikorasu-d +Date: Sat Jul 20 00:00:43 2024 -0400 + + #29 - Python + +commit 56987945eb4979ab748bd5c05cf5f1e021ac77a4 +Author: Hyromy +Date: Fri Jul 19 20:35:59 2024 -0600 + + #17 - Python + +commit a700bd6d2d517189843017e9e0ea5186453e3ed8 +Author: jrgranadosb +Date: Fri Jul 19 18:35:18 2024 -0600 + + Create jrgranados.py + +commit 672a29a673de7ece67f251591ba5f8cc7631b2ec +Author: mouredev +Date: Sat Jul 20 00:13:22 2024 +0000 + + Update stats + +commit 122415580fef19d259614ff063d1cae076145c85 +Merge: d9f982c0b 804747918 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:08:50 2024 -0300 + + Merge pull request #4992 from noaregui/01-rama + + #01 - Python + +commit d9f982c0bb5df765a64afe1d6f617837432655c5 +Merge: aca73957c 9f53d5810 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:08:36 2024 -0300 + + Merge pull request #4991 from AbelPerezCollado/main + + #03-Python + +commit aca73957c8a41a7e2bb54e85e6ad7d8f691cae4e +Merge: e9ee20634 be27f3176 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:08:13 2024 -0300 + + Merge pull request #4990 from MiguelAngel861/patch-3 + + #00 - Python + +commit be27f3176d27f640f3402f17565669d991700a92 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:07:56 2024 -0300 + + Rename MiguelAngel861 to MiguelAngel861.py + + Se agrega extensión .py + +commit e9ee2063475f0aa074b10e32fae99b347d648251 +Merge: 3ca9bbbec a74808c49 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:07:15 2024 -0300 + + Merge pull request #4989 from Jairo-Alejandro/main + + #[29] - [Python] + +commit 3ca9bbbeccd121a2178472c78a87851d13fbe2c2 +Merge: 7e64ef3fb 829aab45f +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:07:02 2024 -0300 + + Merge pull request #4988 from hectorio23/hectorio23 + + #28 - C++ + +commit 7e64ef3fb03d637427888382ff078c6216821939 +Merge: f542adcf4 07af635b2 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:06:44 2024 -0300 + + Merge pull request #4987 from neslarra/patch-41 + + Reto# 29 - python + +commit f542adcf474c87d5a7fb07d3a6a17ed8e2136c10 +Merge: 817eec613 ee5e5f636 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:06:33 2024 -0300 + + Merge pull request #4986 from RaulDoezon/23-JavaScript + + #23 - JavaScript + +commit 817eec61315f0db55753fff840a01d68e85489e1 +Merge: 6768894b4 173ac8700 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:06:05 2024 -0300 + + Merge pull request #4985 from Jesusway69/main + + #28 - Java + +commit 1962d9be2cac269bc4e86e1e9eda025290f7df25 +Author: santyjL +Date: Fri Jul 19 18:05:58 2024 -0600 + + #26 - python + +commit 6768894b4f9e9828041a0136098187acc754b38b +Merge: ed3a2d200 2587a0e03 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:05:30 2024 -0300 + + Merge pull request #4984 from eamartin96/main + + #06 - Python + +commit ed3a2d2009b578d27fcc835fa4aef8dcb04d52c7 +Merge: bf15f3bb8 2527f55f1 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:05:16 2024 -0300 + + Merge pull request #4983 from Aldroide/main + + Modificación #28 python y Ejercicios #00, #01, #02 de Go + +commit bf15f3bb82cb8682f25173e952ef4dc46becaebd +Merge: 6d1b4cf16 9296b7c29 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:04:48 2024 -0300 + + Merge pull request #4982 from JosephFaster/solucion-reto-00 + + Solucion reto #00-Python + +commit 6d1b4cf16c67caec42c771a2c268e90e35d87923 +Merge: e28b05297 05d85a0e8 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:04:32 2024 -0300 + + Merge pull request #4981 from jcrodmir/main + + #01 - Java and #02 - Java + +commit e28b05297ed8016065c429b63668263b920196c2 +Merge: 180e17022 bbf0f1eec +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:04:11 2024 -0300 + + Merge pull request #4980 from noaregui/00-rama + + #00-Python + +commit 180e17022a64efaa21412d1ad42ea1feacfc861c +Merge: 8e71772d4 20786e822 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:03:54 2024 -0300 + + Merge pull request #4979 from victormugo/main + + 02 - C# + +commit 8e71772d44fe5b7c79148b9cfd6e525a059153b6 +Merge: 119718601 a34f33e0d +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:03:37 2024 -0300 + + Merge pull request #4978 from hozlucas28/Solution-29-Go + + #29 - Go + +commit 119718601f42fea8a23f8c946ffd461c939f2938 +Merge: f1bc60c3f aadaf3da8 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:03:25 2024 -0300 + + Merge pull request #4977 from hozlucas28/Solution-29-Python + + #29 - Python + +commit f1bc60c3fe645f7d4b3d1ea5f6ca5bb3e7f79a9c +Merge: a5ee6ebd9 e84053d79 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:03:11 2024 -0300 + + Merge pull request #4976 from hozlucas28/Solution-29-TypeScript + + #29 - TypeScript + +commit a5ee6ebd9b880b00d181aed9073f24bbd05ac7b5 +Merge: 966458d44 ba84e30ba +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:03:00 2024 -0300 + + Merge pull request #4975 from avcenal/main + + #28 - Python + +commit 966458d441cf61d21024da69a7c670826bc65d57 +Merge: 4046d4c0d 38f5522ac +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:02:49 2024 -0300 + + Merge pull request #4974 from Kenysdev/29.rs + + #29 - rust + +commit 4046d4c0d8e0ceded4c2b846c708a5c61667bee2 +Merge: e84f81658 f06fcf748 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:02:36 2024 -0300 + + Merge pull request #4973 from jcrobles99/main + + #00 - C# + +commit e84f816582a5988f84c51f8b1c42a86c97abc98c +Merge: 0f5cdd53b 07503a3e7 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:02:20 2024 -0300 + + Merge pull request #4970 from Qv1ko/main + + #00 - Java + +commit 0f5cdd53bef4c1b6db1d164044d052e257ea501f +Merge: b3cef7af0 db3ba95cf +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Fri Jul 19 21:01:58 2024 -0300 + + Merge pull request #4963 from EmmanuelMMontesinos/main + + 22 - Python + +commit ba84e30ba2e8df54726f9a0df2109f96330a439d +Merge: fd75787ce b3cef7af0 +Author: avcenal <134477562+avcenal@users.noreply.github.com> +Date: Sat Jul 20 00:11:28 2024 +0200 + + Merge branch 'mouredev:main' into main + +commit 2dd41f3bcdff505ef48761bc184ed37c335e36d1 +Author: Rick <135878591+Rikmij@users.noreply.github.com> +Date: Fri Jul 19 21:02:29 2024 +0200 + + Road #29 - Python + +commit 5d099fdd172512c5f0501a08474174030aa51fee +Author: Raúl Dóezon +Date: Fri Jul 19 13:01:56 2024 -0600 + + #24 - JavaScript + +commit b2db09b2a62cd8a576d66a0c669aee6c54f292f3 +Author: Rick <135878591+Rikmij@users.noreply.github.com> +Date: Fri Jul 19 21:01:28 2024 +0200 + + Road #29 - Kotlin + +commit 06612409a97a218226bc8c1f1bc55d933137c0e9 +Merge: 6e01b026d b3cef7af0 +Author: Jesus Antonio Escamilla +Date: Fri Jul 19 11:25:47 2024 -0600 + + Merge branch 'main' of github.com:mouredev/roadmap-retos-programacion into JesusAEE + +commit 6901ee09bc25964828e28638b258848d78fc8fd0 +Author: Diego Sánchez Escribano +Date: Fri Jul 19 17:27:57 2024 +0200 + + reto 28 python cyberdidac + +commit 398def93bd5ea77e06c5c04df564062c483470a5 +Author: raulG91 <=> +Date: Fri Jul 19 16:22:49 2024 +0200 + + #28 - python + +commit abfe3e6af6e6083075b1222785dc6b511840b019 +Author: vdroid +Date: Fri Jul 19 07:59:14 2024 -0600 + + 03 - Python + +commit 1fc6dd2eca6bbb08c6b891743c02e9fd69c8c4bf +Author: Daniel Baracaldo <77088158+DaniBack95@users.noreply.github.com> +Date: Fri Jul 19 07:33:07 2024 -0500 + + #01 - JavaScript + +commit b3cef7af055e216345da2dbf53e51fc7c1b0589c +Author: Brais Moure +Date: Fri Jul 19 14:16:47 2024 +0200 + + Cursos de lógica + +commit 05d85a0e8eb65527663f9cc4862e64c2cde38d56 +Author: JoanCharles +Date: Fri Jul 19 14:15:35 2024 +0200 + + #02 - Java + +commit 9f53d5810ee3b9cc042429748c2cd19cb1a89739 +Author: Abel Pérez +Date: Fri Jul 19 13:17:14 2024 +0200 + + #04-Python + +commit e8c7a96844d4ad73ab421768b7c0fcd50deb4650 +Merge: 60153a789 a70f4e4f4 +Author: Abel <95299501+AbelPerezCollado@users.noreply.github.com> +Date: Fri Jul 19 13:16:37 2024 +0200 + + Merge branch 'mouredev:main' into main + +commit a70f4e4f46f1b4f5f5aa27822095a6573e561fb1 +Merge: b8287f577 dd155dbfe +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Fri Jul 19 12:38:15 2024 +0200 + + Merge pull request #4969 from RaulDoezon/22-JavaScript + + #22 - JavaScript + +commit b8287f57740ed2991fe8ab8ea81e310207aac8c0 +Merge: d56cef473 d93c161a7 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Fri Jul 19 12:36:21 2024 +0200 + + Merge pull request #4968 from santyjL/main + + #23 - python + +commit d56cef47300172ac101dd616c08541d45bc8e778 +Merge: 80268a8f7 87a5512d7 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Fri Jul 19 12:24:50 2024 +0200 + + Merge pull request #4967 from chriszaldana/logica_js + + #00 - Javascript + +commit 80268a8f797a76e5dbbebd6523a5bae0ac90b4c4 +Merge: c5d0883f9 43ddf9288 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Fri Jul 19 12:22:37 2024 +0200 + + Merge pull request #4966 from kodenook/develop + + Reto #10 - go + +commit c5d0883f9a2b6c743a356ade016fc842409e62b1 +Merge: fbb22a0ef 2bb74a398 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Fri Jul 19 12:19:40 2024 +0200 + + Merge pull request #4965 from edalmava/pascal + + #06 - Pascal + +commit fbb22a0efe9d0be28cb1567eb8673c0b7216087a +Merge: 72e545c12 1f7c39c41 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Fri Jul 19 12:11:59 2024 +0200 + + Merge pull request #4964 from andresmendozaf/main + + #00 - JAVA + +commit 72e545c12c588e5e1e023096944216f9c2304ac6 +Merge: bb7d89dc8 faaaafff7 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Fri Jul 19 12:09:11 2024 +0200 + + Merge pull request #4960 from edalmava/erlang + + #06 - Erlang + +commit bb7d89dc837f14d1fd0c4b5853bfc551e43d0f2c +Merge: 737f80b71 5cf27027e +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Fri Jul 19 12:07:40 2024 +0200 + + Merge pull request #4955 from Markayala13/patch-2 + + Create Operadores + +commit 5cf27027e77f414ad1ad03e1c0dccff2696d538f +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Fri Jul 19 12:03:56 2024 +0200 + + Rename Markayala13.java to Markayala13.java + +commit 1f8ee0566453b664b04d40e44cb1fb47aa6a0a1d +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Fri Jul 19 12:01:59 2024 +0200 + + Rename Operadores.java to Markayala13.java + +commit b13549cfdd3b1a2f61c22493b4f749e51e708340 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Fri Jul 19 11:59:46 2024 +0200 + + Rename Operadores to Operadores.java + +commit 6e01b026d7338007a0dc449de79dfd909b10fc88 +Merge: b926fb56e 737f80b71 +Author: Jesus Antonio Escamilla +Date: Fri Jul 19 03:31:00 2024 -0600 + + Merge branch 'JesusAEE' of github.com:JesusAntonioEEscamilla/roadmap-retos-programacion; branch 'main' of github.com:mouredev/roadmap-retos-programacion into JesusAEE + +commit b926fb56e9b98dfc3b8ca32c732b16b4c370754b +Author: Jesus Antonio Escamilla +Date: Fri Jul 19 03:29:14 2024 -0600 + + #29 - JavaScript + +commit 804747918f24890d16400aa84514bf2e3241cfc0 +Author: Ainhoa +Date: Fri Jul 19 11:05:51 2024 +0200 + + 01-rama + +commit 60153a7894f8d50174731dfb2f4952c13c56d1db +Author: Abel Pérez +Date: Fri Jul 19 09:07:04 2024 +0200 + + #03-Python + +commit 737f80b710279dc2313a5fc64d96d575d3700197 +Author: mouredev +Date: Fri Jul 19 00:13:53 2024 +0000 + + Update stats + +commit 109fff74b1beda707a9063093b4fc7db2c0da827 +Merge: 09bbf3403 e7133a6e2 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Thu Jul 18 20:44:49 2024 -0300 + + Merge pull request #4959 from Chrisdev00/Chrisdev00-branch + + #29 - python y javascript + +commit 09bbf340393546dec76576459b67ce8e70987bd8 +Merge: e4b5971d6 2302b7977 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Thu Jul 18 20:44:06 2024 -0300 + + Merge pull request #4958 from Rodrigoghr/main + + #00 - Python + +commit e4b5971d61d9224ef05762b6a2a6fda6f628e22f +Merge: 32a8eee0d 10c4eef71 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Thu Jul 18 20:43:26 2024 -0300 + + Merge pull request #4957 from SooHav/main + + "#29 - Python" + +commit 32a8eee0d6e96aae3133cfef2ae866f95d1b1305 +Merge: c20f2a610 e36e4fb51 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Thu Jul 18 20:41:45 2024 -0300 + + Merge pull request #4954 from julian98789/patch-15 + + #11 - java + +commit c20f2a610931881c70287f5c3db1c020c4caad90 +Merge: e8cfc1a44 11a283e72 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Thu Jul 18 20:40:34 2024 -0300 + + Merge pull request #4961 from Kenysdev/27.rs + + #27 - rust -fix + +commit 1309339911fb0f8436a7287a432852ce09c5df4c +Merge: cbb2bd127 e8cfc1a44 +Author: Jesus Antonio Escamilla +Date: Thu Jul 18 16:47:10 2024 -0600 + + Merge branch 'main' of github.com:mouredev/roadmap-retos-programacion into JesusAEE + +commit 7214da979a7385d154e1697d94bcd48f08a02a16 +Author: MiguelAngel861 <97812660+MiguelAngel861@users.noreply.github.com> +Date: Thu Jul 18 16:02:43 2024 -0600 + + #00 - Python + +commit a74808c49eee326c571aad257ab609f46bf8b16a +Author: Alejandro +Date: Thu Jul 18 16:28:05 2024 -0500 + + #[29] - [Python] + +commit 829aab45f2b91c8032dc4f52a872b09a2552e8a0 +Author: Héctor Adán +Date: Thu Jul 18 15:25:03 2024 -0600 + + #28 - C++ + +commit 07503a3e7973acbaea55802aa6ecfada3a7e4bf6 +Author: Qv1ko +Date: Thu Jul 18 23:12:16 2024 +0200 + + #00 - PHP + +commit 07af635b2f58a95b0d976bb08a4efca0a6dc138e +Author: neslarra <31991788+neslarra@users.noreply.github.com> +Date: Thu Jul 18 17:59:54 2024 -0300 + + Reto# 29 - python + +commit ee5e5f6360610c08b9cdcd698d1741ec89393145 +Author: Raúl Dóezon +Date: Thu Jul 18 12:08:32 2024 -0600 + + #23 - JavaScript + +commit d93c161a78d4f7ba232e0c0166d4eb647078c722 +Merge: 125e7107d e8cfc1a44 +Author: Santiago López <68027908+santyjL@users.noreply.github.com> +Date: Thu Jul 18 12:02:20 2024 -0600 + + Merge branch 'mouredev:main' into main + +commit 125e7107db3060b83067de5ebe3b345907ca3212 +Author: santyjL +Date: Thu Jul 18 12:00:12 2024 -0600 + + #25 - python + +commit 173ac8700485dafb6e55678b3a8904b0378c5ee0 +Author: JesusWay69 HP elitebook +Date: Thu Jul 18 19:52:46 2024 +0200 + + #28 - Java + +commit 2587a0e03bb61892907a216cdbe5814f2e02b7e0 +Author: Edgar Martinez +Date: Thu Jul 18 09:06:14 2024 -0600 + + Reto#06 - Python + +commit 2527f55f16aedbeee14b31cdc2c7e5a2fc79958b +Author: Aldroide +Date: Thu Jul 18 07:14:56 2024 -0600 + + Modificación #28 python y Ejercicios #00, #01, #02 de Go + +commit db3ba95cf8cab8ea04f90e4ac1e5aec11defc6d2 +Merge: 258c86ef8 e8cfc1a44 +Author: Emmanuel M Montesinos <97795200+EmmanuelMMontesinos@users.noreply.github.com> +Date: Thu Jul 18 15:10:42 2024 +0200 + + Merge branch 'mouredev:main' into main + +commit 258c86ef8212c4447a82c93fadd4c476f7232dbc +Author: Emmanuel +Date: Thu Jul 18 15:10:06 2024 +0200 + + 23 - Python + +commit 9296b7c292980842b4ad6b27103da9629d9ee197 +Author: JosephFaster +Date: Thu Jul 18 05:20:50 2024 -0600 + + Borre hola mundo + +commit f4ad09bd95036c0133c55c5980a4a14bf69a7089 +Author: JosephFaster +Date: Thu Jul 18 05:16:20 2024 -0600 + + ultimo cambio + +commit c93a736c3cbb3d1095cb377312d219397e531aa0 +Author: JosephFaster +Date: Thu Jul 18 05:13:47 2024 -0600 + + Ya está el primer ejercicio + +commit 6c0718c57816056b7e690226558daf95d88ff78b +Author: JoanCharles +Date: Thu Jul 18 11:56:05 2024 +0200 + + #01 - Java + +commit 1952d82fc03898e3d47679e5bbc9c8a0cba1afed +Author: JoanCharles +Date: Thu Jul 18 11:53:32 2024 +0200 + + #01 - Java + +commit e8cfc1a4436694072af75cdce88f4a70cac0b4c9 +Merge: 279cf546d ff2160f2f +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Thu Jul 18 10:05:34 2024 +0200 + + Merge pull request #4938 from Kenysdev/29.py + + #29 - python + +commit 279cf546dbcfc9ab206583711291cea3411e693a +Merge: 1e368a92c f2c822662 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Thu Jul 18 10:04:11 2024 +0200 + + Merge pull request #4936 from eamartin96/main + + #05 - Python + +commit 1e368a92c309642ae5e80c01a4d9a36a25d3e07a +Merge: 8d6e7e5c6 c747556f6 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Thu Jul 18 10:03:05 2024 +0200 + + Merge pull request #4941 from DaniBack95/main + + #00 - JavaScript + +commit 8d6e7e5c62960fc8c2408f1f0426aae5ee965808 +Merge: af7da7295 afc6ee8f9 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Thu Jul 18 10:02:39 2024 +0200 + + Merge pull request #4943 from Vdroiid/main + + #02 - Python + +commit af7da72953c986aa01fb5d28d7f800592dc0b921 +Merge: ddb9eb923 8bbb719a7 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Thu Jul 18 10:02:20 2024 +0200 + + Merge pull request #4944 from edalmava/javascript + + #06 - Javascript + +commit ddb9eb923e6b00b3501e47704d3923ceabbd40ac +Merge: cdb00c4e5 bcb44f0d8 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Thu Jul 18 10:01:59 2024 +0200 + + Merge pull request #4945 from Trufoplus/Solutions + + #29 - Python + +commit cdb00c4e554c012543c6c24a0210526ea4877359 +Merge: afe34569d 410c48554 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Thu Jul 18 10:01:38 2024 +0200 + + Merge pull request #4948 from SnowAle/main + + #00 - Python + +commit afe34569dbfd9e7c40c8439cf103e2e260f3223f +Merge: 85b820cae a6a85a646 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Thu Jul 18 10:01:13 2024 +0200 + + Merge pull request #4949 from CaveroBrandon/25#Python + + #25 - Python + +commit 85b820caeaed7fc9c13f1cb4425e7c34f87ff4a7 +Merge: 2a7f88c4d 9a59910e7 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Thu Jul 18 09:59:40 2024 +0200 + + Merge pull request #4950 from JesusAntonioEEscamilla/JesusAEE + + #28 - JavaScript "Corrección" + +commit 2a7f88c4ddca5322c1b0de8ab459a5778823a369 +Merge: a78c6296e b12b3aea2 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Thu Jul 18 09:59:21 2024 +0200 + + Merge pull request #4934 from rigo93acosta/main + + #23 - Python + +commit a78c6296eafe0e1f8c9a8a06dcd22710a9950d57 +Merge: 7a548c712 1c09b00a9 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Thu Jul 18 09:58:59 2024 +0200 + + Merge pull request #4933 from facundorsabia/mybranch + + #00 - Python + +commit 7a548c7128a9b3c921e88f805c730405b30b44ab +Merge: 5b84162fd a597e1467 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Thu Jul 18 09:58:24 2024 +0200 + + Merge pull request #4932 from agusrosero/develop + + #26 - Javascript + +commit bbf0f1eecc891cd132c195caaa7a0fcb00d27162 +Author: Ainhoa +Date: Thu Jul 18 09:40:55 2024 +0200 + + 00 - Python + +commit e3a308017a7b43cbe0772a9549bd78153badd793 +Author: Ainhoa +Date: Thu Jul 18 09:29:36 2024 +0200 + + 00 - Python + +commit 20786e822210a93bbf6a81b0f29776de94edfd29 +Author: Victor +Date: Thu Jul 18 08:57:13 2024 +0200 + + 02 - C# + +commit a34f33e0de8a4b80d459ca52ee9d5dfd39a15c8a +Author: hozlucas28 +Date: Thu Jul 18 03:26:03 2024 -0300 + + Solution 29 - Go + +commit aadaf3da8db786450e8b38f891da77b93beb47b2 +Author: hozlucas28 +Date: Thu Jul 18 02:51:20 2024 -0300 + + Solution 29 - Python + +commit e84053d79021a1472753d097951ae5f405581a49 +Author: hozlucas28 +Date: Thu Jul 18 02:19:46 2024 -0300 + + Solution 29 - TypeScript + +commit 5b84162fdb4891cc988da6613debf2ae2bcfb40a +Author: mouredev +Date: Thu Jul 18 00:13:38 2024 +0000 + + Update stats + +commit fd75787ceb3c5c87bd127a2a1ce04f3a0ccd8608 +Author: avcenal <134477562+avcenal@users.noreply.github.com> +Date: Wed Jul 17 23:53:12 2024 +0200 + + #28 - Python + + ejercicio #28 del roadmap 2024 + +commit 38f5522ac31cf10d9389a6473d52f4b7895fd7da +Author: kenysdev +Date: Wed Jul 17 16:01:16 2024 -0500 + + 29-rust-SOLID-ISP + +commit a597e1467fa4afa8c50e29931847242bfc1daf5b +Author: agusrosero +Date: Wed Jul 17 16:59:52 2024 -0300 + + #29 - Python + +commit a503cfe56afed0354266e251f77b2959703f48d0 +Merge: 2b8e25684 929ba3832 +Author: Hernan +Date: Wed Jul 17 16:58:33 2024 -0300 + + Merge branch 'mouredev:main' into develop + +commit f06fcf748ddedf3e8271a981798596b05f1de23c +Merge: 3eafc0649 929ba3832 +Author: Juan Robles +Date: Wed Jul 17 13:25:21 2024 -0600 + + Merge branch 'mouredev:main' into main + +commit 3eafc0649d8f66724e8b37969da75bd3d68b86e5 +Author: Juan Robles +Date: Wed Jul 17 13:17:37 2024 -0600 + + #00-C# + +commit ea7cf3579798652b3e92df3c27b3f2471062710b +Author: Qv1ko +Date: Wed Jul 17 21:06:02 2024 +0200 + + #00 - Java + +commit af49315cc5a704367df0e77020446082af1ab8bf +Author: Juan Robles +Date: Wed Jul 17 13:05:45 2024 -0600 + + Finalizacion + +commit 76aa09c6f10cb780c2a6826c91ec44241786f730 +Author: santyjL +Date: Wed Jul 17 12:50:23 2024 -0600 + + #24 - python + +commit dd155dbfe136e1c7cf12a2b256ec7318c27d7716 +Author: Raúl Dóezon +Date: Wed Jul 17 12:48:34 2024 -0600 + + #22 - JavaScript + +commit ed463d9fdfb6d730acab999b86d84747cdc7ca07 +Author: santyjL +Date: Wed Jul 17 11:57:03 2024 -0600 + + #23 - python + +commit 87a5512d7915f93e3f56868a816cf7335b522e3a +Author: Christian Zaldaña +Date: Wed Jul 17 10:57:03 2024 -0600 + + #00 - Javascript + +commit 43ddf9288450eca90a13e28cdc62ab8cc413ae6a +Author: kodenook +Date: Wed Jul 17 11:46:44 2024 -0400 + + Reto #10 - go + +commit 2bb74a39818ddf7006f74f54debb6a147d9f5943 +Author: edalmava +Date: Wed Jul 17 09:54:57 2024 -0500 + + #06 - Pascal + +commit afc6ee8f9543c4daaae0c03e685847a15d52d7bf +Merge: 2a5a4cc17 929ba3832 +Author: Santos C <156567388+Vdroiid@users.noreply.github.com> +Date: Wed Jul 17 08:50:22 2024 -0600 + + Merge branch 'mouredev:main' into main + +commit 8bbb719a7e4feb8da8912aaef61ba574c864f095 +Merge: c7f7069bb 929ba3832 +Author: edalmava +Date: Wed Jul 17 09:33:26 2024 -0500 + + Merge branch 'mouredev:main' into javascript + +commit f1fce3f7855b0bb02f5881343d71b92820491994 +Merge: c1cf9ba50 929ba3832 +Author: Emmanuel M Montesinos <97795200+EmmanuelMMontesinos@users.noreply.github.com> +Date: Wed Jul 17 15:27:39 2024 +0200 + + Merge branch 'mouredev:main' into main + +commit c1cf9ba50a2360507be5ceca882286462d00825e +Author: Emmanuel +Date: Wed Jul 17 15:26:26 2024 +0200 + + 22 - Python + +commit 1f7c39c41be38cc9935304695bf129304ff0dd99 +Merge: 049b82416 929ba3832 +Author: amendozaf +Date: Wed Jul 17 09:18:01 2024 -0400 + + Merge branch 'main' of https://github.com/andresmendozaf/roadmap-retos-programacion + +commit 049b8241614e03d284ab123e27b01c38210ed678 +Author: amendozaf +Date: Wed Jul 17 09:15:00 2024 -0400 + + #00 - JAVA + +commit cbb2bd127f2269736d8771e6fecc15b798dab082 +Merge: 9a59910e7 929ba3832 +Author: Jesus Antonio Escamilla +Date: Wed Jul 17 03:33:22 2024 -0600 + + Merge branch 'main' of github.com:mouredev/roadmap-retos-programacion into JesusAEE + +commit 929ba38325ba96951f1abc9d7d323066d6cd7db6 +Merge: a667af0ee 518037217 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Wed Jul 17 10:47:46 2024 +0200 + + Merge pull request #4931 from EmmanuelMMontesinos/main + + 18 - Python + +commit a667af0ee605966db34e49f23f7f9790b09e0a8e +Merge: a4facda4e fad7c0ab5 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Wed Jul 17 10:46:35 2024 +0200 + + Merge pull request #4929 from julian98789/patch-13 + + #10 - java + +commit a4facda4e8671b84455ea748fd08eb2e0c81f83e +Merge: 9503fe416 f32df5bba +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Wed Jul 17 10:46:09 2024 +0200 + + Merge pull request #4928 from avcenal/main + + #27 - Python + +commit 9503fe4163431251d10a48c89b55fa3185ad3cd0 +Merge: 99cab58ff 5db7392b5 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Wed Jul 17 10:29:53 2024 +0200 + + Merge pull request #4927 from RaulDoezon/21-JavaScript + + #21 - JavaScript + +commit 99cab58ff07f3e21b17e48efe98e999ff8ee9e96 +Merge: 97a95d217 28de425a7 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Wed Jul 17 10:29:31 2024 +0200 + + Merge pull request #4925 from kodenook/develop + + Reto #9 - go + +commit 97a95d217f576340b8a235ae4ee2ed01967cc7b2 +Merge: 6c1668ee5 fe272cfb9 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Wed Jul 17 10:16:34 2024 +0200 + + Merge pull request #4923 from jcrodmir/main + + #00 - Java + +commit 6c1668ee56ce1c3baf0d1c06a161db8873bca1bc +Merge: ed69ab428 82e81c6f9 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Wed Jul 17 10:14:35 2024 +0200 + + Merge pull request #4921 from RicJDev/main + + #05 - TypeScript + +commit ed69ab428f7caa055f1da5d5f780f53c2c3c28d0 +Merge: a5196d536 3281ef2a5 +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Wed Jul 17 10:10:59 2024 +0200 + + Merge pull request #4920 from VolumiDev/main + + #03 - Javascript + +commit a5196d5362fd7390a296072566d28173d05978fe +Merge: ebe897bc6 a23fdb1bb +Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> +Date: Wed Jul 17 10:10:30 2024 +0200 + + Merge pull request #4919 from AbelPerezCollado/main + + #02-Python + +commit 5180372176e691111c5d93fa8ec6731b488a21d0 +Author: Emmanuel +Date: Wed Jul 17 09:45:51 2024 +0200 + + threading.Thread correcion al ver otros ejercicios + +commit 2bbf933386e1dc69a19a512e6db03470ef7415a0 +Merge: 334412dd6 b296098b6 +Author: Emmanuel +Date: Wed Jul 17 09:37:33 2024 +0200 + + Merge branch 'main' of https://github.com/EmmanuelMMontesinos/roadmap-retos-programacion + +commit 334412dd6bec954a41a79de251dc16c23bb956c3 +Author: Emmanuel +Date: Wed Jul 17 09:37:26 2024 +0200 + + 21 - Python + +commit b296098b6cb99579b12a3a901a80efe524923669 +Merge: 1164e0a14 ebe897bc6 +Author: Emmanuel M Montesinos <97795200+EmmanuelMMontesinos@users.noreply.github.com> +Date: Wed Jul 17 09:37:03 2024 +0200 + + Merge branch 'mouredev:main' into main + +commit a23fdb1bb6a2ee5b2ae20aef372dad6d25a2f379 +Merge: 038a67b5f ebe897bc6 +Author: Abel <95299501+AbelPerezCollado@users.noreply.github.com> +Date: Wed Jul 17 08:36:20 2024 +0200 + + Merge branch 'mouredev:main' into main + +commit 11a283e727da7b6333bf71d0c4ee5818b0e69c8f +Author: kenysdev +Date: Wed Jul 17 01:14:56 2024 -0500 + + fix 27-rust-SOLID-OCP + +commit faaaafff7a7d3765f53e8f1af2fd8802e82f3d7a +Author: edalmava +Date: Tue Jul 16 22:24:17 2024 -0500 + + #06 - Erlang + +commit 6920191a315ae6348782286ccd9ba76e655816a0 +Author: Juan Robles +Date: Tue Jul 16 18:16:15 2024 -0600 + + variables enteras + +commit ebe897bc652de7df9ea629c519dba2054855b728 +Author: mouredev +Date: Wed Jul 17 00:14:00 2024 +0000 + + Update stats + +commit e7133a6e2114a01189fb470710b7acf8362526ee +Author: Chrisdev00 <134344269+Chrisdev00@users.noreply.github.com> +Date: Tue Jul 16 19:59:51 2024 -0400 + + #29 - python y javascript + +commit 2302b79778c3aab736516e18df6d94a4c735dfa6 +Author: = +Date: Tue Jul 16 18:38:31 2024 -0500 + + #00 - Python + +commit 10c4eef71975365729b5d92acea83524859da270 +Author: SooHav +Date: Tue Jul 16 20:37:55 2024 -0300 + + 29 - python + +commit dab162a097398a84a21faf825479c396bc43e4ae +Author: SooHav +Date: Tue Jul 16 20:20:48 2024 -0300 + + 28 - python + +commit ff2160f2f1756fcb2a354de4bc0d8bf3be4f0dd4 +Author: kenysdev +Date: Tue Jul 16 17:56:02 2024 -0500 + + 29-py-SOLID-ISP + +commit 5b55baf46444ee5b10612055a4b4c1f5daa63ca9 +Author: Markayala13 <149205675+Markayala13@users.noreply.github.com> +Date: Tue Jul 16 17:09:26 2024 -0500 + + Create Operadores + +commit e36e4fb51d81f2af01c620f1d33d58a04a27c8e0 +Author: Julian Gomez <132085190+julian98789@users.noreply.github.com> +Date: Tue Jul 16 17:07:22 2024 -0500 + + julian98789.java + +commit 5d9bcbb9d3ed3cbb815022173e373156467a0a31 +Merge: e08435d17 e6cf641d6 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Tue Jul 16 18:34:15 2024 -0300 + + Merge pull request #4952 from ElHacedorDeCosas/ElHacedorDeCosas + + ##01 - GDScript + +commit e08435d177763513ffaccc0c5e7afd07d569e67c +Merge: 9c294fa48 2f37d4596 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Tue Jul 16 18:33:33 2024 -0300 + + Merge pull request #4946 from Kenysdev/29.cs + + #29 - c# + +commit 9c294fa48e58eabc37e794fb80e068d52e33a334 +Merge: 7aa27a6a1 ca94f23a6 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Tue Jul 16 18:33:21 2024 -0300 + + Merge pull request #4947 from ASJordi/main + + #29 - Java + +commit 7aa27a6a12d3297d9d8dd9a22cb189b486caf883 +Merge: 6abfe9018 bbdd1e490 +Author: Bruce <88008233+Roswell468@users.noreply.github.com> +Date: Tue Jul 16 18:33:10 2024 -0300 + + Merge pull request #4951 from Kenysdev/29.vb + + #29 - vb.net + +commit bbdd1e4905352fef0d3f182655d186280fba167f +Author: kenysdev +Date: Tue Jul 16 16:13:35 2024 -0500 + + 29-vb.net-SOLID-ISP + +commit 1164e0a143a88d11eaaec88632626855b66954d1 +Merge: ea75d5268 8104ec022 +Author: Emmanuel +Date: Tue Jul 16 22:51:59 2024 +0200 + + Merge branch 'main' of https://github.com/EmmanuelMMontesinos/roadmap-retos-programacion + +commit ea75d5268692e1564b504080c05a998f886dbb3a +Author: Emmanuel +Date: Tue Jul 16 22:51:55 2024 +0200 + + #20 - Python + +commit 8104ec0226badea453cb27b127e410f763c095a7 +Merge: d6108fb12 6abfe9018 +Author: Emmanuel M Montesinos <97795200+EmmanuelMMontesinos@users.noreply.github.com> +Date: Tue Jul 16 22:50:46 2024 +0200 + + Merge branch 'mouredev:main' into main + +commit e6cf641d65eb8162ec7fce76a451f5b5d215225b +Author: ElHacedorDeCosas +Date: Tue Jul 16 17:47:49 2024 -0300 + + Create ElHacedorDeCosas.gd + +commit 9a59910e7e574863944cb0e895c763c8c1c001e5 +Merge: 46976e0a3 6abfe9018 +Author: Jesus Antonio Escamilla +Date: Tue Jul 16 14:06:34 2024 -0600 + + Merge branch 'main' of github.com:mouredev/roadmap-retos-programacion into JesusAEE + +commit 46976e0a3d8581685ddf15230e3519dbf7ec641a +Author: Jesus Antonio Escamilla +Date: Tue Jul 16 14:04:50 2024 -0600 + + #28 - JavaScript "Corrección" + +commit a6a85a646ed9f8c1e1c13b5198bb3adbd89a3a8e +Author: CaveroBrandon +Date: Tue Jul 16 15:39:44 2024 -0400 + + #25 - Python + +commit 410c48554b5d694d10cd887f78bd6fda499ace3b +Author: SnowAle +Date: Tue Jul 16 18:53:25 2024 +0000 + + SnowAle #00 - Python + +commit 2f37d4596231a5b0521d78536f072ac40b4d9026 +Author: kenysdev +Date: Tue Jul 16 11:43:01 2024 -0500 + + 29-c#-SOLID-ISP + +commit ca94f23a6eb10d75ad88345681c05c097f0de25d +Author: Jordi Ayala +Date: Tue Jul 16 10:20:34 2024 -0600 + + #29 - Java + +commit bcb44f0d850bdebf1dc0583def95a352a2e87f17 +Author: Daniel Galvan +Date: Tue Jul 16 16:28:48 2024 +0100 + + #29 - Python + +commit c7f7069bb2ca8b609dc99da5ee52d37f77fcab75 +Author: edalmava +Date: Tue Jul 16 09:38:03 2024 -0500 + + #06 - Javascript + + \ No newline at end of file From e5cbb0dd3222cc67494ef52bd96e9fdd9a0130ed Mon Sep 17 00:00:00 2001 From: Steven9708m Date: Thu, 5 Sep 2024 23:31:29 -0500 Subject: [PATCH 004/539] Create steven9708m.py --- .../python/steven9708m.py | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/steven9708m.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/steven9708m.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/steven9708m.py new file mode 100644 index 0000000000..76e8749484 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/steven9708m.py @@ -0,0 +1,146 @@ +""" +Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: +Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... +(Ten en cuenta que cada lenguaje puede poseer unos diferentes) + """ + # 1. Operadores aritméticos + +from pickletools import pystring + +num1 = 8 +num2 = 6 + +print(f"Suma: 8 + 6 = {num1 + num2}") #SUMA +print (f"Resta: 8 - 6 = {num1 - num2}") #RESTA +print (f"Multiplicacion: 8 * 6 = {num1 * num2}") # Multiplicacion +print (f"Division: 8 / 6 = {num1 / num2}") # DIVISION DECIMALES +print (f"Division: 8 // 6 = {num1 // num2}") # DIVISION ENTERA +print (f"Resto de Division: 8 % 6 = {num1 % num2}") # MODULO (Resto de una division) +print (f"Potencia: 8 ** 6 = {num1 ** num2}") # Potencia + +# 2. Operadores de comparación + +print (f"Igual A: 8 == 6 = {num1==num2}") # Igual A +print (f"Distinto de: 8 != 6 = {num1 != num2}") # Distinto De +print (f"Mayor que: 8 > 6 = {num1 > num2}") # Mayor que +print (f"Menor que: 8 < 6 = {num1 < num2}") # Menor que +print (f"Mayor o Igual que: 8 >= 6 = {num1 >= num2}") # Mayor o Igual que +print (f"Menor o Igual que: 8 <= 6 = {num1 <= num2}") # Menor o Igual que + +# 3. Operadores lógicos + +print (f"And: 8 * 6 == 48 AND 48 < 52 es {num1*num2==48 and 48<52}") #TRUE +print (f"OR: 8 * 6 == 48 OR 48 > 52 es {num1*num2==48 or 48<52}") #TRUE +print (f"NOT: not 8 * 6 == 46 es {not num1*num2==46}") #TRUE + +# 3. Operadores de asignación + +S = 8 +print(f"La letra S es = {S}") +S += 4 +print(f"Suma y Asignacion = {S}") +S -= 2 +print(f"Resta y Asignacion = {S}") +S *= 3 +print(f"Multiplicacion y Asignacion = {S}") +S /= 10 +print(f"Division y Asignacion = {S}") +S %= 5 +print(f"Modulo y Asignacion = {S}") +S **= 4 +print(f"Potencia y Asignacion = {S}") +S //= 4 +print(f"Division Entera y Asignacion = {S}") + +# 4. Operadores de identidad +SM=20.0 +print(f"S is SM es: {S is SM}") +print(f"S is not SM es: {S is not SM}") + +# 5. Operadores de Pertenecia + +print(f"'A' in 'Steven' es: {'A' in 'Steven'}") +print(f"'A' not in 'Steven' es: {'A' not in 'Steven'}") + +# 6. Operadores bit a bit + +x = 15 # 1111 +y = 10 # 1010 + +print(f"AND: 15 & 10 = {15 & 10}") # 1010 +print(f"OR: 15 | 10 = {15 | 10}") # 1111 +print(f"XOR: 15 ^ 10 = {15 ^ 10}") # 0101 +print(f"NOT: ~15 = {~15}") +print(f"Desplazamiento a la Derecha: 10 >> 2 = {10 >> 2}") +print(f"Desplazamiento a la Izquierda: 10 << 2 = {10 << 2}") + + +''' +ESTRUCTURAS DE CONTROL +''' + +#CONDICIONALES + +my_string = "Miranda" + +if my_string == "Miranda": + print ("My_String es 'Miranda'") +elif my_string == "Romero": + print ("My_String es 'Romero'") +else: + print ("My_String No es 'Miranda' ni 'Romero'") + +# Iterativas + +for i in range (11): + print (i) + +i = 0 + +while i <= 10: + print(i) + i += 1 + +# MANEJO DE EXCEPCIONES + +try: + print (10/0) + +except: + print ("Se ha producido un error") + +finally: + print ("Ha finalizadp el manejo de excepciones") + +''' + +DIFICULTAD EXTRA (opcional): + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + +''' + +for number in range (10,56): + if number % 2 == 0 and number != 16 and number % 3 != 0: + print (number) + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From ddfe4348f2b446e050643e1de6ca0ec3bbecca02 Mon Sep 17 00:00:00 2001 From: drvito1977 Date: Fri, 6 Sep 2024 12:06:43 +0200 Subject: [PATCH 005/539] #[01]-[bash] --- .../bash/drvito1977.sh | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/bash/drvito1977.sh diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/bash/drvito1977.sh b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/bash/drvito1977.sh new file mode 100644 index 0000000000..594e0ca258 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/bash/drvito1977.sh @@ -0,0 +1,100 @@ +#!/bin/bash + +# Sección de operadores (ejemplo básico) +a=10 # Asignación de valor a la variable a +b=5 # Asignación de valor a la variable b + +suma=$((a+b)) +resta=$((a-b)) +multiplicacion=$((a*b)) +division=$((a/b)) +modulo=$((a%b)) +mayor=$((a>b)) +menor=$((a Date: Fri, 6 Sep 2024 06:08:29 -0430 Subject: [PATCH 006/539] #01 - javascript --- .../javascript/duendeintemporal.js | 675 ++++++++++++++++++ 1 file changed, 675 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/duendeintemporal.js diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/duendeintemporal.js b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/duendeintemporal.js new file mode 100644 index 0000000000..78aee7cfb0 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/duendeintemporal.js @@ -0,0 +1,675 @@ +/* { RETOS DE PROGRAMACIÓN } #1 OPERADORES Y ESTRUCTURAS DE CONTROL */ +//Note: I use Matt Frisbie book "Professional JavaScript for Web Developers" as a reference to give accurate additional information about the use of some operantors +//I also serch some tips in JavaScript Notes for Professionals from the beautiful people of StackOverflow. You can get it for free in GoalKicker.com + +//short for console.log +let log = console.log.bind(console); + +/* OPERATORS */ +//Unary Operators + + //Unary Plus and Minus +/* When the unary plus is applied to a nonnumeric value, it performs the same conversion as the +Number() casting function: the Boolean values of false and true are converted to 0 and 1, string +values are parsed according to a set of specific rules, and objects have their valueOf() and/or +toString() method called to get a value to convert. */ + + let str1 = "03"; + str1 = +str1; + log(str1) // value becomes numeric 3 + + let str2 = "1.4"; + log(str1 + +str2)// 4.4 + + str2 = +str2; + log(str2) // value becomes numeric 1.4 + + let str3 = "zaz"; + str3 = +str3; + log(str3) // value becomes NaN + + let bool = true; + bool = +bool; + log(bool) // value becomes numeric 1 + + let f_num = 2.8; + f_num = +f_num; + log(f_num) // no change, still 2.8 + + let obj = { + valueOf() { + return -5; + } + }; + obj = +obj; + log(obj) // value becomes numeric -5 + +/* The unary minus operator’s primary use is to negate a numeric value, such as converting 1 into –1. The simple case is illustrated here: */ + + let g_actions=50; + g_actions= -g_actions; + log(g_actions) // value becomes -50 + +/* When used on a numeric value, the unary minus simply negates the value. When used on non numeric values, unary minus applies all of the same rules as unary plus and then negates the result */ + + str1 = -str1; + log(str1) // value becomes numeric -3 + + str2 = -str2; + log(str2) // value becomes numeric -1.4 + + str3 = -str3; + log(str3) // value becomes NaN + + bool = -bool; + log(bool) // value becomes numeric -1 + + f_num = -f_num; + log(f_num) // no change, still -2.8 + + obj = -obj; + log(obj) // value becomes numeric 5 + + + //Increment/Decrement ++ -- + let num1 = 10, num2 = 5, num3, num4; + num3 = num1++; + log(num3); // 10 + log(num1); // 11 + num3 = ++num1; + log(num3); // 12 + log(num1); // 12 + num4 = num2--; + log(num4); // 5 + log(num2); // 4 + num4 = --num2; + log(num4); // 3 + log(num2); // 3 + num4++; + log(num4); // 4 + + + //Bitwise Operators +/* The next set of operators works with numbers at their very base level, with the bits that represent them in memory. +When you apply bitwise operators to numbers in ECMAScript, a conversion takes place behind the scenes: the 64-bit number is converted into a 32-bit number, the operation is performed, and then the 32-bit result is stored back into a 64-bit number. */ + +//Bitwise NOT ~ +//The bitwise NOT is represented by a tilde (~) and simply returns the one’s complement of the number. +let n1 = 25; // binary 00000000000000000000000000011001 +let n2 = ~n1; // binary 11111111111111111111111111100110 +log(n2); // -26 it negates the number and subtracts 1 +//same to say +n2 = -n1 -1; +//but bitwise operation performs faster cause it works at the lowest lavel of numeric representation. + +//Bitwise AND & +//A bitwise AND operation returns 1 if both bits are 1. It returns 0 if any bits are 0. + +let n3 = 25 & 3; +log(n3) /* logs: 1 cause the comparation of both binary codes is : + 25 = 0000 0000 0000 0000 0000 0000 0001 1001 + 3 = 0000 0000 0000 0000 0000 0000 0000 0011 + --------------------------------------------- + AND = 0000 0000 0000 0000 0000 0000 0000 0001 */ + +//Bitwise OR | +//A bitwise OR operation returns 1 if at least one bit is 1. It returns 0 only if both bits are 0. + +n3 = 25 | 3; +log(n3) /* Logs: 27 cause the comparation of both binary codes is : + 25 = 0000 0000 0000 0000 0000 0000 0001 1001 + 3 = 0000 0000 0000 0000 0000 0000 0000 0011 + --------------------------------------------- + OR = 0000 0000 0000 0000 0000 0000 0001 1011 */ + +//Bitwise XOR +//Bitwise XOR is different from bitwise OR in that it returns 1 only when exactly one bit has a value of 1 (if both bits contain 1, it returns 0). + +n3 = 25 ^ 3; +log(n3); /* Logs: 26 cause the comparation of both binary codes is : + 25 = 0000 0000 0000 0000 0000 0000 0001 1001 + 3 = 0000 0000 0000 0000 0000 0000 0000 0011 + --------------------------------------------- + XOR = 0000 0000 0000 0000 0000 0000 0001 1010 */ + +//Left Shift +//The left shift is represented by two less-than signs (<<) and shifts all bits in a number to the left by the number of positions given + +let number = 2; // 10 in binary code +let new_number = number << 6; // 10000000 in binary code wich is decimal 128 +log(new_number)// 128 + +/* |1| |0| |0| |0| |0| |0| |0| |0| +(2^7x1) + (2^6x0) + (2^5x0) + (2^4x0) + (2^3x0) + (2^2x0) + (2^1x0) + (2^0x0) //here ^ is a powder + 128 + 0 + 0 + 0 + 0 + 0 + 0 + 0 = 128 */ + +//Signed Right Shift +//The signed right shift is represented by two greater-than signs (>>) and shifts all bits in a 32-bitnumber to the right while preserving the sign (positive or negative). + +number = 128; // 10000000 in binary code +new_number = number >> 6 // 10 in binary code wich is decimal 2 +log(new_number)// 2 + + +//Unsigned Right Shift +/* The unsigned right shift is represented by three greater-than signs (>>>) and shifts all bits in a 32-bit number to the right. For numbers that are positive, the effect is the same as a signed right shift. For negative numbers unlike signed right shift, the empty bits get filled with zeros regardless of the sign of the number.*/ + +number = -64; // equal to binary 11111111111111111111111111000000 +new_number = number >>> 5; // equal to decimal 134217726 +log(new_number)// 134217726 +/* because the unsigned right shift treats this as a positive number, it considers the value to be +4294967232. When this value is shifted to the right by five bits, it becomes 00000111111111111111 +111111111110, which is 134217726. */ + + +/* Boolean operators */ +//Logical NOT ! +//can be used in any value. This operator always returns a Boolean value, regardless of the data type it’s used on. The logical NOT operator first converts the operand to a Boolean value and then negates it, + +log(!false); // true +log(!"shadow"); // false +log(!0); // true +log(!NaN); // true +log(!""); // true +log(!57344); // false +log(!null) // true +log(!undefined) // true + +//it can be used to transform a value into it's boolean equivalent by using two NOT operators in a row + +let name = 'Angy'; +//name = !!name; +//log(name); // Logs: true + +//Note: see that the first negate the value after covert it, the second just convert it to boolean. + +//Logical ADN && +//it operates over two values and return true if both values are true, false otherwise +log(true && name)// Angy +log(false && 'Angy')// false +log(4 < 5 && 8 >6)// true +/* Logical AND can be used with any type of operand, not just Boolean values. When either operand is +not a primitive Boolean, logical AND does not always return a Boolean value; instead, it does one of the following: +➤➤ If the first operand is an object, then the second operand is always returned. +➤➤ If the second operand is an object, then the object is returned only if the first operand evalu- +ates to true. +➤➤ If both operands are objects, then the second operand is returned. +➤➤ If either operand is null, then null is returned. +➤➤ If either operand is NaN, then NaN is returned. +➤➤ If either operand is undefined, then undefined is returned. */ + + + +//Logical OR || +//it operates over two values and return true if both or one of both values are true, false other wise +let empty = ''; +log(false || empty)// Logs: +log(name || empty)// Angy +log(4 >= 5 || 8 >6)// true + +/* Just like logical AND, if either operand is not a Boolean, logical OR will not always return a Boolean value; instead, it does one of the following: +➤➤ If the first operand is an object, then the first operand is returned. +➤➤ If the first operand evaluates to false, then the second operand is returned. +➤➤ If both operands are objects, then the first operand is returned. +➤➤ If both operands are null, then null is returned. +➤➤ If both operands are NaN, then NaN is returned. +➤➤ If both operands are undefined, then undefined is returned. */ + +//Note: Both AND and OR are short-circuit operants, this means sometimes only the first operator is evaluated + +//Multiplicative Operators +/* There are three multiplicative operators in ECMAScript: multiply, divide, and modulus. These operators work in a manner similar to their counterparts in languages such as Java, C, and Perl, but they also include some automatic type conversions when dealing with nonnumeric values. */ + +//Multiple Operator * +number = 4 * '8'; +log(number)// Logs: 32 cause the above explanation + +//Divide Operator / +number = 10 / 5; +log(number)// Logs: 2 +number = 4 / 40; +log(number)// Logs: 0.1 + +//Modulus (remainder) Operator % +number = 41 % 5; +log(number)// Logs: 1 + +//Exponentiation Operator ** +number = 4 ** 2; +log(number)// Logs: 16 +//same as +log(Math.pow(4,2))// 16 + +//Add Operator + +number = 76 + 78; +log(number)// 154 +log('76' + '78')// 7678 on strings performs as a concatenator + +number = BigInt(767867686876876) + BigInt(6757575755); +log(number)// 767874444452631n + +//Subtract - +number = 48 - 3; +log(number)// 45 + +//Note: These operators has a particulary behavior in some cases when are used with Infinity, 0, NaN or a non numeric values, you should search if you want more information. + + +/* Relatioanl Operators */ +/* The less-than (<), greater-than (>), less-than-or-equal-to (<=), and greater-than-or-equal-to (>=) relational operators perform comparisons between values in the same way that you learned in math class. */ +let computation = 76 < 4; +log(computation)// false +computation = 87 > 32; +log(computation)// true +computation = 43 <= 43; +log(computation)// true +computation = 44 >= 85; +log(computation)// false + +let user ={ + name: 'Clavin & Hobbes' +} + +log(user <= 4)// false + +log("43" < "8")// true +log("43" < 8)// false + +log('DeepState' < 'real people')// true not only cause are more real people, but when we talk about strings the upper characters has lower codes than the regulars ones +console.log('DeepState'.toLowerCase() < 'real people'.toLocaleLowerCase())// true again ... well ummm sometimes we win + +/* As with other operators in ECMAScript, there are some conversions and other oddities that happen +when using different data types. They are as follows: +➤➤ If the operands are numbers, perform a numeric comparison. +➤➤ If the operands are strings, compare the character codes of each corresponding character in +the string. +➤➤ If one operand is a number, convert the other operand to a number and perform a numeric +comparison. +➤➤ If an operand is an object, call valueOf() and use its result to perform the comparison +according to the previous rules. If valueOf() is not available, call toString() and use that +value according to the previous rules. +➤➤ If an operand is a Boolean, convert it to a number and perform the comparison */ + +//Equality operators +//Determining whether two variables are equivalent is one of the most important operations in programming. + +//equal or Equality Operator == +log(2 == '2')// true +//deep comparation, also comapare types. identically equal or Strict Equality Operator === +log(2 === '2')// false +//not-equal or Inequality Operator != +log(2 != '2')// false +//deep comparation, also compare types. identically not-equal or Strict Inequality Operator !== +log(2 !== '2')// true + +/* When performing conversions, the equal and not-equal operators follow these basic rules: +➤➤ If an operand is a Boolean value, convert it into a numeric value before checking for +equality. A value of false converts to 0, whereas a value of true converts to 1. +➤➤ If one operand is a string and the other is a number, attempt to convert the string into a +number before checking for equality. +➤➤ If one of the operands is an object and the other is not, the valueOf() method is called on +the object to retrieve a primitive value to compare according to the previous rules. + +The operators also follow these rules when making comparisons: +➤➤ Values of null and undefined are equal. +➤➤ Values of null and undefined cannot be converted into any other values for +equality checking. +➤➤ If either operand is NaN, the equal operator returns false and the not-equal operator +returns true. Important note: even if both operands are NaN, the equal operator returns +false because, by rule, NaN is not equal to NaN. +➤➤ If both operands are objects, then they are compared to see if they are the same object. If +both operands point to the same object, then the equal operator returns true. Otherwise, +the two are not equal. */ + +log(NaN != NaN)// true +log(true == 1)// true +log(null==undefined)// true +log(null===undefined)// false + +//Conditional Operator (condition)? true : false; +/* This basically allows a conditional assignment to a variable depending on the evaluation of the +boolean_expression. If it’s true, then true_value is assigned to the variable; if it’s false, then +false_value is assigned to the variabl */ + + +let login = (user.name == 'Nixon')? `Succesfull login, Wellcome ${user.name}` : "Sorry we don't have any user with that name"; +log(login)// Sorry we don't have any user with that name + +//Assignment Operators + +let a = 'a'; +a = a + a; +log(a)// aa + +number = 8; + +/* Compound assignment is done with one of the multiplicative, additive, or bitwise–shift operators +followed by an equal sign (=). These assignments are designed as shorthand for such common situa- +tions as: */ + +number *= number; +log(number)// 64 + +number -= 4; +log(number)// 60 + +/* Compound-assignment operators exist for each of the major mathematical operations and a few +others as well. They are as follows: +➤➤ Multiply/assign (*=) +➤➤ Divide/assign (/=) +➤➤ Modulus/assign (%=) +➤➤ Add/assign (+=) +➤➤ Subtract/assign (-=) +➤➤ Left shift/assign (<<=) +➤➤ Signed right shift/assign (>>=) +➤➤ Unsigned right shift/assign (>>>=) +These operators are designed specifically as shorthand ways of achieving operations. They do not +represent any performance improvement. */ + +// Membership Operators +// the in operator +let Crows = { + description: "Mutant fat man lives beyond the margins of the known universe...", + age: 600, +} + +log('description' in Crows)// true +log('location' in Crows)// false + +// instanceof operator + +class User { + constructor(name, age, email) { + this.name = name; + this.age = age; + this.email = email; + } + + greeting() { + return `Hi ${this.name}. Wellcome to Roadmap Exercise #01.`; + } +} + +const niko_zen = new User('Niko', 41, 'duendeintemporal@hotmail.com'); +log(niko_zen.greeting())// 'Hi Niko. Wellcome to Roadmap Exercise #01'; + +log(niko_zen instanceof User) // true +log(niko_zen instanceof Object) // true +log(4 instanceof Number) // false cause 4 is a primitive value +let four = new Number(4) +log( four instanceof Number)// true + +// Type Operators +// we can use instanceof or typeof +log(typeof true)// boolean +log(typeof NaN)// number +log(typeof niko_zen)// object + +//Destructuring Operatorations spread operator ... +// on arrays +let books = ['Dune', 'Shibumi', 'El Maestro de Esgrima', 'El Perfume']; +let books2 = ['Elocuent javascript', 'You Don’t Know JS ES6 Beyond', 'Linux Command Line An Admin Beginners Guide', 'Learn Bash the Hard Way', 'Programming Algorithms', 'MATLAB Notes for Professionals'] +const mix_books = [...books, ...books2]; +const [frank_herbert, trevanian] = books; +log(trevanian)//Logs: Shibumi + +// on objects +const { email } = niko_zen; +log(email)// duendeintemporal@hotmail.com + +const niko_zen_settings ={ + mode: 'dark', + avatar: 'moebius.svg', + interfaz: 'compact', +} + +const niko_zen_data = { ...niko_zen, ...niko_zen_settings }; +log(niko_zen_data)//Logs both objects niko_zen instance and niko_zen_settings + +function showUser({name, age, email}){ + log(`User name: ${name}, age: ${age}, email: ${email}`); +} + +showUser(niko_zen)// Logs: User name: Niko, age: 41, email: duendeintemporal@hotmail.com + +// we can also asign default values in destructuring + +const config = { font: 'monospace' }; +const { font, mode = 'dark' } = config; + +log(font, mode)// monospace dark + +//you can use destructuring for exchange values on two or more variables +let ninja1 = 'Hiroshi'; +let ninja2 = 'Neko'; +let ninja3 = 'Kage'; + +[ninja1, ninja2, ninja3] = [ninja2, ninja3, ninja1]; +log(ninja1)// Neko + +// you can copy objects or arrays without modifing the original +const shinobi = { + skills: ['fast', 'quick', 'precise', 'lethal', 'computational thinking'], + location: 'no found', +} + +const trix = { ...shinobi }; +trix.location = 'Bangkok, Thailand'; + +log(shinobi.location)// no found +log(trix.location)// Bangkok, Thailand + +// you can also use spread operator to pass array elements as arguments in functions or methods +nums = [1,3,4,5,6,] +log(Math.max(...nums))// logs: 6 + +// or to create an array of arguments +const calculateAverage = (...numbers)=> { + const total = numbers.reduce((sum, num) => sum + num, 0); + return total / numbers.length; +} + +// see that when we call the function all the arguments get holded in numbers +const average = calculateAverage(90, 76, 45, 23, 67); +console.log(average); // 60.2 + +// you can also use it to convert a string into an array of its individual characters + +let maximum = 'in a society that has abolish every kind of adventure, the only adventure that remains is abolish the society' + +let maxim_arr = [...maximum]; +log(maxim_arr)// [ "i", "n", " ", "a", " ", "s", "o", "c", "i", "e", … ] + +//Comma Operator +//The comma operator allows execution of more than one operation in a single statement, as illustrated here: + +let number1 = 1, number2 = 2, number3 = 3, number4; +log(number1, number2, number3, number4)// 1 2 3 undefined + +/*Most often, the comma operator is used in the declaration of variables; however, it can also be used to assign values. When used in this way, the comma operator always returns the last item in the +expression, as in the following example: */ +number = (225, 14, 40, 8, 220); // num becomes 220 +log(number)// 220 +/*There aren’t many times when commas are used in this way; however, it is helpful to understand that this behavior exists. */ + +//Flow Control Statements +//the if statement +if(number){ + number+=4; + log(number)// 224 +} + +//the else statement +if(number){ + number+=4; + log(number)// 228 +}else{ + // what ever +} + +//the else if statement +if(number > 300){ + number+=4; + log(number) +}else if(number > 200){ + number+=4; + log(number)// Logs: 232 +} +else{ + //do something +} + +// the do-while statement +/* The do-while statement is a post-test loop, meaning that the escape condition is evaluated only after the code inside the loop has been executed. */ +let count = 0; +do { + log("I'm learning a lot in this roadmap for coders, even with these basic exercises") + count++; +} while (count < 1); + +// the while statement +//while(true){ + //do something + //create an infinite loop cause always evaluate to true +//} + +// the for statement +number = 0; +for(let i = 1; i <= 100; i++){ + number += i; +} +log(number)// Logs: 5050 + +//Nothing can be done with a for loop that can’t be done using a while loop. The for loop simply encapsulates the loop-related code into a single location. + +// the for-in statement +// let us iterate over the properties of object elements +let user2 = { + name: 'Nikita', + age: 32, + location: 'No Found', +} + +for(let data in user2){ + log(data) // logs only the property + log(data, user2[data]) // logs the property and the value + log(data, eval('user2.' + data)) // the same as before +} + +/* Object properties in ECMAScript are unordered, so the order in which property names are returned +in a for-in statement cannot necessarily be predicted. All enumerable properties will be returned +once, but the order may differ across browsers. */ + +// the for-of statement +// is thinked to iterate over array elements +let oddNums = [1,3,5,7,9] + +for(let num of oddNums){ + log(num)// logs each num +} + +/* we can use Object.entries(), Object.keys(), Object.values() to iterate over object f. e. + +Object.entries(user2) result in: + [ + [ "name", "Nikita" ] + [ "age", 32 ] + [ "location", "No Found" ] + ] */ +// so we can just +for(let [key, val] of Object.entries(user2)){ + log(`${key}: ${val}`); +} + +// Label statements +outer_loop:for(let i = 0; i <= 10; i++){ + inner_loop:for(let y = 0; y < 5; y++){ + if((i==2) && (y == 4)) break outer_loop; + if(y==3) break inner_loop; + log('Is there anybody outthere?') + } +} + +// break and continue statements +/* The break and continue statements provide stricter control over the execution of code in a loop. +The break statement exits the loop immediately, forcing execution to continue with the next state- +ment after the loop. The continue statement, on the other hand, exits the loop immediately, but +execution continues from the top of the loop. Here’s an example: */ +number = 0; +while(number < 5){ + if(number == 3) break; + log(number); + number++; +}// Logs: number value three times: 0 1 2 + +number = 0; +while(number < 5){ + if(number == 3){ + number++; + continue; + } + log(number); + number++; +}// Logs: number value four times: 0 1 2 4 + +//The with Statement + +/* The with statement was created as a convenience for times when a single object was being coded to over and over again, as in this example: + +let qs = location.search.substring(1); +let hostName = location.hostname; +let url = location.href; + +Here, the location object is used on every line. This code can be rewritten using the with statement +as follows: + +with(location) { +let qs = search.substring(1); +let hostName = hostname; +let url = href; +} */ + +//example +with(user){ + log(name)// Clavin & Hobbes +// log(age)// thow an error cause age is undefined +} + +//Note: the with statement is generally discouraged in modern JavaScript because it can lead to code that is difficult to read and maintain, and it can also cause performance issues. + +// The Switch Statement + +switch(user.name){ + case 'Nikita': + log('Wellcome agent'); + break; + case 'Calvin &' + 'Hobbes': + log('Bring me some cookies'); + break; + default: + log('Turn off that TV'); //log this cause is missing and space in the second case +} + +//we can also use an expression that evaluates a string concatenation in a case. The ability to have case expressions also allows you to do things like this: +/* +let num = 25; +switch (true) { + case num < 0: + console.log("Less than 0."); + break; + case num >= 0 && num <= 10: + console.log("Between 0 and 10."); + break; + case num > 10 && num <= 20: + console.log("Between 10 and 20."); + break; + default: + console.log("More than 20."); +} */ + +// Extra dificulty: Write a code that prints all the even numbers between 10 and 55 inclusive, and if the number are 2 or 16 dont't print them + +for(let i = 10; i <= 55; i++ ){ + if(i % 3 == 0 || i == 16) continue; + if(i % 2 == 0) log(i); +} \ No newline at end of file From 79dc90ae2bdebf8471f2793abc9765720c32c99c Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Fri, 6 Sep 2024 12:48:57 +0200 Subject: [PATCH 007/539] #23 - Kotlin --- Roadmap/23 - SINGLETON/kotlin/eulogioep.kt | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Roadmap/23 - SINGLETON/kotlin/eulogioep.kt diff --git a/Roadmap/23 - SINGLETON/kotlin/eulogioep.kt b/Roadmap/23 - SINGLETON/kotlin/eulogioep.kt new file mode 100644 index 0000000000..cf8c8d5c1d --- /dev/null +++ b/Roadmap/23 - SINGLETON/kotlin/eulogioep.kt @@ -0,0 +1,57 @@ +// Ejemplo genérico de Singleton +object Singleton { + init { + println("Singleton inicializado") + } + + fun doSomething() { + println("Singleton está haciendo algo") + } +} + +// Ejemplo de la dificultad extra: Sesión de usuario +object UserSession { + private var userId: Int? = null + private var username: String? = null + private var name: String? = null + private var email: String? = null + + fun setUser(id: Int, username: String, name: String, email: String) { + this.userId = id + this.username = username + this.name = name + this.email = email + println("Usuario asignado a la sesión") + } + + fun getUserData(): Map { + return mapOf( + "id" to userId, + "username" to username, + "name" to name, + "email" to email + ) + } + + fun clearSession() { + userId = null + username = null + name = null + email = null + println("Sesión borrada") + } +} + +fun main() { + // Uso del Singleton genérico + println("Usando el Singleton genérico:") + Singleton.doSomething() + Singleton.doSomething() + + println("\nUsando el UserSession:") + // Uso del UserSession + UserSession.setUser(1, "eulogioep", "Eulogio EP", "eulogioep@ex.com") + println("Datos del usuario: ${UserSession.getUserData()}") + UserSession.clearSession() + println("Datos después de borrar: ${UserSession.getUserData()}") +} \ No newline at end of file From 880e67ed3a8341227a8a373baa259d886b12af9d Mon Sep 17 00:00:00 2001 From: resbaloso <134111217+raynerpv2022@users.noreply.github.com> Date: Fri, 6 Sep 2024 16:13:55 +0200 Subject: [PATCH 008/539] #13 Python and GO --- .../13 - PRUEBAS UNITARIAS/go/raynerpv2022.go | 115 ++++++++++++++++++ .../python/raynerpv2022.py | 88 ++++++++++++++ 2 files changed, 203 insertions(+) create mode 100644 Roadmap/13 - PRUEBAS UNITARIAS/go/raynerpv2022.go create mode 100644 Roadmap/13 - PRUEBAS UNITARIAS/python/raynerpv2022.py diff --git a/Roadmap/13 - PRUEBAS UNITARIAS/go/raynerpv2022.go b/Roadmap/13 - PRUEBAS UNITARIAS/go/raynerpv2022.go new file mode 100644 index 0000000000..110de82964 --- /dev/null +++ b/Roadmap/13 - PRUEBAS UNITARIAS/go/raynerpv2022.go @@ -0,0 +1,115 @@ +package main + +import ( + "testing" +) + +/* + * EJERCICIO: + * Crea una función que se encargue de sumar dos números y retornar + * su resultado. + * Crea un test, utilizando las herramientas de tu lenguaje, que sea + * capaz de determinar si esa función se ejecuta correctamente. + * + */ + +func SumaValue(a, b int) int { + return a + b +} + +func TestSumaValue(t *testing.T) { + result := SumaValue(12, 2) + + expected := 14 + if result != expected { + t.Errorf("SumeValue(12, 2) = %d; want %d", result, expected) + } +} + +func TestSumaVAleustruct(t *testing.T) { + sume := []struct { + a int + b int + r int + }{ + {2, 3, 5}, + {3, 5, 8}, + {89, 10, 99}, + {-1, 0, -1}, + } + for _, i := range sume { + result := SumaValue(i.a, i.b) + if result != i.r { + t.Errorf("SumeValue(%d, %d) = %d; want %d", i.a, i.b, result, i.r) + } + } + +} + +/* +* DIFICULTAD EXTRA (opcional): +* Crea un diccionario con las siguientes claves y valores: +* "name": "Tu nombre" +* "age": "Tu edad" +* "birth_date": "Tu fecha de nacimiento" +* "programming_languages": ["Listado de lenguajes de programación"] +* Crea dos test: +* - Un primero que determine que existen todos los campos. +* - Un segundo que determine que los datos introducidos son correctos. + */ + +var dev = []map[string]interface{}{ + { + "name": "Alice", + "age": 25, + "birth_date": "15-06-1997", + "programming_languages": []string{"Python", "C++", "Rust"}, + }, + { + "name": "Bob", + "age": 30, + "birth_date": "15-06-1997", + "programming_languages": []string{"JavaScript", "Ruby"}, + }, + { + "name": "Charlie", + "age": 22, + "birth_date": "15-06-1997", + "programming_languages": []string{}, + }, +} +var field = []string{"name", "age", "birth_date", "programming_languages"} + +func TestField(t *testing.T) { + + for i, d := range dev { + for _, k := range field { + if _, isPresent := d[k]; !isPresent { + t.Errorf("falta field %v en caso %v\n", k, i+1) + } + } + } + +} + +func TestValue(t *testing.T) { + for i, d := range dev { + if _, ok := d["name"].(string); !ok { + t.Errorf("en case %v, el field `name` no tiene valor valido para string", i+1) + + } + if _, ok := d["age"].(int); !ok { + t.Errorf("en case %v, el field `age` no tiene valor valido para Int", i+1) + + } + if _, ok := d["birth_date"].(string); !ok { + t.Errorf("en case %v, el field `birth_date` no tiene valor valido para string", +1) + + } + if _, ok := d["programming_languages"].([]string); !ok { + t.Errorf("en case %v, el field `programming_languages` no tiene valor valido para slice de string", i+1) + + } + + } +} diff --git a/Roadmap/13 - PRUEBAS UNITARIAS/python/raynerpv2022.py b/Roadmap/13 - PRUEBAS UNITARIAS/python/raynerpv2022.py new file mode 100644 index 0000000000..9bb793570b --- /dev/null +++ b/Roadmap/13 - PRUEBAS UNITARIAS/python/raynerpv2022.py @@ -0,0 +1,88 @@ +# /* +# * EJERCICIO: +# * Crea una función que se encargue de sumar dos números y retornar +# * su resultado. +# * Crea un test, utilizando las herramientas de tu lenguaje, que sea +# * capaz de determinar si esa función se ejecuta correctamente. +# * + + + +import unittest +import datetime + +def sum_number(a,b): + return a+b + +class TestSUma(unittest.TestCase): + + def test_suma_mia1(self): + self.assertEqual(sum_number(12,2),14) + + def test_suma_mia2(self): + self.assertEqual(sum_number(2.1,1),3.1) + + def test_suma_mia3(self): + self.assertEqual(sum_number(-30,1),-29) + + + +# * DIFICULTAD EXTRA (opcional): +# * Crea un diccionario con las siguientes claves y valores: +# * "name": "Tu nombre" +# * "age": "Tu edad" +# * "birth_date": "Tu fecha de nacimiento" +# * "programming_languages": ["Listado de lenguajes de programación"] +# * Crea dos test: +# * - Un primero que determine que existen todos los campos. +# * - Un segundo que determine que los datos introducidos son correctos. +# */ + + + + +class TestDev(unittest.TestCase): + + def setUp(self): + self.case = [ + { + "name": "Alice", + "age": 25, + "birth_date": datetime.datetime.strptime("15-06-1997","%d-%m-%Y").date(), + "programming_languages": ["Python", "C++", "Rust"] + }, + { + "name": "Bob", + "age": 30, + "birth_date": datetime.datetime.strptime("15-06-1997","%d-%m-%Y").date(), + "programming_languages": ["JavaScript", "Ruby"] + }, + { + "name": "Charlie", + "age": 22, + "birth_date": datetime.datetime.strptime("15-06-1997","%d-%m-%Y").date(), + "programming_languages": [] + } +] + + self.keys = ["name","age", "birth_date", "programming_languages"] + + + + def test_fields(self): + + for dev in self.case: + for k in self.keys: + self.assertIn(k,dev,"f{k} not Present in Dict") + + def test_validate_field(self): + for dev in self.case: + self.assertIsInstance(dev["name"],str) + self.assertIsInstance(dev["age"],int) + self.assertIsInstance(dev["birth_date"],datetime.date) + self.assertIsInstance(dev["programming_languages"],list) + for l in dev["programming_languages"]: + self.assertIsInstance(l, str) + + +unittest.main() \ No newline at end of file From 52d3549ae0087d09620ddf6850fee94d6ff5890e Mon Sep 17 00:00:00 2001 From: Manuel Denis Date: Fri, 6 Sep 2024 16:34:22 +0200 Subject: [PATCH 009/539] #00 - Python --- .../python/ManuelDenisDev.py | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/ManuelDenisDev.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/ManuelDenisDev.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/ManuelDenisDev.py new file mode 100644 index 0000000000..f2c814a39a --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/ManuelDenisDev.py @@ -0,0 +1,37 @@ +# Sitio web oficial de la documentación de Python: https://docs.python.org/3/ + +# Esto es un comentario de una sola línea + +""" +Esto es un +comentario de +varias líneas +""" + +''' +Esto tambien +es un comentario +de varias líneas +''' +# Variables en Python (No se necesita declarar el tipo de dato) +mi_variable = "Hola Mundo" # String (str) +mi_variable = "Hola Mundo modificado" # String (str) + +# Python no contiene constantes, pero se puede simular con variables en mayúsculas +MI_CONSTANTE = "Soy una constante" # Por convención, las constantes se escriben en mayúsculas + +# Tipos de datos primitivos en Python +mi_entero = 10 # Entero (int) +mi_decimal = 10.5 # Decimal (float) +mi_booleano = True # Booleano (bool) +mi_booleano = False # Booleano (bool) +mi_string = "Hola Mundo" # String (str) + +# Imprimir en consola +print("Hola Python") + +print(type(mi_entero)) # +print(type(mi_decimal)) # +print(type(mi_booleano)) # +print(type(mi_string)) # + From 8eca38bca393c38ccf51bd344d6e4911838a0a66 Mon Sep 17 00:00:00 2001 From: Clotrack Date: Fri, 6 Sep 2024 18:20:28 +0200 Subject: [PATCH 010/539] Delete e --- e | 1385 ------------------------------------------------------------- 1 file changed, 1385 deletions(-) delete mode 100644 e diff --git a/e b/e deleted file mode 100644 index 9bd756e443..0000000000 --- a/e +++ /dev/null @@ -1,1385 +0,0 @@ -commit db7fa5bc2dc7ba8171068f68cb815c2a332f4723 (HEAD -> main, origin/main, origin/HEAD) -Author: Clotrack -Date: Fri Aug 16 20:48:58 2024 +0200 - - #00 - kotlin - -commit 95993ab6ce339278d700d4e6bf7822a263d6e53d -Merge: 90b74284d 967955942 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sun Jul 21 08:34:46 2024 -0300 - - Merge pull request #5003 from Nikorasu-d/main - - #29 - Python / #00 - Python - -commit 90b74284da3eee1fcd7d2e097e0c223d8828efb0 -Merge: 5980f2d97 56987945e -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sun Jul 21 08:33:32 2024 -0300 - - Merge pull request #5002 from Hyromy/main - - #17 - Python - -commit 5980f2d97724cfe23ad046f1065f2f1d5c3707a5 -Merge: 8dbbd6b7f d91cf0576 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sun Jul 21 08:32:35 2024 -0300 - - Merge pull request #5001 from jrgranadosb/patch-2 - - Create jrgranados.py - -commit d91cf0576920b83e911caf144236620687a5b218 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sun Jul 21 08:31:52 2024 -0300 - - Rename jrgranados.py to jrgranadosb.py - -commit 8dbbd6b7fcbcd0b411008fcd733b96f12927cf21 -Merge: 8f6f0572c b9f2caef0 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sun Jul 21 08:30:55 2024 -0300 - - Merge pull request #5013 from Sac-Corts/main - - #23, #24, #25, #26, #27, #28, #29 - Python - -commit 8f6f0572c35e775f12b8b5f775cef75d82044472 -Merge: 6ab30d47f 1962d9be2 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sun Jul 21 08:30:01 2024 -0300 - - Merge pull request #5000 from santyjL/main - - #26 - python - -commit 6ab30d47f1f1c778c6ff20b4d5d2e8e4852ad995 -Merge: c25c1bf1f 5d099fdd1 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sun Jul 21 08:28:08 2024 -0300 - - Merge pull request #4999 from RaulDoezon/24-JavaScript - - #24 - JavaScript - -commit c25c1bf1f0ec58f34c18e66f711632337a0320c6 -Merge: 5ca591a68 2dd41f3bc -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sun Jul 21 08:27:34 2024 -0300 - - Merge pull request #4998 from Rikmij/main - - Roadmap #29 - Python y Kotlin - -commit 5ca591a68eb8c12b91cbed66b84015fda96b5c2f -Merge: 6a605856a 6901ee09b -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sun Jul 21 08:26:01 2024 -0300 - - Merge pull request #4997 from cyberdidac/main - - #28 - Python - -commit 6a605856a2b97767812b3bdb9a507175fbaced4f (CursoAprendizajeC) -Merge: a9a8bb335 1201a09f8 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sun Jul 21 00:01:24 2024 -0300 - - Merge pull request #5012 from Magupe09/main - - #00-javascript - -commit 1201a09f87951d43afe376c99e921514323b6b6f -Author: Mauro -Date: Sat Jul 20 20:48:13 2024 -0500 - - #01-javascript - -commit b9f2caef0468a73ee3a3e58dd8a172bc82126102 -Author: Isaac Cortés -Date: Sat Jul 20 19:30:49 2024 -0500 - - #29 - Python - -commit 0d0d296ef6610cf00dec6909a80aec94e06ae76d -Author: Isaac Cortés -Date: Sat Jul 20 19:30:32 2024 -0500 - - #28 - Python - -commit 491281383f117c27d66bc95fe63574129ecd35d2 -Author: Isaac Cortés -Date: Sat Jul 20 19:30:12 2024 -0500 - - #27 - Python - -commit fea8bfc4d4e88833d17434d4cb7771ea0fb23afe -Author: Isaac Cortés -Date: Sat Jul 20 19:29:52 2024 -0500 - - #26 - Python - -commit 733f5359ac3b3639b4125092a0ab4503487a52d1 -Author: Isaac Cortés -Date: Sat Jul 20 19:28:13 2024 -0500 - - #25 - Python - -commit fef17e472f5730429c153a25a2e7e761c942e7dc -Author: Isaac Cortés -Date: Sat Jul 20 19:27:51 2024 -0500 - - #24 - Python - -commit 1c35d7471b831a8209d80da15a1392152167484f -Author: Isaac Cortés -Date: Sat Jul 20 19:27:10 2024 -0500 - - #23 - Python - -commit a9a8bb33582370f0ab54b4aa55754598157567b3 -Author: mouredev -Date: Sun Jul 21 00:15:22 2024 +0000 - - Update stats - -commit 77375a6bbfff29f2b3a99aa1b6198345a1c05842 -Merge: d88f6aed4 398def93b -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sat Jul 20 20:46:44 2024 -0300 - - Merge pull request #4996 from raulG91/raulG91 - - #28 - python - -commit d88f6aed400e24475e7db6b857f199d4017b6f04 -Merge: 8313509bc abfe3e6af -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sat Jul 20 20:46:22 2024 -0300 - - Merge pull request #4995 from Vdroiid/main - - 03 - Python - -commit 8313509bcee750197e0acb5ef6156c22b8a05291 -Merge: e550e01c9 1fc6dd2ec -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sat Jul 20 20:45:21 2024 -0300 - - Merge pull request #4994 from DaniBack95/main - - #01 - JavaScript - -commit e550e01c9b54de3cf244d036115ba407ff9bf523 -Merge: 672a29a67 510be5091 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Sat Jul 20 20:44:43 2024 -0300 - - Merge pull request #4993 from JesusAntonioEEscamilla/JesusAEE - - #29 - JavaScript - -commit 96795594248b5e16636c4c6e830506726407123e -Author: nikorasu-d -Date: Sat Jul 20 16:03:57 2024 -0400 - - #00 - Python - -commit e5b3052f75d2712739def5bd72da14b96840286f -Author: Mauro -Date: Sat Jul 20 09:59:58 2024 -0500 - - #00-javascript - -commit 510be5091048ec61286bcb5218800858d1abe8ab -Merge: 06612409a 672a29a67 -Author: Jesus Antonio Escamilla -Date: Sat Jul 20 02:35:59 2024 -0600 - - Merge branch 'main' of github.com:mouredev/roadmap-retos-programacion; branch 'JesusAEE' of github.com:JesusAntonioEEscamilla/roadmap-retos-programacion into JesusAEE - -commit b1b4833cf1ceb58a4e6468992e625efb6912ed9c -Author: nikorasu-d -Date: Sat Jul 20 00:00:43 2024 -0400 - - #29 - Python - -commit 56987945eb4979ab748bd5c05cf5f1e021ac77a4 -Author: Hyromy -Date: Fri Jul 19 20:35:59 2024 -0600 - - #17 - Python - -commit a700bd6d2d517189843017e9e0ea5186453e3ed8 -Author: jrgranadosb -Date: Fri Jul 19 18:35:18 2024 -0600 - - Create jrgranados.py - -commit 672a29a673de7ece67f251591ba5f8cc7631b2ec -Author: mouredev -Date: Sat Jul 20 00:13:22 2024 +0000 - - Update stats - -commit 122415580fef19d259614ff063d1cae076145c85 -Merge: d9f982c0b 804747918 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:08:50 2024 -0300 - - Merge pull request #4992 from noaregui/01-rama - - #01 - Python - -commit d9f982c0bb5df765a64afe1d6f617837432655c5 -Merge: aca73957c 9f53d5810 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:08:36 2024 -0300 - - Merge pull request #4991 from AbelPerezCollado/main - - #03-Python - -commit aca73957c8a41a7e2bb54e85e6ad7d8f691cae4e -Merge: e9ee20634 be27f3176 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:08:13 2024 -0300 - - Merge pull request #4990 from MiguelAngel861/patch-3 - - #00 - Python - -commit be27f3176d27f640f3402f17565669d991700a92 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:07:56 2024 -0300 - - Rename MiguelAngel861 to MiguelAngel861.py - - Se agrega extensión .py - -commit e9ee2063475f0aa074b10e32fae99b347d648251 -Merge: 3ca9bbbec a74808c49 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:07:15 2024 -0300 - - Merge pull request #4989 from Jairo-Alejandro/main - - #[29] - [Python] - -commit 3ca9bbbeccd121a2178472c78a87851d13fbe2c2 -Merge: 7e64ef3fb 829aab45f -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:07:02 2024 -0300 - - Merge pull request #4988 from hectorio23/hectorio23 - - #28 - C++ - -commit 7e64ef3fb03d637427888382ff078c6216821939 -Merge: f542adcf4 07af635b2 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:06:44 2024 -0300 - - Merge pull request #4987 from neslarra/patch-41 - - Reto# 29 - python - -commit f542adcf474c87d5a7fb07d3a6a17ed8e2136c10 -Merge: 817eec613 ee5e5f636 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:06:33 2024 -0300 - - Merge pull request #4986 from RaulDoezon/23-JavaScript - - #23 - JavaScript - -commit 817eec61315f0db55753fff840a01d68e85489e1 -Merge: 6768894b4 173ac8700 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:06:05 2024 -0300 - - Merge pull request #4985 from Jesusway69/main - - #28 - Java - -commit 1962d9be2cac269bc4e86e1e9eda025290f7df25 -Author: santyjL -Date: Fri Jul 19 18:05:58 2024 -0600 - - #26 - python - -commit 6768894b4f9e9828041a0136098187acc754b38b -Merge: ed3a2d200 2587a0e03 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:05:30 2024 -0300 - - Merge pull request #4984 from eamartin96/main - - #06 - Python - -commit ed3a2d2009b578d27fcc835fa4aef8dcb04d52c7 -Merge: bf15f3bb8 2527f55f1 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:05:16 2024 -0300 - - Merge pull request #4983 from Aldroide/main - - Modificación #28 python y Ejercicios #00, #01, #02 de Go - -commit bf15f3bb82cb8682f25173e952ef4dc46becaebd -Merge: 6d1b4cf16 9296b7c29 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:04:48 2024 -0300 - - Merge pull request #4982 from JosephFaster/solucion-reto-00 - - Solucion reto #00-Python - -commit 6d1b4cf16c67caec42c771a2c268e90e35d87923 -Merge: e28b05297 05d85a0e8 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:04:32 2024 -0300 - - Merge pull request #4981 from jcrodmir/main - - #01 - Java and #02 - Java - -commit e28b05297ed8016065c429b63668263b920196c2 -Merge: 180e17022 bbf0f1eec -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:04:11 2024 -0300 - - Merge pull request #4980 from noaregui/00-rama - - #00-Python - -commit 180e17022a64efaa21412d1ad42ea1feacfc861c -Merge: 8e71772d4 20786e822 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:03:54 2024 -0300 - - Merge pull request #4979 from victormugo/main - - 02 - C# - -commit 8e71772d44fe5b7c79148b9cfd6e525a059153b6 -Merge: 119718601 a34f33e0d -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:03:37 2024 -0300 - - Merge pull request #4978 from hozlucas28/Solution-29-Go - - #29 - Go - -commit 119718601f42fea8a23f8c946ffd461c939f2938 -Merge: f1bc60c3f aadaf3da8 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:03:25 2024 -0300 - - Merge pull request #4977 from hozlucas28/Solution-29-Python - - #29 - Python - -commit f1bc60c3fe645f7d4b3d1ea5f6ca5bb3e7f79a9c -Merge: a5ee6ebd9 e84053d79 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:03:11 2024 -0300 - - Merge pull request #4976 from hozlucas28/Solution-29-TypeScript - - #29 - TypeScript - -commit a5ee6ebd9b880b00d181aed9073f24bbd05ac7b5 -Merge: 966458d44 ba84e30ba -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:03:00 2024 -0300 - - Merge pull request #4975 from avcenal/main - - #28 - Python - -commit 966458d441cf61d21024da69a7c670826bc65d57 -Merge: 4046d4c0d 38f5522ac -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:02:49 2024 -0300 - - Merge pull request #4974 from Kenysdev/29.rs - - #29 - rust - -commit 4046d4c0d8e0ceded4c2b846c708a5c61667bee2 -Merge: e84f81658 f06fcf748 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:02:36 2024 -0300 - - Merge pull request #4973 from jcrobles99/main - - #00 - C# - -commit e84f816582a5988f84c51f8b1c42a86c97abc98c -Merge: 0f5cdd53b 07503a3e7 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:02:20 2024 -0300 - - Merge pull request #4970 from Qv1ko/main - - #00 - Java - -commit 0f5cdd53bef4c1b6db1d164044d052e257ea501f -Merge: b3cef7af0 db3ba95cf -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Fri Jul 19 21:01:58 2024 -0300 - - Merge pull request #4963 from EmmanuelMMontesinos/main - - 22 - Python - -commit ba84e30ba2e8df54726f9a0df2109f96330a439d -Merge: fd75787ce b3cef7af0 -Author: avcenal <134477562+avcenal@users.noreply.github.com> -Date: Sat Jul 20 00:11:28 2024 +0200 - - Merge branch 'mouredev:main' into main - -commit 2dd41f3bcdff505ef48761bc184ed37c335e36d1 -Author: Rick <135878591+Rikmij@users.noreply.github.com> -Date: Fri Jul 19 21:02:29 2024 +0200 - - Road #29 - Python - -commit 5d099fdd172512c5f0501a08474174030aa51fee -Author: Raúl Dóezon -Date: Fri Jul 19 13:01:56 2024 -0600 - - #24 - JavaScript - -commit b2db09b2a62cd8a576d66a0c669aee6c54f292f3 -Author: Rick <135878591+Rikmij@users.noreply.github.com> -Date: Fri Jul 19 21:01:28 2024 +0200 - - Road #29 - Kotlin - -commit 06612409a97a218226bc8c1f1bc55d933137c0e9 -Merge: 6e01b026d b3cef7af0 -Author: Jesus Antonio Escamilla -Date: Fri Jul 19 11:25:47 2024 -0600 - - Merge branch 'main' of github.com:mouredev/roadmap-retos-programacion into JesusAEE - -commit 6901ee09bc25964828e28638b258848d78fc8fd0 -Author: Diego Sánchez Escribano -Date: Fri Jul 19 17:27:57 2024 +0200 - - reto 28 python cyberdidac - -commit 398def93bd5ea77e06c5c04df564062c483470a5 -Author: raulG91 <=> -Date: Fri Jul 19 16:22:49 2024 +0200 - - #28 - python - -commit abfe3e6af6e6083075b1222785dc6b511840b019 -Author: vdroid -Date: Fri Jul 19 07:59:14 2024 -0600 - - 03 - Python - -commit 1fc6dd2eca6bbb08c6b891743c02e9fd69c8c4bf -Author: Daniel Baracaldo <77088158+DaniBack95@users.noreply.github.com> -Date: Fri Jul 19 07:33:07 2024 -0500 - - #01 - JavaScript - -commit b3cef7af055e216345da2dbf53e51fc7c1b0589c -Author: Brais Moure -Date: Fri Jul 19 14:16:47 2024 +0200 - - Cursos de lógica - -commit 05d85a0e8eb65527663f9cc4862e64c2cde38d56 -Author: JoanCharles -Date: Fri Jul 19 14:15:35 2024 +0200 - - #02 - Java - -commit 9f53d5810ee3b9cc042429748c2cd19cb1a89739 -Author: Abel Pérez -Date: Fri Jul 19 13:17:14 2024 +0200 - - #04-Python - -commit e8c7a96844d4ad73ab421768b7c0fcd50deb4650 -Merge: 60153a789 a70f4e4f4 -Author: Abel <95299501+AbelPerezCollado@users.noreply.github.com> -Date: Fri Jul 19 13:16:37 2024 +0200 - - Merge branch 'mouredev:main' into main - -commit a70f4e4f46f1b4f5f5aa27822095a6573e561fb1 -Merge: b8287f577 dd155dbfe -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Fri Jul 19 12:38:15 2024 +0200 - - Merge pull request #4969 from RaulDoezon/22-JavaScript - - #22 - JavaScript - -commit b8287f57740ed2991fe8ab8ea81e310207aac8c0 -Merge: d56cef473 d93c161a7 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Fri Jul 19 12:36:21 2024 +0200 - - Merge pull request #4968 from santyjL/main - - #23 - python - -commit d56cef47300172ac101dd616c08541d45bc8e778 -Merge: 80268a8f7 87a5512d7 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Fri Jul 19 12:24:50 2024 +0200 - - Merge pull request #4967 from chriszaldana/logica_js - - #00 - Javascript - -commit 80268a8f797a76e5dbbebd6523a5bae0ac90b4c4 -Merge: c5d0883f9 43ddf9288 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Fri Jul 19 12:22:37 2024 +0200 - - Merge pull request #4966 from kodenook/develop - - Reto #10 - go - -commit c5d0883f9a2b6c743a356ade016fc842409e62b1 -Merge: fbb22a0ef 2bb74a398 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Fri Jul 19 12:19:40 2024 +0200 - - Merge pull request #4965 from edalmava/pascal - - #06 - Pascal - -commit fbb22a0efe9d0be28cb1567eb8673c0b7216087a -Merge: 72e545c12 1f7c39c41 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Fri Jul 19 12:11:59 2024 +0200 - - Merge pull request #4964 from andresmendozaf/main - - #00 - JAVA - -commit 72e545c12c588e5e1e023096944216f9c2304ac6 -Merge: bb7d89dc8 faaaafff7 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Fri Jul 19 12:09:11 2024 +0200 - - Merge pull request #4960 from edalmava/erlang - - #06 - Erlang - -commit bb7d89dc837f14d1fd0c4b5853bfc551e43d0f2c -Merge: 737f80b71 5cf27027e -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Fri Jul 19 12:07:40 2024 +0200 - - Merge pull request #4955 from Markayala13/patch-2 - - Create Operadores - -commit 5cf27027e77f414ad1ad03e1c0dccff2696d538f -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Fri Jul 19 12:03:56 2024 +0200 - - Rename Markayala13.java to Markayala13.java - -commit 1f8ee0566453b664b04d40e44cb1fb47aa6a0a1d -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Fri Jul 19 12:01:59 2024 +0200 - - Rename Operadores.java to Markayala13.java - -commit b13549cfdd3b1a2f61c22493b4f749e51e708340 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Fri Jul 19 11:59:46 2024 +0200 - - Rename Operadores to Operadores.java - -commit 6e01b026d7338007a0dc449de79dfd909b10fc88 -Merge: b926fb56e 737f80b71 -Author: Jesus Antonio Escamilla -Date: Fri Jul 19 03:31:00 2024 -0600 - - Merge branch 'JesusAEE' of github.com:JesusAntonioEEscamilla/roadmap-retos-programacion; branch 'main' of github.com:mouredev/roadmap-retos-programacion into JesusAEE - -commit b926fb56e9b98dfc3b8ca32c732b16b4c370754b -Author: Jesus Antonio Escamilla -Date: Fri Jul 19 03:29:14 2024 -0600 - - #29 - JavaScript - -commit 804747918f24890d16400aa84514bf2e3241cfc0 -Author: Ainhoa -Date: Fri Jul 19 11:05:51 2024 +0200 - - 01-rama - -commit 60153a7894f8d50174731dfb2f4952c13c56d1db -Author: Abel Pérez -Date: Fri Jul 19 09:07:04 2024 +0200 - - #03-Python - -commit 737f80b710279dc2313a5fc64d96d575d3700197 -Author: mouredev -Date: Fri Jul 19 00:13:53 2024 +0000 - - Update stats - -commit 109fff74b1beda707a9063093b4fc7db2c0da827 -Merge: 09bbf3403 e7133a6e2 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Thu Jul 18 20:44:49 2024 -0300 - - Merge pull request #4959 from Chrisdev00/Chrisdev00-branch - - #29 - python y javascript - -commit 09bbf340393546dec76576459b67ce8e70987bd8 -Merge: e4b5971d6 2302b7977 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Thu Jul 18 20:44:06 2024 -0300 - - Merge pull request #4958 from Rodrigoghr/main - - #00 - Python - -commit e4b5971d61d9224ef05762b6a2a6fda6f628e22f -Merge: 32a8eee0d 10c4eef71 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Thu Jul 18 20:43:26 2024 -0300 - - Merge pull request #4957 from SooHav/main - - "#29 - Python" - -commit 32a8eee0d6e96aae3133cfef2ae866f95d1b1305 -Merge: c20f2a610 e36e4fb51 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Thu Jul 18 20:41:45 2024 -0300 - - Merge pull request #4954 from julian98789/patch-15 - - #11 - java - -commit c20f2a610931881c70287f5c3db1c020c4caad90 -Merge: e8cfc1a44 11a283e72 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Thu Jul 18 20:40:34 2024 -0300 - - Merge pull request #4961 from Kenysdev/27.rs - - #27 - rust -fix - -commit 1309339911fb0f8436a7287a432852ce09c5df4c -Merge: cbb2bd127 e8cfc1a44 -Author: Jesus Antonio Escamilla -Date: Thu Jul 18 16:47:10 2024 -0600 - - Merge branch 'main' of github.com:mouredev/roadmap-retos-programacion into JesusAEE - -commit 7214da979a7385d154e1697d94bcd48f08a02a16 -Author: MiguelAngel861 <97812660+MiguelAngel861@users.noreply.github.com> -Date: Thu Jul 18 16:02:43 2024 -0600 - - #00 - Python - -commit a74808c49eee326c571aad257ab609f46bf8b16a -Author: Alejandro -Date: Thu Jul 18 16:28:05 2024 -0500 - - #[29] - [Python] - -commit 829aab45f2b91c8032dc4f52a872b09a2552e8a0 -Author: Héctor Adán -Date: Thu Jul 18 15:25:03 2024 -0600 - - #28 - C++ - -commit 07503a3e7973acbaea55802aa6ecfada3a7e4bf6 -Author: Qv1ko -Date: Thu Jul 18 23:12:16 2024 +0200 - - #00 - PHP - -commit 07af635b2f58a95b0d976bb08a4efca0a6dc138e -Author: neslarra <31991788+neslarra@users.noreply.github.com> -Date: Thu Jul 18 17:59:54 2024 -0300 - - Reto# 29 - python - -commit ee5e5f6360610c08b9cdcd698d1741ec89393145 -Author: Raúl Dóezon -Date: Thu Jul 18 12:08:32 2024 -0600 - - #23 - JavaScript - -commit d93c161a78d4f7ba232e0c0166d4eb647078c722 -Merge: 125e7107d e8cfc1a44 -Author: Santiago López <68027908+santyjL@users.noreply.github.com> -Date: Thu Jul 18 12:02:20 2024 -0600 - - Merge branch 'mouredev:main' into main - -commit 125e7107db3060b83067de5ebe3b345907ca3212 -Author: santyjL -Date: Thu Jul 18 12:00:12 2024 -0600 - - #25 - python - -commit 173ac8700485dafb6e55678b3a8904b0378c5ee0 -Author: JesusWay69 HP elitebook -Date: Thu Jul 18 19:52:46 2024 +0200 - - #28 - Java - -commit 2587a0e03bb61892907a216cdbe5814f2e02b7e0 -Author: Edgar Martinez -Date: Thu Jul 18 09:06:14 2024 -0600 - - Reto#06 - Python - -commit 2527f55f16aedbeee14b31cdc2c7e5a2fc79958b -Author: Aldroide -Date: Thu Jul 18 07:14:56 2024 -0600 - - Modificación #28 python y Ejercicios #00, #01, #02 de Go - -commit db3ba95cf8cab8ea04f90e4ac1e5aec11defc6d2 -Merge: 258c86ef8 e8cfc1a44 -Author: Emmanuel M Montesinos <97795200+EmmanuelMMontesinos@users.noreply.github.com> -Date: Thu Jul 18 15:10:42 2024 +0200 - - Merge branch 'mouredev:main' into main - -commit 258c86ef8212c4447a82c93fadd4c476f7232dbc -Author: Emmanuel -Date: Thu Jul 18 15:10:06 2024 +0200 - - 23 - Python - -commit 9296b7c292980842b4ad6b27103da9629d9ee197 -Author: JosephFaster -Date: Thu Jul 18 05:20:50 2024 -0600 - - Borre hola mundo - -commit f4ad09bd95036c0133c55c5980a4a14bf69a7089 -Author: JosephFaster -Date: Thu Jul 18 05:16:20 2024 -0600 - - ultimo cambio - -commit c93a736c3cbb3d1095cb377312d219397e531aa0 -Author: JosephFaster -Date: Thu Jul 18 05:13:47 2024 -0600 - - Ya está el primer ejercicio - -commit 6c0718c57816056b7e690226558daf95d88ff78b -Author: JoanCharles -Date: Thu Jul 18 11:56:05 2024 +0200 - - #01 - Java - -commit 1952d82fc03898e3d47679e5bbc9c8a0cba1afed -Author: JoanCharles -Date: Thu Jul 18 11:53:32 2024 +0200 - - #01 - Java - -commit e8cfc1a4436694072af75cdce88f4a70cac0b4c9 -Merge: 279cf546d ff2160f2f -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Thu Jul 18 10:05:34 2024 +0200 - - Merge pull request #4938 from Kenysdev/29.py - - #29 - python - -commit 279cf546dbcfc9ab206583711291cea3411e693a -Merge: 1e368a92c f2c822662 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Thu Jul 18 10:04:11 2024 +0200 - - Merge pull request #4936 from eamartin96/main - - #05 - Python - -commit 1e368a92c309642ae5e80c01a4d9a36a25d3e07a -Merge: 8d6e7e5c6 c747556f6 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Thu Jul 18 10:03:05 2024 +0200 - - Merge pull request #4941 from DaniBack95/main - - #00 - JavaScript - -commit 8d6e7e5c62960fc8c2408f1f0426aae5ee965808 -Merge: af7da7295 afc6ee8f9 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Thu Jul 18 10:02:39 2024 +0200 - - Merge pull request #4943 from Vdroiid/main - - #02 - Python - -commit af7da72953c986aa01fb5d28d7f800592dc0b921 -Merge: ddb9eb923 8bbb719a7 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Thu Jul 18 10:02:20 2024 +0200 - - Merge pull request #4944 from edalmava/javascript - - #06 - Javascript - -commit ddb9eb923e6b00b3501e47704d3923ceabbd40ac -Merge: cdb00c4e5 bcb44f0d8 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Thu Jul 18 10:01:59 2024 +0200 - - Merge pull request #4945 from Trufoplus/Solutions - - #29 - Python - -commit cdb00c4e554c012543c6c24a0210526ea4877359 -Merge: afe34569d 410c48554 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Thu Jul 18 10:01:38 2024 +0200 - - Merge pull request #4948 from SnowAle/main - - #00 - Python - -commit afe34569dbfd9e7c40c8439cf103e2e260f3223f -Merge: 85b820cae a6a85a646 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Thu Jul 18 10:01:13 2024 +0200 - - Merge pull request #4949 from CaveroBrandon/25#Python - - #25 - Python - -commit 85b820caeaed7fc9c13f1cb4425e7c34f87ff4a7 -Merge: 2a7f88c4d 9a59910e7 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Thu Jul 18 09:59:40 2024 +0200 - - Merge pull request #4950 from JesusAntonioEEscamilla/JesusAEE - - #28 - JavaScript "Corrección" - -commit 2a7f88c4ddca5322c1b0de8ab459a5778823a369 -Merge: a78c6296e b12b3aea2 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Thu Jul 18 09:59:21 2024 +0200 - - Merge pull request #4934 from rigo93acosta/main - - #23 - Python - -commit a78c6296eafe0e1f8c9a8a06dcd22710a9950d57 -Merge: 7a548c712 1c09b00a9 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Thu Jul 18 09:58:59 2024 +0200 - - Merge pull request #4933 from facundorsabia/mybranch - - #00 - Python - -commit 7a548c7128a9b3c921e88f805c730405b30b44ab -Merge: 5b84162fd a597e1467 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Thu Jul 18 09:58:24 2024 +0200 - - Merge pull request #4932 from agusrosero/develop - - #26 - Javascript - -commit bbf0f1eecc891cd132c195caaa7a0fcb00d27162 -Author: Ainhoa -Date: Thu Jul 18 09:40:55 2024 +0200 - - 00 - Python - -commit e3a308017a7b43cbe0772a9549bd78153badd793 -Author: Ainhoa -Date: Thu Jul 18 09:29:36 2024 +0200 - - 00 - Python - -commit 20786e822210a93bbf6a81b0f29776de94edfd29 -Author: Victor -Date: Thu Jul 18 08:57:13 2024 +0200 - - 02 - C# - -commit a34f33e0de8a4b80d459ca52ee9d5dfd39a15c8a -Author: hozlucas28 -Date: Thu Jul 18 03:26:03 2024 -0300 - - Solution 29 - Go - -commit aadaf3da8db786450e8b38f891da77b93beb47b2 -Author: hozlucas28 -Date: Thu Jul 18 02:51:20 2024 -0300 - - Solution 29 - Python - -commit e84053d79021a1472753d097951ae5f405581a49 -Author: hozlucas28 -Date: Thu Jul 18 02:19:46 2024 -0300 - - Solution 29 - TypeScript - -commit 5b84162fdb4891cc988da6613debf2ae2bcfb40a -Author: mouredev -Date: Thu Jul 18 00:13:38 2024 +0000 - - Update stats - -commit fd75787ceb3c5c87bd127a2a1ce04f3a0ccd8608 -Author: avcenal <134477562+avcenal@users.noreply.github.com> -Date: Wed Jul 17 23:53:12 2024 +0200 - - #28 - Python - - ejercicio #28 del roadmap 2024 - -commit 38f5522ac31cf10d9389a6473d52f4b7895fd7da -Author: kenysdev -Date: Wed Jul 17 16:01:16 2024 -0500 - - 29-rust-SOLID-ISP - -commit a597e1467fa4afa8c50e29931847242bfc1daf5b -Author: agusrosero -Date: Wed Jul 17 16:59:52 2024 -0300 - - #29 - Python - -commit a503cfe56afed0354266e251f77b2959703f48d0 -Merge: 2b8e25684 929ba3832 -Author: Hernan -Date: Wed Jul 17 16:58:33 2024 -0300 - - Merge branch 'mouredev:main' into develop - -commit f06fcf748ddedf3e8271a981798596b05f1de23c -Merge: 3eafc0649 929ba3832 -Author: Juan Robles -Date: Wed Jul 17 13:25:21 2024 -0600 - - Merge branch 'mouredev:main' into main - -commit 3eafc0649d8f66724e8b37969da75bd3d68b86e5 -Author: Juan Robles -Date: Wed Jul 17 13:17:37 2024 -0600 - - #00-C# - -commit ea7cf3579798652b3e92df3c27b3f2471062710b -Author: Qv1ko -Date: Wed Jul 17 21:06:02 2024 +0200 - - #00 - Java - -commit af49315cc5a704367df0e77020446082af1ab8bf -Author: Juan Robles -Date: Wed Jul 17 13:05:45 2024 -0600 - - Finalizacion - -commit 76aa09c6f10cb780c2a6826c91ec44241786f730 -Author: santyjL -Date: Wed Jul 17 12:50:23 2024 -0600 - - #24 - python - -commit dd155dbfe136e1c7cf12a2b256ec7318c27d7716 -Author: Raúl Dóezon -Date: Wed Jul 17 12:48:34 2024 -0600 - - #22 - JavaScript - -commit ed463d9fdfb6d730acab999b86d84747cdc7ca07 -Author: santyjL -Date: Wed Jul 17 11:57:03 2024 -0600 - - #23 - python - -commit 87a5512d7915f93e3f56868a816cf7335b522e3a -Author: Christian Zaldaña -Date: Wed Jul 17 10:57:03 2024 -0600 - - #00 - Javascript - -commit 43ddf9288450eca90a13e28cdc62ab8cc413ae6a -Author: kodenook -Date: Wed Jul 17 11:46:44 2024 -0400 - - Reto #10 - go - -commit 2bb74a39818ddf7006f74f54debb6a147d9f5943 -Author: edalmava -Date: Wed Jul 17 09:54:57 2024 -0500 - - #06 - Pascal - -commit afc6ee8f9543c4daaae0c03e685847a15d52d7bf -Merge: 2a5a4cc17 929ba3832 -Author: Santos C <156567388+Vdroiid@users.noreply.github.com> -Date: Wed Jul 17 08:50:22 2024 -0600 - - Merge branch 'mouredev:main' into main - -commit 8bbb719a7e4feb8da8912aaef61ba574c864f095 -Merge: c7f7069bb 929ba3832 -Author: edalmava -Date: Wed Jul 17 09:33:26 2024 -0500 - - Merge branch 'mouredev:main' into javascript - -commit f1fce3f7855b0bb02f5881343d71b92820491994 -Merge: c1cf9ba50 929ba3832 -Author: Emmanuel M Montesinos <97795200+EmmanuelMMontesinos@users.noreply.github.com> -Date: Wed Jul 17 15:27:39 2024 +0200 - - Merge branch 'mouredev:main' into main - -commit c1cf9ba50a2360507be5ceca882286462d00825e -Author: Emmanuel -Date: Wed Jul 17 15:26:26 2024 +0200 - - 22 - Python - -commit 1f7c39c41be38cc9935304695bf129304ff0dd99 -Merge: 049b82416 929ba3832 -Author: amendozaf -Date: Wed Jul 17 09:18:01 2024 -0400 - - Merge branch 'main' of https://github.com/andresmendozaf/roadmap-retos-programacion - -commit 049b8241614e03d284ab123e27b01c38210ed678 -Author: amendozaf -Date: Wed Jul 17 09:15:00 2024 -0400 - - #00 - JAVA - -commit cbb2bd127f2269736d8771e6fecc15b798dab082 -Merge: 9a59910e7 929ba3832 -Author: Jesus Antonio Escamilla -Date: Wed Jul 17 03:33:22 2024 -0600 - - Merge branch 'main' of github.com:mouredev/roadmap-retos-programacion into JesusAEE - -commit 929ba38325ba96951f1abc9d7d323066d6cd7db6 -Merge: a667af0ee 518037217 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Wed Jul 17 10:47:46 2024 +0200 - - Merge pull request #4931 from EmmanuelMMontesinos/main - - 18 - Python - -commit a667af0ee605966db34e49f23f7f9790b09e0a8e -Merge: a4facda4e fad7c0ab5 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Wed Jul 17 10:46:35 2024 +0200 - - Merge pull request #4929 from julian98789/patch-13 - - #10 - java - -commit a4facda4e8671b84455ea748fd08eb2e0c81f83e -Merge: 9503fe416 f32df5bba -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Wed Jul 17 10:46:09 2024 +0200 - - Merge pull request #4928 from avcenal/main - - #27 - Python - -commit 9503fe4163431251d10a48c89b55fa3185ad3cd0 -Merge: 99cab58ff 5db7392b5 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Wed Jul 17 10:29:53 2024 +0200 - - Merge pull request #4927 from RaulDoezon/21-JavaScript - - #21 - JavaScript - -commit 99cab58ff07f3e21b17e48efe98e999ff8ee9e96 -Merge: 97a95d217 28de425a7 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Wed Jul 17 10:29:31 2024 +0200 - - Merge pull request #4925 from kodenook/develop - - Reto #9 - go - -commit 97a95d217f576340b8a235ae4ee2ed01967cc7b2 -Merge: 6c1668ee5 fe272cfb9 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Wed Jul 17 10:16:34 2024 +0200 - - Merge pull request #4923 from jcrodmir/main - - #00 - Java - -commit 6c1668ee56ce1c3baf0d1c06a161db8873bca1bc -Merge: ed69ab428 82e81c6f9 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Wed Jul 17 10:14:35 2024 +0200 - - Merge pull request #4921 from RicJDev/main - - #05 - TypeScript - -commit ed69ab428f7caa055f1da5d5f780f53c2c3c28d0 -Merge: a5196d536 3281ef2a5 -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Wed Jul 17 10:10:59 2024 +0200 - - Merge pull request #4920 from VolumiDev/main - - #03 - Javascript - -commit a5196d5362fd7390a296072566d28173d05978fe -Merge: ebe897bc6 a23fdb1bb -Author: Raúl Gallego <75795616+kontroldev@users.noreply.github.com> -Date: Wed Jul 17 10:10:30 2024 +0200 - - Merge pull request #4919 from AbelPerezCollado/main - - #02-Python - -commit 5180372176e691111c5d93fa8ec6731b488a21d0 -Author: Emmanuel -Date: Wed Jul 17 09:45:51 2024 +0200 - - threading.Thread correcion al ver otros ejercicios - -commit 2bbf933386e1dc69a19a512e6db03470ef7415a0 -Merge: 334412dd6 b296098b6 -Author: Emmanuel -Date: Wed Jul 17 09:37:33 2024 +0200 - - Merge branch 'main' of https://github.com/EmmanuelMMontesinos/roadmap-retos-programacion - -commit 334412dd6bec954a41a79de251dc16c23bb956c3 -Author: Emmanuel -Date: Wed Jul 17 09:37:26 2024 +0200 - - 21 - Python - -commit b296098b6cb99579b12a3a901a80efe524923669 -Merge: 1164e0a14 ebe897bc6 -Author: Emmanuel M Montesinos <97795200+EmmanuelMMontesinos@users.noreply.github.com> -Date: Wed Jul 17 09:37:03 2024 +0200 - - Merge branch 'mouredev:main' into main - -commit a23fdb1bb6a2ee5b2ae20aef372dad6d25a2f379 -Merge: 038a67b5f ebe897bc6 -Author: Abel <95299501+AbelPerezCollado@users.noreply.github.com> -Date: Wed Jul 17 08:36:20 2024 +0200 - - Merge branch 'mouredev:main' into main - -commit 11a283e727da7b6333bf71d0c4ee5818b0e69c8f -Author: kenysdev -Date: Wed Jul 17 01:14:56 2024 -0500 - - fix 27-rust-SOLID-OCP - -commit faaaafff7a7d3765f53e8f1af2fd8802e82f3d7a -Author: edalmava -Date: Tue Jul 16 22:24:17 2024 -0500 - - #06 - Erlang - -commit 6920191a315ae6348782286ccd9ba76e655816a0 -Author: Juan Robles -Date: Tue Jul 16 18:16:15 2024 -0600 - - variables enteras - -commit ebe897bc652de7df9ea629c519dba2054855b728 -Author: mouredev -Date: Wed Jul 17 00:14:00 2024 +0000 - - Update stats - -commit e7133a6e2114a01189fb470710b7acf8362526ee -Author: Chrisdev00 <134344269+Chrisdev00@users.noreply.github.com> -Date: Tue Jul 16 19:59:51 2024 -0400 - - #29 - python y javascript - -commit 2302b79778c3aab736516e18df6d94a4c735dfa6 -Author: = -Date: Tue Jul 16 18:38:31 2024 -0500 - - #00 - Python - -commit 10c4eef71975365729b5d92acea83524859da270 -Author: SooHav -Date: Tue Jul 16 20:37:55 2024 -0300 - - 29 - python - -commit dab162a097398a84a21faf825479c396bc43e4ae -Author: SooHav -Date: Tue Jul 16 20:20:48 2024 -0300 - - 28 - python - -commit ff2160f2f1756fcb2a354de4bc0d8bf3be4f0dd4 -Author: kenysdev -Date: Tue Jul 16 17:56:02 2024 -0500 - - 29-py-SOLID-ISP - -commit 5b55baf46444ee5b10612055a4b4c1f5daa63ca9 -Author: Markayala13 <149205675+Markayala13@users.noreply.github.com> -Date: Tue Jul 16 17:09:26 2024 -0500 - - Create Operadores - -commit e36e4fb51d81f2af01c620f1d33d58a04a27c8e0 -Author: Julian Gomez <132085190+julian98789@users.noreply.github.com> -Date: Tue Jul 16 17:07:22 2024 -0500 - - julian98789.java - -commit 5d9bcbb9d3ed3cbb815022173e373156467a0a31 -Merge: e08435d17 e6cf641d6 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Tue Jul 16 18:34:15 2024 -0300 - - Merge pull request #4952 from ElHacedorDeCosas/ElHacedorDeCosas - - ##01 - GDScript - -commit e08435d177763513ffaccc0c5e7afd07d569e67c -Merge: 9c294fa48 2f37d4596 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Tue Jul 16 18:33:33 2024 -0300 - - Merge pull request #4946 from Kenysdev/29.cs - - #29 - c# - -commit 9c294fa48e58eabc37e794fb80e068d52e33a334 -Merge: 7aa27a6a1 ca94f23a6 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Tue Jul 16 18:33:21 2024 -0300 - - Merge pull request #4947 from ASJordi/main - - #29 - Java - -commit 7aa27a6a12d3297d9d8dd9a22cb189b486caf883 -Merge: 6abfe9018 bbdd1e490 -Author: Bruce <88008233+Roswell468@users.noreply.github.com> -Date: Tue Jul 16 18:33:10 2024 -0300 - - Merge pull request #4951 from Kenysdev/29.vb - - #29 - vb.net - -commit bbdd1e4905352fef0d3f182655d186280fba167f -Author: kenysdev -Date: Tue Jul 16 16:13:35 2024 -0500 - - 29-vb.net-SOLID-ISP - -commit 1164e0a143a88d11eaaec88632626855b66954d1 -Merge: ea75d5268 8104ec022 -Author: Emmanuel -Date: Tue Jul 16 22:51:59 2024 +0200 - - Merge branch 'main' of https://github.com/EmmanuelMMontesinos/roadmap-retos-programacion - -commit ea75d5268692e1564b504080c05a998f886dbb3a -Author: Emmanuel -Date: Tue Jul 16 22:51:55 2024 +0200 - - #20 - Python - -commit 8104ec0226badea453cb27b127e410f763c095a7 -Merge: d6108fb12 6abfe9018 -Author: Emmanuel M Montesinos <97795200+EmmanuelMMontesinos@users.noreply.github.com> -Date: Tue Jul 16 22:50:46 2024 +0200 - - Merge branch 'mouredev:main' into main - -commit e6cf641d65eb8162ec7fce76a451f5b5d215225b -Author: ElHacedorDeCosas -Date: Tue Jul 16 17:47:49 2024 -0300 - - Create ElHacedorDeCosas.gd - -commit 9a59910e7e574863944cb0e895c763c8c1c001e5 -Merge: 46976e0a3 6abfe9018 -Author: Jesus Antonio Escamilla -Date: Tue Jul 16 14:06:34 2024 -0600 - - Merge branch 'main' of github.com:mouredev/roadmap-retos-programacion into JesusAEE - -commit 46976e0a3d8581685ddf15230e3519dbf7ec641a -Author: Jesus Antonio Escamilla -Date: Tue Jul 16 14:04:50 2024 -0600 - - #28 - JavaScript "Corrección" - -commit a6a85a646ed9f8c1e1c13b5198bb3adbd89a3a8e -Author: CaveroBrandon -Date: Tue Jul 16 15:39:44 2024 -0400 - - #25 - Python - -commit 410c48554b5d694d10cd887f78bd6fda499ace3b -Author: SnowAle -Date: Tue Jul 16 18:53:25 2024 +0000 - - SnowAle #00 - Python - -commit 2f37d4596231a5b0521d78536f072ac40b4d9026 -Author: kenysdev -Date: Tue Jul 16 11:43:01 2024 -0500 - - 29-c#-SOLID-ISP - -commit ca94f23a6eb10d75ad88345681c05c097f0de25d -Author: Jordi Ayala -Date: Tue Jul 16 10:20:34 2024 -0600 - - #29 - Java - -commit bcb44f0d850bdebf1dc0583def95a352a2e87f17 -Author: Daniel Galvan -Date: Tue Jul 16 16:28:48 2024 +0100 - - #29 - Python - -commit c7f7069bb2ca8b609dc99da5ee52d37f77fcab75 -Author: edalmava -Date: Tue Jul 16 09:38:03 2024 -0500 - - #06 - Javascript - - \ No newline at end of file From 484257db3d330941b4a60382410662231b1f84bb Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 6 Sep 2024 12:54:03 -0500 Subject: [PATCH 011/539] Parte inicial del ejercicio copmletada --- Roadmap/18 - CONJUNTOS/java/simonguzman.java | 70 ++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Roadmap/18 - CONJUNTOS/java/simonguzman.java diff --git a/Roadmap/18 - CONJUNTOS/java/simonguzman.java b/Roadmap/18 - CONJUNTOS/java/simonguzman.java new file mode 100644 index 0000000000..a3bbb6de49 --- /dev/null +++ b/Roadmap/18 - CONJUNTOS/java/simonguzman.java @@ -0,0 +1,70 @@ +import java.util.ArrayList; +import java.util.Arrays; + +public class simonguzman { + public static void main(String[] args) { + testArrayList(); + } + + static void testArrayList() { + ArrayList list = new ArrayList<>(); + + addElementFinal(list); + addElementInitial(list); + + System.out.println("Contenido de la lista después de añadir elementos al final e inicial: " + list); + + addElementsFinalBlock(list); + addElementsBlockPositionConcrete(list); + + System.out.println("Contenido de la lista después de añadir varios elementos al final y en una posición concreta: " + list); + + deleteElementConcretePosition(list); + + System.out.println("Contenido de la lista después de eliminar un elemento en una posición concreta: " + list); + + updateValueConcretePosition(list); + + System.out.println("Contenido de la lista después de actualizar el valor de un elemento en una posición concreta: " + list); + + containsElement(list); + + System.out.println("Contenido de la lista después de comprobar si un elemento está en el conjunto: " + list); + + deleteAll(list); + + System.out.println("Contenido de la lista después de eliminar todo el contenido del conjunto: " + list); + } + + static void addElementFinal(ArrayList list){ + list.add(10); + } + + static void addElementInitial(ArrayList list){ + list.add(0, 10); + } + + static void addElementsFinalBlock(ArrayList list){ + list.addAll(Arrays.asList(10,20,30)); + } + + static void addElementsBlockPositionConcrete(ArrayList list){ + list.addAll(0, Arrays.asList(10,20,30)); + } + + static void deleteElementConcretePosition(ArrayList list){ + list.remove(2); + } + + static void updateValueConcretePosition(ArrayList list){ + list.set(2, 40); + } + + static void containsElement(ArrayList list){ + boolean containsElem = list.contains(10); + } + + static void deleteAll(ArrayList list){ + list.clear(); + } +} From b3ed27b87381a9635f04dbd28b4d04f138107134 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 6 Sep 2024 13:13:57 -0500 Subject: [PATCH 012/539] Ejercicio #18 completo --- Roadmap/18 - CONJUNTOS/java/simonguzman.java | 49 ++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/Roadmap/18 - CONJUNTOS/java/simonguzman.java b/Roadmap/18 - CONJUNTOS/java/simonguzman.java index a3bbb6de49..b7f25e08ce 100644 --- a/Roadmap/18 - CONJUNTOS/java/simonguzman.java +++ b/Roadmap/18 - CONJUNTOS/java/simonguzman.java @@ -1,9 +1,12 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; public class simonguzman { public static void main(String[] args) { testArrayList(); + extraExercise(); } static void testArrayList() { @@ -67,4 +70,50 @@ static void containsElement(ArrayList list){ static void deleteAll(ArrayList list){ list.clear(); } + + static void extraExercise(){ + Set setA = new HashSet<>(); + Set setB = new HashSet<>(); + createSets(setA, setB); + setUnion(setA, setB); + setIntersection(setA, setB); + setDifference(setA, setB); + setSymmetricalDifference(setA, setB); + } + + static void createSets(SetsetA, SetsetB){ + setA.add("A"); + setA.add("B"); + setA.add("C"); + setB.add("B"); + setB.add("C"); + setB.add("D"); + } + + static void setUnion(SetsetA, SetsetB){ + Set union = new HashSet<>(setA); + union.addAll(setB); + System.out.println("Union: "+union); + } + + static void setIntersection(SetsetA, SetsetB){ + Set intersection = new HashSet<>(setA); + intersection.retainAll(setB); + System.out.println("Interseccion: "+intersection); + } + + static void setDifference(SetsetA, SetsetB){ + Set difference = new HashSet<>(setA); + difference.removeAll(setB); + System.out.println("Diferencia: "+difference); + } + + static void setSymmetricalDifference(SetsetA, SetsetB){ + Set symmetricalDifference = new HashSet<>(setA); + symmetricalDifference.addAll(setB); + Set tmp = new HashSet<>(setA); + tmp.retainAll(setB); + symmetricalDifference.removeAll(tmp); + System.out.println("Diferencia simetrica: "+symmetricalDifference); + } } From 408d7492478c4b335bf7f9bb6f175f2466c1d133 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 6 Sep 2024 13:49:36 -0500 Subject: [PATCH 013/539] Primera parte del ejercicio completada --- .../19 - ENUMERACIONES/java/simonguzman.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Roadmap/19 - ENUMERACIONES/java/simonguzman.java diff --git a/Roadmap/19 - ENUMERACIONES/java/simonguzman.java b/Roadmap/19 - ENUMERACIONES/java/simonguzman.java new file mode 100644 index 0000000000..f01cfb45fe --- /dev/null +++ b/Roadmap/19 - ENUMERACIONES/java/simonguzman.java @@ -0,0 +1,47 @@ + +import java.util.Scanner; + + +public class simonguzman { + + public static void main(String[] args) { + firstExercise(); + } + + public enum Days{ + LUNES, + MARTES, + MIERCOLES, + JUEVES, + VIERNES, + SABADO, + DOMINGO + } + + static void firstExercise(){ + Scanner scanner = new Scanner(System.in); + System.out.println("Ingrese un dia de la semana"); + int n = scanner.nextInt(); + + System.out.println("El dia "+n+" corresponde al dia: "+getDay(n)); + } + + static Days getDay(int n){ + Days day = weekDays(n); + return day; + } + + static Days weekDays(int n){ + switch (n) { + case 1: return Days.LUNES; + case 2: return Days.MARTES; + case 3: return Days.MIERCOLES; + case 4: return Days.JUEVES; + case 5: return Days.VIERNES; + case 6: return Days.SABADO; + case 7: return Days.DOMINGO; + default: + throw new IllegalArgumentException("ERROR: Numero incorrecto."); + } + } +} From a176af93c309c3e00bcd6958020620f0903c3077 Mon Sep 17 00:00:00 2001 From: fborjalv Date: Fri, 6 Sep 2024 20:52:46 +0200 Subject: [PATCH 014/539] #31 - Python --- .../python/fborjalv.py" | 155 ++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 "Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/fborjalv.py" diff --git "a/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/fborjalv.py" "b/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/fborjalv.py" new file mode 100644 index 0000000000..7ddc76c7b6 --- /dev/null +++ "b/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/fborjalv.py" @@ -0,0 +1,155 @@ +""" +/* + * EJERCICIO: + * ¡Los JJOO de París 2024 han comenzado! + * Crea un programa que simule la celebración de los juegos. + * El programa debe permitir al usuario registrar eventos y participantes, + * realizar la simulación de los eventos asignando posiciones de manera aleatoria + * y generar un informe final. Todo ello por terminal. + * Requisitos: + * 1. Registrar eventos deportivos. ✅ + * 2. Registrar participantes por nombre y país. ✅ + * 3. Simular eventos de manera aleatoria en base a los participantes (mínimo 3). ✅ + * 4. Asignar medallas (oro, plata y bronce) basándose en el resultado del evento. + * 5. Mostrar los ganadores por cada evento. + * 6. Mostrar el ranking de países según el número de medallas. + * Acciones: + * 1. Registro de eventos. + * 2. Registro de participantes. + * 3. Simulación de eventos. + * 4. Creación de informes. + * 5. Salir del programa. + */ + +""" + +""" +-- registrar eventos deportivos +-- registrar participante por nombre y pais +-- simular eventos +-- asignar medallas + +""" + +from abc import ABC, abstractmethod + + + +import random + + +class OlympicsGames(): + + def __init__(self) -> None: + self.participant_registry = ParticipantRegistry() + self.event_registry = EventRegistry() + self.my_report = Report() + + def show_menu(self): + while True: + print("-- Menú principal --") + print("1. Registro de eventos") + print("2. Registro de participantes.") + print("3. Simulación de eventos.") + print("4. Creación de informes.") + print("5. Salir del programa.") + option = input("Introduce una opción: ") + + match option: + case "1": + print("Registro de eventos") + name = input("Introduce el nombre del evento: ") + event = Event(name) + self.event_registry.add_event(event) + + case "2": + print("Registro de participantes") + name = input("Introduce el nombre del deporista: ") + country = input("Introduce el país al que representa: ") + deportist = Participant(name, country) + self.participant_registry.add_participant(deportist) + + case "3": + print("Simulación de eventos") + self.participant_registry.show_participant() + self.event_registry.show_events() + event.simulation(self.participant_registry.list_participant) + print(event.result) + event.award_medals(self.participant_registry.list_participant) + self.participant_registry.show_participant() + case "4": + print("Creación de informes") + self.my_report.show_winners_by_event(self.event_registry) + self.my_report.show_ranking_by_country(self.participant_registry) + case "5": + print("Saliendo del programa") + break + +class Participant(): + + def __init__(self, name, country) -> None: + self.name = name + self.country = country + self.medals = {"GOLD": 0, "SILVER": 0, "BRONZE": 0} + +class ParticipantRegistry(OlympicsGames): + def __init__(self) -> None: + self.list_participant = [] + def add_participant(self, Participant): + self.list_participant.append(Participant) + def show_participant(self): + for participant in self.list_participant: + print(f"Nombre: {participant.name}, Pais: {participant.country}, Medallas: {participant.medals}") + +class Event(): + + result = {} + def __init__(self, sport_name) -> None: + self.sport_name = sport_name + + def simulation(self, participant_list: list): + if len(participant_list) < 3: + print("El Evento no se puede realizar por falta de participantes") + else: + self.result["sport"] = self.sport_name + winners = random.sample(participant_list, k=3) + self.result["winners"] = {"GOLD": winners[0].name, "SILVER": winners[1].name, "BRONZE":winners[2].name} + + def award_medals(self, participant_list): + for medal, name in self.result["winners"].items(): + for participant in participant_list: + if participant.name == name: + participant.medals[medal] += 1 + break + +class EventRegistry(OlympicsGames): + + def __init__(self) -> None: + self.event_list = [] + def add_event(self, event): + self.event_list.append(event) + def show_events(self): + for event in self.event_list: + print(f"Nombre del evento: {event.sport_name}") + + +class Report(): + + def __init__(self) -> None: + pass + + def show_winners_by_event(self, event_registry): + for event in event_registry.event_list: + print(f"Deporte: {event.result['sport']}") + print("; ".join([str(f"{medal, winner}") for medal, winner in event.result['winners'].items()])) + + def show_ranking_by_country(self, participant_registry): + country_medals = {} + for participant in participant_registry.list_participant: + if participant.country not in country_medals: + country_medals[participant.country] = 0 + country_medals[participant.country] += sum(participant.medals.values()) + print(country_medals) + +sistem = OlympicsGames() +sistem.show_menu() \ No newline at end of file From 462d2e1978ba380e9a65dcf1f551ab1370206a5b Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 6 Sep 2024 14:17:25 -0500 Subject: [PATCH 015/539] Ejercicio #19 completado --- .../19 - ENUMERACIONES/java/simonguzman.java | 113 +++++++++++++++++- 1 file changed, 108 insertions(+), 5 deletions(-) diff --git a/Roadmap/19 - ENUMERACIONES/java/simonguzman.java b/Roadmap/19 - ENUMERACIONES/java/simonguzman.java index f01cfb45fe..138b7eeeb7 100644 --- a/Roadmap/19 - ENUMERACIONES/java/simonguzman.java +++ b/Roadmap/19 - ENUMERACIONES/java/simonguzman.java @@ -1,13 +1,11 @@ - import java.util.Scanner; - - public class simonguzman { public static void main(String[] args) { firstExercise(); + aditionalExercise(); } - + //************************** First exercise **************************/ public enum Days{ LUNES, MARTES, @@ -17,7 +15,7 @@ public enum Days{ SABADO, DOMINGO } - + static void firstExercise(){ Scanner scanner = new Scanner(System.in); System.out.println("Ingrese un dia de la semana"); @@ -44,4 +42,109 @@ static Days weekDays(int n){ throw new IllegalArgumentException("ERROR: Numero incorrecto."); } } + + //************************** Aditional exercise **************************/ + + public enum statusOrder{ + PENDIENTE, + ENVIADO, + ENTREGADO, + CANCELADO + } + + static void aditionalExercise(){ + Order order = new Order(1, statusOrder.PENDIENTE); + Scanner scanner = new Scanner(System.in); + int n; + do { + optionsMenu(); + System.out.println("Ingrese una opcion: "); + n = scanner.nextInt(); + menu(order, n); + } while (n != 5); + } + + static void optionsMenu(){ + System.out.println("Menú:"); + System.out.println("1. Enviar pedido"); + System.out.println("2. Entregar pedido"); + System.out.println("3. Cancelar pedido"); + System.out.println("4. Mostrar estado del pedido"); + System.out.println("5. Salir"); + } + static void menu(Order order, int n){ + switch (n) { + case 1: + order.sendOrder(); + break; + + case 2: + order.deliverOrder(); + break; + case 3: + order.cancelOrder(); + break; + case 4: + System.out.println("Estado del pedido: "+order.getStatus()); + break; + case 5: + System.out.println("Saliendo..."); + break; + default: + System.out.println("ERROR: opcion incorrecta..."); + } + } + + static class Order{ + protected double id; + protected statusOrder status; + + public Order(){ + + } + + public Order(double id, statusOrder status){ + this.id = id; + this.status = statusOrder.PENDIENTE; + } + + public void sendOrder(){ + if (status == statusOrder.PENDIENTE) { + status = statusOrder.ENVIADO; + System.out.println("Pedido: "+id+" ha sido enviado."); + }else{ + System.out.println("El pedido: "+id+" No se puede enviar ya que no se encuentra pendiente"); + } + } + + public void deliverOrder(){ + if(status == statusOrder.ENVIADO){ + status = statusOrder.ENTREGADO; + System.out.println("Pedido: "+id+" ha sido entregado."); + }else{ + System.out.println("El pedido: "+id+" No se puede enviar ya que no ha sido enviado."); + } + } + + public void cancelOrder(){ + if(status == statusOrder.PENDIENTE || status == statusOrder.ENVIADO){ + status = statusOrder.CANCELADO; + System.out.println("Pedido: "+id+" ha sido cancelado."); + }else{ + System.out.println("El pedido: "+id+" No se puede cancelar ya que ya ha sido entregado"); + } + } + + public String getStatus(){ + switch(status){ + case PENDIENTE: return "El pedido esta pendiente"; + case ENVIADO: return "El pedido ha sido enviado"; + case ENTREGADO: return "El pedido ha sido entregado"; + case CANCELADO: return "El pedido esta pendiente"; + default: + return "Estado desconocido"; + } + } + + } } From 1056aa279dc1643544d035bf05a9a46b71655bbc Mon Sep 17 00:00:00 2001 From: Niko Zen Date: Fri, 6 Sep 2024 14:50:32 -0430 Subject: [PATCH 016/539] #01 - javascript --- .../javascript/duendeintemporal.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/duendeintemporal.js b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/duendeintemporal.js index 78aee7cfb0..5e4194c903 100644 --- a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/duendeintemporal.js +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/duendeintemporal.js @@ -667,7 +667,7 @@ switch (true) { console.log("More than 20."); } */ -// Extra dificulty: Write a code that prints all the even numbers between 10 and 55 inclusive, and if the number are 2 or 16 dont't print them +// Extra dificulty: Create a program that prints the even numbers from 10 to 55 inclusive and avoids printing the numbers if they are equal to 16 or multiples of 3 for(let i = 10; i <= 55; i++ ){ if(i % 3 == 0 || i == 16) continue; From eb25ffb63c2bf7c773fd44c15226ba46d68fc67a Mon Sep 17 00:00:00 2001 From: Feliaguirre Date: Fri, 6 Sep 2024 18:57:08 -0300 Subject: [PATCH 017/539] #0 - Typescript --- .../typescript/FeliAguirre7.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/FeliAguirre7.ts diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/FeliAguirre7.ts b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/FeliAguirre7.ts new file mode 100644 index 0000000000..278914a973 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/FeliAguirre7.ts @@ -0,0 +1,19 @@ +// https://www.typescriptlang.org/ + +// Comentario de una linea + +/*Comentario de varias +lineas*/ + +// Declaración de variable y constante +let texto: string = "texto"; +const año: number = 1999; + +// Declaración de variables con tipos primitivos +let dia: number = 3; //Ejemplo de enteros +let esActivo: boolean = true; // Ejemplo de booleano +let saludo: string = "Hola"; // Ejemplo de string +let arreglo: number[] = [1, 2, 3, 4, 5]; // Ejemplo de arreglo de números + +//Imprimir en consola +console.log("Hola, Typescript!") \ No newline at end of file From 8c5bc88ef5bbd996c792ec25ea626452551f1791 Mon Sep 17 00:00:00 2001 From: h4ckxel Date: Fri, 6 Sep 2024 16:51:59 -0600 Subject: [PATCH 018/539] #04 - Python --- .../python/h4ckxel.py | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Roadmap/04 - CADENAS DE CARACTERES/python/h4ckxel.py diff --git a/Roadmap/04 - CADENAS DE CARACTERES/python/h4ckxel.py b/Roadmap/04 - CADENAS DE CARACTERES/python/h4ckxel.py new file mode 100644 index 0000000000..7033725a47 --- /dev/null +++ b/Roadmap/04 - CADENAS DE CARACTERES/python/h4ckxel.py @@ -0,0 +1,59 @@ +""" +author: h4ckxel +""" +my_string = "Esto es un string" +print(len(my_string)) # Retorna el numero de caracteres +print(my_string[5]) # Retorna el caracter en la posicion 5 +print(my_string[2:9]) # Retorna una subcadena +print(my_string * 3) # Repite la cadena 3 veces +print("e" in my_string) # Busca el caracter en el string + +for element in my_string: # Recorre una cadena + print(element) + +my_other_string = " esto es otro string" +print(my_string + " "+ my_other_string) #concatena dos cadenas +print(my_string.upper()) #retorna el string en mayusculas +print(my_string.lower()) #retorna el string en minuscula +print(my_string.title()) #devuelve una copia usando el titulo como referencia +print(my_string.replace("o","O")) # reemplaza la primera ocurrencia indicada +print(my_other_string.lstrip()) #elimina espacios en blanco al principio +print(my_other_string.rstrip()) #elimina espacios en blanco al final +print(my_other_string.split("o")) # devuelve una lsita separada por el parametro indicado +print(my_string.startswith("es")) #busca al principio la primera ocurrencia +print(my_string.endswith("es")) #busca al final la primera ocurrencia +print("Cadena1: {}, cadena2: {}".format(my_string,my_other_string) ) + + + +# DIFICULTAD EXTRA +def comprobar(word1, word2): + #palindromo + reverse_word1= word1[::-1] + reverse_word2= word2[::-1] + print(f"la palabra {word1} es palindromo?: {word1==reverse_word1}") + print(f"la palabra {word2} es palindromo?: {word2==reverse_word2}") + + #anagrama + print(f"las palabras {word1} y {word2} son anagrama?: {sorted(word1)==sorted(word2)}") + + #isograma + print(f"{word1} es isograma?: {len(word1) == len(set(word1))}") #funciona si el string no se repite + print(f"{word2} es isograma?: {len(word2) == len(set(word2))}") + + def is_isogram(word): + word_dict = dict() + for element in word: + word_dict[element] = word_dict.get(element, 0) + 1 + isogram = True + values = list(word_dict.values()) + len_isogram = values[0] + for word_count in values: + if word_count != len_isogram: + isogram = False + break + return isogram + print(f"{word1} es isograma?: {is_isogram(word1)}") + print(f"{word2} es isograma?: {is_isogram(word2)}") + +comprobar("retos", "programacion") From 9f6615a9e8cdd0fe0c6fd499ccf254ce38e88ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Harold=20Albi=C3=B1ana?= Date: Sat, 7 Sep 2024 01:01:43 +0200 Subject: [PATCH 019/539] #00 - Python --- .../python/haroldAlb.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/haroldAlb.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/haroldAlb.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/haroldAlb.py new file mode 100644 index 0000000000..1f83212ab7 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/haroldAlb.py @@ -0,0 +1,19 @@ +# Web oficial del lenguaaje de programación elejido: https://python.org + +#Comentario de una línea +""" +Comentario de +varias líneas en +Python +""" + +variable= 666 +MI_CONSTANTE= 3.1416 + +entero= -68 +entero1: int = 33 #Estoy indicando que esta variable debe ser siempre de tipo entero y debe cambiar durante su ejecución a otro tipo de variable +flotante= 0.333 +texto= "En una galaxia, muy, muy lejana..." +booleano= True + +print("Hola, Python") \ No newline at end of file From b8c8d1b55010fb951a87be3b92c95b1e49f1ff27 Mon Sep 17 00:00:00 2001 From: David Sabater Date: Sat, 7 Sep 2024 01:02:57 +0200 Subject: [PATCH 020/539] #00 - C++ --- .../c++/oixild.cpp | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/oixild.cpp diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/oixild.cpp b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/oixild.cpp new file mode 100644 index 0000000000..ed72c0592d --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/oixild.cpp @@ -0,0 +1,32 @@ + + +// WEBSITE> https://isocpp.org/ + +// Code comments can be made by different ways : + +// Line Comment + +/* +Block +Comment +*/ +#include + +void varConstVar() { + int var = 1; + const int constVar = 2; +} + +void primitiveData() { + int a = 0; + float b = 1.5; + double float c = 2.5; + char d = 'a'; + bool e = true; + wchar_t f = L'C'; +} + +int main() { + std::cout << "Hola, [C++]!" << std::endl; + return 0; +} \ No newline at end of file From 85f053368ac5fdbdf8d193f01cf8ef6fbaae159b Mon Sep 17 00:00:00 2001 From: David Sabater Date: Sat, 7 Sep 2024 01:39:27 +0200 Subject: [PATCH 021/539] #01 - C++ --- .../c++/oixild.cpp | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/oixild.cpp diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/oixild.cpp b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/oixild.cpp new file mode 100644 index 0000000000..4371e59852 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/oixild.cpp @@ -0,0 +1,136 @@ +/* + * EJERCICIO: + * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: + * Aritmticos, lgicos, de comparacin, asignacin, identidad, pertenencia, bits... + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) + * - Utilizando las operaciones con operadores que t quieras, crea ejemplos + * que representen todos los tipos de estructuras de control que existan + * en tu lenguaje: + * Condicionales, iterativas, excepciones... + * - Debes hacer print por consola del resultado de todos los ejemplos. + + * + * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. + */ + + +#include +#include +#include // Para manejo de excepciones + +using namespace std; + +int main() { + // ** Operadores aritmticos ** + int a = 10; + int b = 3; + + cout << "Operadores aritmticos:" << endl; + cout << "Suma: " << a + b << endl; // Suma + cout << "Resta: " << a - b << endl; // Resta + cout << "Multiplicacin: " << a * b << endl; // Multiplicacin + cout << "Divisin: " << a / b << endl; // Divisin + cout << "Mdulo: " << a % b << endl; // Mdulo + cout << "Incremento: " << ++a << endl; // Incremento + cout << "Decremento: " << --b << endl; // Decremento + + // ** Operadores de asignacin ** + cout << "\nOperadores de asignacin:" << endl; + a = 5; + cout << "a = 5 -> " << a << endl; + a += 2; + cout << "a += 2 -> " << a << endl; + a -= 1; + cout << "a -= 1 -> " << a << endl; + a *= 3; + cout << "a *= 3 -> " << a << endl; + a /= 2; + cout << "a /= 2 -> " << a << endl; + a %= 3; + cout << "a %= 3 -> " << a << endl; + + // ** Operadores de comparacin ** + cout << "\nOperadores de comparacin:" << endl; + cout << "a == b: " << (a == b) << endl; // Igualdad + cout << "a != b: " << (a != b) << endl; // Diferente + cout << "a < b: " << (a < b) << endl; // Menor que + cout << "a > b: " << (a > b) << endl; // Mayor que + cout << "a <= b: " << (a <= b) << endl; // Menor o igual que + cout << "a >= b: " << (a >= b) << endl; // Mayor o igual que + + // ** Operadores lgicos ** + cout << "\nOperadores lgicos:" << endl; + bool x = true; + bool y = false; + cout << "x && y: " << (x && y) << endl; // AND lgico + cout << "x || y: " << (x || y) << endl; // OR lgico + cout << "!x: " << !x << endl; // NOT lgico + + // ** Operadores de bits ** + cout << "\nOperadores de bits:" << endl; + int c = 5; // 0101 en binario + int d = 9; // 1001 en binario + cout << "c & d: " << (c & d) << endl; // AND a nivel de bits + cout << "c | d: " << (c | d) << endl; // OR a nivel de bits + cout << "c ^ d: " << (c ^ d) << endl; // XOR a nivel de bits + cout << "~c: " << ~c << endl; // NOT a nivel de bits + cout << "c << 1: " << (c << 1) << endl; // Desplazamiento a la izquierda + cout << "c >> 1: " << (c >> 1) << endl; // Desplazamiento a la derecha + + // ** Estructuras de control: Condicionales ** + cout << "\nEstructuras de control - Condicionales:" << endl; + if (a > b) { + cout << "a es mayor que b" << endl; + } + else { + cout << "a no es mayor que b" << endl; + } + + // ** Estructuras de control: Iterativas ** + cout << "\nEstructuras de control - Iterativas:" << endl; + cout << "Bucle for:" << endl; + for (int i = 0; i < 3; i++) { + cout << "i = " << i << endl; + } + + cout << "Bucle while:" << endl; + int i = 0; + while (i < 3) { + cout << "i = " << i << endl; + i++; + } + + cout << "Bucle do-while:" << endl; + i = 0; + do { + cout << "i = " << i << endl; + i++; + } while (i < 3); + + // ** Estructuras de control: Manejo de excepciones ** + cout << "\nEstructuras de control - Excepciones:" << endl; + try { + int divisor = 0; + if (divisor == 0) { + throw runtime_error("Error: Divisin entre cero"); + } + int resultado = 10 / divisor; + cout << "Resultado: " << resultado << endl; + } + catch (const exception& e) { + cout << e.what() << endl; + } + + // ** Dificultad Extra ** + cout << "\nDificultad Extra:" << endl; + + int num = 10; + while (num <= 55) { + if (num % 2 == 0 && num % 3 != 0 && num % 16 != 0) { + cout << num << " " << endl; + num++; + } + num++; + } + return 0; +} From 36f472b7dfc4f1e963a3969ff333f178815a8112 Mon Sep 17 00:00:00 2001 From: David Sabater Date: Sat, 7 Sep 2024 01:41:42 +0200 Subject: [PATCH 022/539] Delete Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/oixild.cpp --- .../c++/oixild.cpp | 136 ------------------ 1 file changed, 136 deletions(-) delete mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/oixild.cpp diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/oixild.cpp b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/oixild.cpp deleted file mode 100644 index 4371e59852..0000000000 --- a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/oixild.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/* - * EJERCICIO: - * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: - * Aritmticos, lgicos, de comparacin, asignacin, identidad, pertenencia, bits... - * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) - * - Utilizando las operaciones con operadores que t quieras, crea ejemplos - * que representen todos los tipos de estructuras de control que existan - * en tu lenguaje: - * Condicionales, iterativas, excepciones... - * - Debes hacer print por consola del resultado de todos los ejemplos. - - * - * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. - */ - - -#include -#include -#include // Para manejo de excepciones - -using namespace std; - -int main() { - // ** Operadores aritmticos ** - int a = 10; - int b = 3; - - cout << "Operadores aritmticos:" << endl; - cout << "Suma: " << a + b << endl; // Suma - cout << "Resta: " << a - b << endl; // Resta - cout << "Multiplicacin: " << a * b << endl; // Multiplicacin - cout << "Divisin: " << a / b << endl; // Divisin - cout << "Mdulo: " << a % b << endl; // Mdulo - cout << "Incremento: " << ++a << endl; // Incremento - cout << "Decremento: " << --b << endl; // Decremento - - // ** Operadores de asignacin ** - cout << "\nOperadores de asignacin:" << endl; - a = 5; - cout << "a = 5 -> " << a << endl; - a += 2; - cout << "a += 2 -> " << a << endl; - a -= 1; - cout << "a -= 1 -> " << a << endl; - a *= 3; - cout << "a *= 3 -> " << a << endl; - a /= 2; - cout << "a /= 2 -> " << a << endl; - a %= 3; - cout << "a %= 3 -> " << a << endl; - - // ** Operadores de comparacin ** - cout << "\nOperadores de comparacin:" << endl; - cout << "a == b: " << (a == b) << endl; // Igualdad - cout << "a != b: " << (a != b) << endl; // Diferente - cout << "a < b: " << (a < b) << endl; // Menor que - cout << "a > b: " << (a > b) << endl; // Mayor que - cout << "a <= b: " << (a <= b) << endl; // Menor o igual que - cout << "a >= b: " << (a >= b) << endl; // Mayor o igual que - - // ** Operadores lgicos ** - cout << "\nOperadores lgicos:" << endl; - bool x = true; - bool y = false; - cout << "x && y: " << (x && y) << endl; // AND lgico - cout << "x || y: " << (x || y) << endl; // OR lgico - cout << "!x: " << !x << endl; // NOT lgico - - // ** Operadores de bits ** - cout << "\nOperadores de bits:" << endl; - int c = 5; // 0101 en binario - int d = 9; // 1001 en binario - cout << "c & d: " << (c & d) << endl; // AND a nivel de bits - cout << "c | d: " << (c | d) << endl; // OR a nivel de bits - cout << "c ^ d: " << (c ^ d) << endl; // XOR a nivel de bits - cout << "~c: " << ~c << endl; // NOT a nivel de bits - cout << "c << 1: " << (c << 1) << endl; // Desplazamiento a la izquierda - cout << "c >> 1: " << (c >> 1) << endl; // Desplazamiento a la derecha - - // ** Estructuras de control: Condicionales ** - cout << "\nEstructuras de control - Condicionales:" << endl; - if (a > b) { - cout << "a es mayor que b" << endl; - } - else { - cout << "a no es mayor que b" << endl; - } - - // ** Estructuras de control: Iterativas ** - cout << "\nEstructuras de control - Iterativas:" << endl; - cout << "Bucle for:" << endl; - for (int i = 0; i < 3; i++) { - cout << "i = " << i << endl; - } - - cout << "Bucle while:" << endl; - int i = 0; - while (i < 3) { - cout << "i = " << i << endl; - i++; - } - - cout << "Bucle do-while:" << endl; - i = 0; - do { - cout << "i = " << i << endl; - i++; - } while (i < 3); - - // ** Estructuras de control: Manejo de excepciones ** - cout << "\nEstructuras de control - Excepciones:" << endl; - try { - int divisor = 0; - if (divisor == 0) { - throw runtime_error("Error: Divisin entre cero"); - } - int resultado = 10 / divisor; - cout << "Resultado: " << resultado << endl; - } - catch (const exception& e) { - cout << e.what() << endl; - } - - // ** Dificultad Extra ** - cout << "\nDificultad Extra:" << endl; - - int num = 10; - while (num <= 55) { - if (num % 2 == 0 && num % 3 != 0 && num % 16 != 0) { - cout << num << " " << endl; - num++; - } - num++; - } - return 0; -} From f7fbaf1c43bbfc453947b3fc93ad41dab46c321d Mon Sep 17 00:00:00 2001 From: hozlucas28 Date: Fri, 6 Sep 2024 22:43:09 -0300 Subject: [PATCH 023/539] Solution 36 - Python --- .../python/hozlucas28.py | 227 ++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/hozlucas28.py diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/hozlucas28.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/hozlucas28.py new file mode 100644 index 0000000000..23c5a92e82 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/hozlucas28.py @@ -0,0 +1,227 @@ +# pylint: disable=missing-module-docstring,missing-class-docstring,missing-function-docstring,redefined-outer-name + +from typing import TypedDict, TypeVar, Literal, Any +from random import choice + + +# ---------------------------------------------------------------------------- # +# TYPES # +# ---------------------------------------------------------------------------- # + +T = TypeVar("T", bound=str) + + +class Question[T](TypedDict): + correct_answer: T + options: list[T] + points: float + question: str + + +QuestionsPerHouse = TypedDict( + "QuestionsPerHouse", + { + "backend": tuple[ + Question[Literal["Java", "JavaScript", "Python", "Ruby"]], + Question[Literal["MySQL", "MongoDB", "PostgreSQL", "SQLite"]], + ], + "data": tuple[ + Question[ + Literal[ + "Data analysis", + "Data visualization", + "Data mining", + "Data modeling", + ] + ], + Question[Literal["Python", "R", "SQL", "Julia"]], + ], + "frontend": tuple[ + Question[Literal["HTML", "CSS", "JavaScript", "Python"]], + Question[Literal["React", "Angular", "Vue", "Ember"]], + ], + "mobile": tuple[ + Question[Literal["iOS", "Android", "React Native", "Flutter"]], + Question[Literal["Swift", "Kotlin", "Java", "Objective-C"]], + ], + }, +) + + +# ---------------------------------------------------------------------------- # +# UTILS # +# ---------------------------------------------------------------------------- # + + +def list_to_long_disjunction(*, _list: list[T]) -> str: + rtn: str = str(object=_list[0]) + + for element in _list[1 : len(_list) - 1]: + rtn += f", {element}" + + if len(_list) > 1: + rtn += f", and {str(object=_list[-1])}" + + return rtn + + +def make_question(question: Question[T]) -> float: + user_answer: str = ( + input( + f"> {question.get('question')} " + f"({list_to_long_disjunction(_list=question.get('options'))}): " + ) + .strip() + .upper() + ) + + uppercased_options: list[str] = [ + str(object=opt).upper() for opt in question.get("options") + ] + + while user_answer not in uppercased_options: + print("\n> Invalid option! Try again...") + + user_answer: str = ( + input( + f"\n> {question.get('question')} " + f"({list_to_long_disjunction(_list=question.get('options'))}): " + ) + .strip() + .upper() + ) + + return ( + question.get("points") + if user_answer == str(object=question.get("correct_answer")).upper() + else 0 + ) + + +# ---------------------------------------------------------------------------- # +# MAIN # +# ---------------------------------------------------------------------------- # + +questions_per_house: QuestionsPerHouse = { + "backend": ( + { + "correct_answer": "JavaScript", + "options": ["Java", "JavaScript", "Python", "Ruby"], + "question": "What is the primary language used in backend development?", + "points": 5, + }, + { + "correct_answer": "PostgreSQL", + "options": ["MySQL", "MongoDB", "PostgreSQL", "SQLite"], + "points": 5, + "question": "Which database is commonly used for storing data in backend applications?", + }, + ), + "data": ( + { + "correct_answer": "Data analysis", + "options": [ + "Data analysis", + "Data visualization", + "Data mining", + "Data modeling", + ], + "points": 5, + "question": "What is the process of analyzing and interpreting data called?", + }, + { + "correct_answer": "Julia", + "options": ["Python", "R", "SQL", "Julia"], + "points": 5, + "question": "Which programming language is commonly used for data analysis?", + }, + ), + "frontend": ( + { + "correct_answer": "JavaScript", + "options": ["HTML", "CSS", "JavaScript", "Python"], + "points": 5, + "question": "What is the primary language used in frontend development?", + }, + { + "correct_answer": "Angular", + "options": ["React", "Angular", "Vue", "Ember"], + "points": 5, + "question": "Which framework is commonly used for building user interfaces?", + }, + ), + "mobile": ( + { + "correct_answer": "Flutter", + "options": ["iOS", "Android", "React Native", "Flutter"], + "points": 5, + "question": "Which platform is commonly used for developing mobile applications?", + }, + { + "correct_answer": "Objective-C", + "options": ["Swift", "Kotlin", "Java", "Objective-C"], + "points": 5, + "question": "What is the primary language used in mobile app development?", + }, + ), +} + +user_name: str = input("> Enter your name: ").strip() + +points: list[list[Any]] = [ + ["backend", 0], + ["data", 0], + ["frontend", 0], + ["mobile", 0], +] + +print() +points[0][1] += make_question(question=questions_per_house.get("backend")[0]) + +print() +points[0][1] += make_question(question=questions_per_house.get("backend")[1]) + +print() +points[1][1] += make_question(question=questions_per_house.get("data")[0]) + +print() +points[1][1] += make_question(question=questions_per_house.get("data")[1]) + +print() +points[2][1] += make_question(question=questions_per_house.get("frontend")[0]) + +print() +points[2][1] += make_question(question=questions_per_house.get("frontend")[1]) + +print() +points[3][1] += make_question(question=questions_per_house.get("mobile")[0]) + +print() +points[3][1] += make_question(question=questions_per_house.get("mobile")[1]) + +max_points: list[list[Any]] = [] + +for [house, housePoints] in points: + if len(max_points) == 0: + max_points.append([house, housePoints]) + continue + + if max_points[0][1] > housePoints: + continue + + if max_points[0][1] == housePoints: + max_points.append([house, housePoints]) + else: + max_points[0] = [house, housePoints] + + +if len(max_points) == 1: + print(f"\n> {user_name} will be part of the {max_points[0][0]} house!") +else: + print(max_points) + rnd_choice: list[Any] = choice(seq=max_points) + + print( + f"\n> The decision has been complicated," + f" but {user_name} will be part of the {rnd_choice[0]} house!" + ) From 8f04344bbbc0eb8a9559726747450169ed765920 Mon Sep 17 00:00:00 2001 From: GordoMaster Date: Fri, 6 Sep 2024 22:15:55 -0400 Subject: [PATCH 024/539] #14-Python --- Roadmap/14 - FECHAS/python/Gordo-Master.py | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Roadmap/14 - FECHAS/python/Gordo-Master.py diff --git a/Roadmap/14 - FECHAS/python/Gordo-Master.py b/Roadmap/14 - FECHAS/python/Gordo-Master.py new file mode 100644 index 0000000000..86d6064806 --- /dev/null +++ b/Roadmap/14 - FECHAS/python/Gordo-Master.py @@ -0,0 +1,28 @@ +# 14 - Fechas + +from datetime import datetime, date, time + +now = datetime.now() +birthday = datetime(1995,5,8,12,35,17) + +age = (now - birthday).days // 365 + +print(now) +print(birthday) +print(f"Pasaron : {age} años") + +""" +Ejercicio extra +""" + +print(birthday.strftime(f"%A, %d de %B de %Y")) +print(birthday.strftime(f"%c")) +print(birthday.strftime(f"%x")) +print(birthday.strftime(f"%X")) +print(birthday.strftime(f"%d / %m / %Y")) +print(birthday.strftime(f"%Y / %m / %d")) +print(birthday.strftime(f"%H horas, %M minutos, %S segundos, %p")) +print(birthday.strftime(f"%j día del año %Y")) +print(birthday.strftime(f"%Uº semana del año %Y")) +print(birthday.strftime(f"%Wº semana del año %Y")) +print(birthday.strftime(f"%Vº semana del año %Y")) \ No newline at end of file From 0ec83ae3c665b9d993271002b1b42d06debf7c93 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sat, 7 Sep 2024 08:14:21 +0200 Subject: [PATCH 025/539] #24 - Kotlin --- Roadmap/24 - DECORADORES/kotlin/eulogioep.kt | 52 ++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Roadmap/24 - DECORADORES/kotlin/eulogioep.kt diff --git a/Roadmap/24 - DECORADORES/kotlin/eulogioep.kt b/Roadmap/24 - DECORADORES/kotlin/eulogioep.kt new file mode 100644 index 0000000000..e99b6f665b --- /dev/null +++ b/Roadmap/24 - DECORADORES/kotlin/eulogioep.kt @@ -0,0 +1,52 @@ +/* + * Decoradores en Kotlin (Versión simplificada) + * + * Los decoradores son un patrón de diseño estructural que permite añadir + * nuevas funcionalidades a objetos existentes sin alterar su estructura. + * En Kotlin, podemos implementar decoradores de manera sencilla utilizando + * funciones de orden superior. + * + * En esta implementación, nos centraremos en decorar funciones específicas + * en lugar de intentar crear un decorador genérico para cualquier tipo de función. + */ + +// Función que queremos decorar +fun operation(x: Int, y: Int): Int = x + y + +// Decorador simple +fun decorateOperation(func: (Int, Int) -> Int, before: () -> Unit, after: () -> Unit): (Int, Int) -> Int { + return { x, y -> + before() + val result = func(x, y) + after() + result + } +} + +// Decorador para contar llamadas a función +fun countCallsOperation(func: (Int, Int) -> Int): (Int, Int) -> Int { + var count = 0 + return { x, y -> + count++ + println("La función ha sido llamada $count veces") + func(x, y) + } +} + +fun main() { + // Ejemplo de uso del decorador simple + val decoratedOperation = decorateOperation( + ::operation, + before = { println("Antes de la operación") }, + after = { println("Después de la operación") } + ) + + println("Resultado: ${decoratedOperation(5, 3)}") + + // Ejemplo de uso del decorador que cuenta llamadas + val countedOperation = countCallsOperation(::operation) + + repeat(3) { + println("Resultado: ${countedOperation(it, it + 1)}") + } +} \ No newline at end of file From e52554da993e879dc2c304733fa902b291acef6f Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sat, 7 Sep 2024 08:18:36 +0200 Subject: [PATCH 026/539] #25 - Kotlin --- Roadmap/25 - LOGS/kotlin/eulogioep.kt | 85 +++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 Roadmap/25 - LOGS/kotlin/eulogioep.kt diff --git a/Roadmap/25 - LOGS/kotlin/eulogioep.kt b/Roadmap/25 - LOGS/kotlin/eulogioep.kt new file mode 100644 index 0000000000..483d911af9 --- /dev/null +++ b/Roadmap/25 - LOGS/kotlin/eulogioep.kt @@ -0,0 +1,85 @@ +import java.time.LocalDateTime +import java.time.Duration + +// Concepto de LOGS (Logging): +// Los logs son registros de eventos que ocurren durante la ejecución de un programa. +// Son cruciales para el diagnóstico de problemas, monitoreo del rendimiento y +// seguimiento de la actividad del sistema. En este ejemplo, implementaremos +// un sistema de logging simple para evitar problemas de permisos. + +// Enum para los niveles de log +enum class LogLevel { + INFO, WARNING, ERROR, DEBUG, TRACE +} + +// Clase simple para manejar logging +class SimpleLogger(private val name: String) { + fun log(level: LogLevel, message: String) { + println("${LocalDateTime.now()} [$level] $name: $message") + } + + fun info(message: String) = log(LogLevel.INFO, message) + fun warning(message: String) = log(LogLevel.WARNING, message) + fun error(message: String) = log(LogLevel.ERROR, message) + fun debug(message: String) = log(LogLevel.DEBUG, message) + fun trace(message: String) = log(LogLevel.TRACE, message) +} + +class TaskManager { + private val logger = SimpleLogger(TaskManager::class.java.simpleName) + private val tasks = mutableListOf() + + fun addTask(name: String, description: String) { + val startTime = LocalDateTime.now() + logger.info("Iniciando añadir tarea: $name") + + tasks.add(Task(name, description)) + + val endTime = LocalDateTime.now() + val duration = Duration.between(startTime, endTime) + logger.info("Tarea añadida: $name. Tiempo de ejecución: ${duration.toMillis()} ms") + } + + fun removeTask(name: String) { + val startTime = LocalDateTime.now() + logger.warning("Iniciando eliminación de tarea: $name") + + val removed = tasks.removeIf { it.name == name } + if (removed) { + logger.info("Tarea eliminada: $name") + } else { + logger.error("No se encontró la tarea: $name") + } + + val endTime = LocalDateTime.now() + val duration = Duration.between(startTime, endTime) + logger.debug("Tiempo de ejecución para eliminar tarea: ${duration.toMillis()} ms") + } + + fun listTasks() { + val startTime = LocalDateTime.now() + logger.info("Listando todas las tareas") + + tasks.forEach { task -> + logger.debug("Tarea: ${task.name}, Descripción: ${task.description}") + } + + val endTime = LocalDateTime.now() + val duration = Duration.between(startTime, endTime) + logger.trace("Tiempo de ejecución para listar tareas: ${duration.toMillis()} ms") + } +} + +data class Task(val name: String, val description: String) + +fun main() { + val taskManager = TaskManager() + + // Ejemplos de uso con diferentes niveles de severidad + taskManager.addTask("Comprar víveres", "Ir al supermercado y comprar alimentos") + taskManager.addTask("Hacer ejercicio", "30 minutos de cardio") + taskManager.listTasks() + taskManager.removeTask("Hacer ejercicio") + taskManager.removeTask("Tarea inexistente") + taskManager.listTasks() +} \ No newline at end of file From 13d2b317fa76b533f2b13c9bf504a1aad9d80e32 Mon Sep 17 00:00:00 2001 From: hozlucas28 Date: Sat, 7 Sep 2024 03:55:58 -0300 Subject: [PATCH 027/539] Solution 36 - Go --- .../go/hozlucas28.go | 250 ++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/go/hozlucas28.go diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/go/hozlucas28.go b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/go/hozlucas28.go new file mode 100644 index 0000000000..29adf378b8 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/go/hozlucas28.go @@ -0,0 +1,250 @@ +package main + +import ( + "bufio" + "fmt" + "maps" + rand "math/rand/v2" + "os" + "slices" + "strings" +) + +/* -------------------------------------------------------------------------- */ +/* STRUCTS */ +/* -------------------------------------------------------------------------- */ + +type Question struct { + CorrectAnswer string + Options []string + Points float32 + Question string + _ struct{} +} + +type QuestionsPerHouse struct { + Backend [2]Question + Data [2]Question + Frontend [2]Question + Mobile [2]Question + _ struct{} +} + +/* -------------------------------------------------------------------------- */ +/* UTILS */ +/* -------------------------------------------------------------------------- */ + +func toLongDisjunction[T string](slice []T) string { + var arrayLength int = len(slice) + + if arrayLength == 0 { + panic("slice empty") + } + + var rtn string = string(slice[0]) + + if arrayLength == 1 { + return rtn + } + + for _, element := range slice[1 : arrayLength-1] { + rtn += fmt.Sprintf(", %s", element) + } + + rtn += fmt.Sprintf(", and %s", slice[arrayLength-1]) + + return rtn +} + +func rndChoice[T string](choices []T) T { + var choicesLength int = len(choices) + + if choicesLength == 0 { + panic("slice of choices empty") + } + + if choicesLength == 1 { + return choices[0] + } + + var rndIndex int = rand.IntN(choicesLength - 1) + + return choices[rndIndex] +} + +func makeQuestion[T string](question *Question) float32 { + var reader *bufio.Reader = bufio.NewReader(os.Stdin) + + var questionMsg string = fmt.Sprintf("> %s (%s): ", question.Question, toLongDisjunction(question.Options)) + + fmt.Print(questionMsg) + userAnswer, err := reader.ReadString('\n') + if err == nil { + userAnswer = strings.ToUpper(strings.TrimSpace(userAnswer)) + } + + var exit bool = slices.ContainsFunc(question.Options, func(opt string) bool { + return strings.Compare(userAnswer, strings.ToUpper(opt)) == 0 + }) + + for !exit { + fmt.Printf("\n> Invalid option! Try again...\n\n") + + fmt.Print(questionMsg) + userAnswer, err := reader.ReadString('\n') + if err == nil { + userAnswer = strings.ToUpper(strings.TrimSpace(userAnswer)) + } + + exit = slices.ContainsFunc(question.Options, func(opt string) bool { + return strings.Compare(userAnswer, strings.ToUpper(opt)) == 0 + }) + } + + if strings.Compare(userAnswer, strings.ToUpper(question.CorrectAnswer)) == 0 { + return question.Points + } else { + return 0 + } + +} + +/* -------------------------------------------------------------------------- */ +/* MAIN */ +/* -------------------------------------------------------------------------- */ + +func main() { + var reader *bufio.Reader = bufio.NewReader(os.Stdin) + + var questionsPerHouse QuestionsPerHouse = QuestionsPerHouse{ + Backend: [2]Question{ + { + CorrectAnswer: "JavaScript", + Options: []string{"Java", "JavaScript", "Python", "Ruby"}, + Question: "What is the primary language used in backend development?", + Points: 5, + }, + { + CorrectAnswer: "PostgreSQL", + Options: []string{"MySQL", "MongoDB", "PostgreSQL", "SQLite"}, + Points: 5, + Question: "Which database is commonly used for storing data in backend applications?", + }, + }, + Data: [2]Question{ + { + CorrectAnswer: "Data analysis", + Options: []string{"Data analysis", "Data visualization", "Data mining", "Data modeling"}, + Points: 5, + Question: "What is the process of analyzing and interpreting data called?", + }, + { + CorrectAnswer: "Julia", + Options: []string{"Python", "R", "SQL", "Julia"}, + Points: 5, + Question: "Which programming language is commonly used for data analysis?", + }, + }, + Frontend: [2]Question{ + { + CorrectAnswer: "JavaScript", + Options: []string{"HTML", "CSS", "JavaScript", "Python"}, + Points: 5, + Question: "What is the primary language used in frontend development?", + }, + { + CorrectAnswer: "Angular", + Options: []string{"React", "Angular", "Vue", "Ember"}, + Points: 5, + Question: "Which framework is commonly used for building user interfaces?", + }, + }, + Mobile: [2]Question{ + { + CorrectAnswer: "Flutter", + Options: []string{"iOS", "Android", "React Native", "Flutter"}, + Points: 5, + Question: "Which platform is commonly used for developing mobile applications?", + }, + { + CorrectAnswer: "Objective-C", + Options: []string{"Swift", "Kotlin", "Java", "Objective-C"}, + Points: 5, + Question: "What is the primary language used in mobile app development?", + }, + }, + } + + fmt.Print("> Enter your name: ") + userName, err := reader.ReadString('\n') + if err != nil { + panic(err) + } + userName = strings.TrimSpace(userName) + + var pointsPerHouse map[string]float32 = map[string]float32{ + "backend": 0, + "data": 0, + "frontend": 0, + "mobile": 0, + } + + fmt.Println() + pointsPerHouse["backend"] += makeQuestion(&questionsPerHouse.Backend[0]) + + fmt.Println() + pointsPerHouse["backend"] += makeQuestion(&questionsPerHouse.Backend[1]) + + fmt.Println() + pointsPerHouse["data"] += makeQuestion(&questionsPerHouse.Data[0]) + + fmt.Println() + pointsPerHouse["data"] += makeQuestion(&questionsPerHouse.Data[1]) + + fmt.Println() + pointsPerHouse["frontend"] += makeQuestion(&questionsPerHouse.Frontend[0]) + + fmt.Println() + pointsPerHouse["frontend"] += makeQuestion(&questionsPerHouse.Frontend[1]) + + fmt.Println() + pointsPerHouse["mobile"] += makeQuestion(&questionsPerHouse.Mobile[0]) + + fmt.Println() + pointsPerHouse["mobile"] += makeQuestion(&questionsPerHouse.Mobile[1]) + + var maxPoint float32 = max( + pointsPerHouse["backend"], + pointsPerHouse["data"], + pointsPerHouse["frontend"], + pointsPerHouse["mobile"], + ) + + var maxPoints map[string]float32 = map[string]float32{ + "backend": pointsPerHouse["backend"], + "data": pointsPerHouse["data"], + "frontend": pointsPerHouse["frontend"], + "mobile": pointsPerHouse["mobile"], + } + + maps.DeleteFunc(maxPoints, func(key string, value float32) bool { + return value != maxPoint + }) + + if len(maxPoints) == 1 { + for house := range maxPoints { + fmt.Printf("\n> %s will be part of the %s house!", userName, house) + break + } + return + } + + var houses []string + for house := range maxPoints { + houses = append(houses, house) + } + + var rndHouse string = rndChoice(houses) + + fmt.Printf("\n> The decision has been complicated, but %s will be part of the %s house!", userName, rndHouse) +} From d5daad86e2c05f2ac85ac8e92ffacfb8e679dd43 Mon Sep 17 00:00:00 2001 From: Isaac Morcillo Garcia Date: Sat, 7 Sep 2024 12:20:23 +0200 Subject: [PATCH 028/539] #32 - Javascript --- .../javascript/isaacus98.js | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/javascript/isaacus98.js diff --git a/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/javascript/isaacus98.js b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/javascript/isaacus98.js new file mode 100644 index 0000000000..457f23f44f --- /dev/null +++ b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/javascript/isaacus98.js @@ -0,0 +1,147 @@ +/* + * EJERCICIO: + * ¡Deadpool y Wolverine se enfrentan en una batalla épica! + * Crea un programa que simule la pelea y determine un ganador. + * El programa simula un combate por turnos, donde cada protagonista posee unos + * puntos de vida iniciales, un daño de ataque variable y diferentes cualidades + * de regeneración y evasión de ataques. + * Requisitos: + * 1. El usuario debe determinar la vida inicial de cada protagonista. + * 2. Cada personaje puede impartir un daño aleatorio: + * - Deadpool: Entre 10 y 100. + * - Wolverine: Entre 10 y 120. + * 3. Si el daño es el máximo, el personaje que lo recibe no ataca en el + * siguiente turno, ya que tiene que regenerarse (pero no aumenta vida). + * 4. Cada personaje puede evitar el ataque contrario: + * - Deadpool: 25% de posibilidades. + * - Wolverine: 20% de posibilidades. + * 5. Un personaje pierde si sus puntos de vida llegan a cero o menos. + * Acciones: + * 1. Simula una batalla. + * 2. Muestra el número del turno (pausa de 1 segundo entre turnos). + * 3. Muestra qué pasa en cada turno. + * 4. Muestra la vida en cada turno. + * 5. Muestra el resultado final. + */ + +class Character { + constructor(name, health, minDamage, maxDamage, evasion) { + this.name = name + this.health = health + this.minDamage = minDamage + this.maxDamage = maxDamage + this.evasion = evasion + } + + // Devuelve el numero de daño generado + attack() { + return Math.floor(Math.random() * this.maxDamage) + this.minDamage + } + + // Devuelve true si esquiva el ataque, false si no lo esquiva y le resta puntos de vida + dodge(damage) { + let isEvasion = Math.floor(Math.random() * 100) + 1 + + // Ha evadido el ataque + if (isEvasion <= this.evasion) { + return true + } else { + if ((this.health - damage) < 0) { + this.health = 0 + } else { + this.health -= damage + } + + return false + } + } +} + +const rl = require('readline-sync'); + +// Pide los puntos de vida que tendra Deadpool +let health = rl.question("Inserte la cantidad de vida que tendra Deadpool? ") +let deadpool = new Character("Deadpool", parseInt(health), 10, 100, 25) + +// Pide los puntos de vida que tendra Wolverine +health = rl.question("Inserte la cantidad de vida que tendra Wolverine? ") +let wolverine = new Character("Wolverine", parseInt(health), 10, 120, 20) + +console.log("Estadisticas Deadpool") +console.table(deadpool) + +console.log("Estadisticas Wolverine") +console.table(wolverine) + +battle() + +async function battle() { + let alternate = true + let evasion = false + let damage = 0 + let wolverineInitialHealth = wolverine.health + let deadpoolInitialHealth = deadpool.health + + do { + + // Deadpool + if (alternate) { + console.log("Turno de Deadpool") + + // Realizar ataque + damage = deadpool.attack() + console.log(`Deadpool hace un ataque de ${damage} puntos de daño`) + + // Evasión + evasion = wolverine.dodge(damage) + if (evasion) { + console.log("Wolverine ha esquivado el ataque") + } else { + console.log(`Wolverine a recibido un ataque de ${damage} puntos de daño`) + } + + // Comprovar si el turno canvia + if (damage == deadpool.maxDamage & !evasion) { + console.log("Wolverine entra en modo de regeneración") + alternate = true + } else { + alternate = false + } + } else { // Wolverine + console.log("Turno de Wolverine") + + // Realizar ataque + damage = wolverine.attack() + console.log(`Wolverine hace un ataque de ${damage} puntos de daño`) + + // Evasión + evasion = deadpool.dodge(damage) + if (evasion) { + console.log("Deadpool ha esquivado el ataque") + } else { + console.log(`Deadpool a recibido un ataque de ${damage} puntos de daño`) + } + + // Comprovar si el turno canvia + if (damage == wolverine.maxDamage & !evasion) { + console.log("Deadpool entra en modo de regeneración") + alternate = false + } else { + alternate = true + } + } + + // Mostrar vida de los personajes a final de turno + console.log(`Deadpool: ${deadpool.health}/${deadpoolInitialHealth}`) + console.log(`Wolverine: ${wolverine.health}/${wolverineInitialHealth}`) + + // Pausa de 1 segundo + await new Promise(r => setTimeout(r, 1000)); + } while(deadpool.health > 0 & wolverine.health > 0) + + if (deadpool.health == 0) { + console.log("Wolverine ha ganado la pelea") + } else { + console.log("Deadpool ha ganado la pelea") + } +} \ No newline at end of file From deaddf0ed9a5e98c191ffe2b0dc118a6f26bbea6 Mon Sep 17 00:00:00 2001 From: jandortiz Date: Sat, 7 Sep 2024 14:10:13 +0200 Subject: [PATCH 029/539] #00 - Python --- .../python/jandortiz.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jandortiz.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jandortiz.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jandortiz.py new file mode 100644 index 0000000000..c2ffe8b5d2 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jandortiz.py @@ -0,0 +1,23 @@ +# Parte 1. +# https://www.python.org/ + +# Parte 2. +# Esto es un primer comentario. + +""" +Otra forma de realizar +comentarios de varias líneas. +""" + +# Parte 3. +mi_primera_variable = 3 +HORAS_DIA = 24 + +# Parte 4. +numero_entero = 54 +numero_decimal = 43.2 +cadena_texto = "Hola mundo" +variable_booleana = True +variable_none = None + +print("¡Hola, Python!") \ No newline at end of file From 2976a1cfd3c7c76e691960cde13f889d7c2bd692 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Sat, 7 Sep 2024 09:34:31 -0400 Subject: [PATCH 030/539] 36 - JavaScript --- .../javascript/RicJDev.js | 73 ++++++------------- 1 file changed, 22 insertions(+), 51 deletions(-) diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RicJDev.js b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RicJDev.js index 413b251a6a..71fb663b37 100644 --- a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RicJDev.js +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RicJDev.js @@ -9,23 +9,12 @@ class Question { constructor(title) { this.title = title - this.options = { - A: null, - B: null, - C: null, - D: null, - } + this.options = { A: null, B: null, C: null, D: null } } addOption(letter, option) { if (Object.keys(this.options).includes(letter.toUpperCase())) { - if (this.options[letter] === option) { - throw new Error('You cannot repeat options.') - } - - this.options[letter] = option - } else { - throw new Error('You cannot access an option that does not exist.') + if (this.options[letter] !== option) this.options[letter] = option } } } @@ -37,6 +26,7 @@ class Questionary { addQuestion(title) { const id = Object.keys(this.questions).length + 1 + this.questions[id] = new Question(title) } @@ -143,41 +133,11 @@ const rl = readline.createInterface({ import pc from 'picocolors' -// Hacemos un sitema básico para manejar los resultados - -const results = { - A: 0, - B: 0, - C: 0, - D: 0, -} - -function getWinnerLetter() { - let winner = 'A' - - for (const letter in results) { - if (results[letter] > results[winner]) { - winner = letter - } - } - - const sameValues = Object.keys(results).filter((key) => { - return results[winner] === results[key] - }) - - if (sameValues.length > 1) { - const randomIndex = Math.floor(Math.random() * sameValues.length) - - return { letter: sameValues[randomIndex], isTie: true } - } - - return { letter: winner, isTie: false } -} - // * Aquí empieza la magia * -console.clear() +const results = { A: 0, B: 0, C: 0, D: 0 } +console.clear() const name = await rl.question('\nDime tu nombre, querido alumno. ') for (const id in questionary.questions) { @@ -189,6 +149,7 @@ for (const id in questionary.questions) { while (!Object.keys(question.options).includes(answer.toUpperCase())) { console.clear() console.log(`\nBienvenido seas, ${pc.bold(name)}. ${message}`) + console.log(`\n${pc.blue(id)}. ${question.title}\n`) for (const letter in question.options) { @@ -205,27 +166,37 @@ for (const id in questionary.questions) { rl.close() -// Mostramos los resultados del cuestionario y aquí finaliza el programa +// Mostramos los resultados del cuestionario y finaliza el programa + +let winner = Object.keys(results).reduce((previous, current) => { + if (results[current] > results[previous]) { + previous = current + } + + return previous +}) + +const tieValues = Object.keys(results).filter((same) => results[winner] === results[same]) + +if (tieValues.length > 1) winner = tieValues[Math.floor(Math.random() * tieValues.length)] console.clear() console.log( `\nQuerido ${pc.bold(name)}, ¡el cuestionario ha terminado!\nEstos son los resultados:\n` ) -const conditions = { +const messages = { A: `Tu casa será el desarrollo ${pc.blue('Frontend')}.`, B: `Tu casa será el desarrollo ${pc.blue('Backend')}.`, C: `Tu casa será el desarrollo ${pc.blue('Mobile')}.`, D: `Tu casa será el análisis de ${pc.blue('Data')}.`, } -const { letter, isTie } = getWinnerLetter() - -const resultMessage = conditions[letter] || pc.red('Ha ocurrido algun error inesperado.') +const resultMessage = messages[winner] || pc.red('Ha ocurrido algún error inesperado.') console.log(resultMessage) -if (isTie) { +if (tieValues.length > 1) { console.log('\nFue una decisión difícil debido a que hubo empate en algunas preguntas.') } From a523f2ce129372ac6022d35bdf61226ac08a4f04 Mon Sep 17 00:00:00 2001 From: riacosta Date: Sat, 7 Sep 2024 10:54:05 -0300 Subject: [PATCH 031/539] Init Reto --- .../python/rigo93acosta.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/rigo93acosta.py diff --git a/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/rigo93acosta.py b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/rigo93acosta.py new file mode 100644 index 0000000000..0391bcd585 --- /dev/null +++ b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/rigo93acosta.py @@ -0,0 +1,19 @@ +''' +/* + * EJERCICIO: + * ¡La temporada 2 de "Los Anillos de Poder" está a punto de estrenarse! + * ¿Qué pasaría si tuvieras que encargarte de repartir los anillos + * entre las razas de la Tierra Media? + * Desarrolla un programa que se encargue de distribuirlos. + * Requisitos: + * 1. Los Elfos recibirán un número impar. + * 2. Los Enanos un número primo. + * 3. Los Hombres un número par. + * 4. Sauron siempre uno. + * Acciones: + * 1. Crea un programa que reciba el número total de anillos + * y busque una posible combinación para repartirlos. + * 2. Muestra el reparto final o el error al realizarlo. + */ +''' + From 0aa81b2c941bf3976f698e5cae1935dd5ddea6d9 Mon Sep 17 00:00:00 2001 From: resbaloso <134111217+raynerpv2022@users.noreply.github.com> Date: Sat, 7 Sep 2024 16:16:34 +0200 Subject: [PATCH 032/539] #14 Python and GO --- Roadmap/14 - FECHAS/go/raynerpv2022.go | 41 +++++++++++++++++++++ Roadmap/14 - FECHAS/python/raynerpv2022.py | 42 ++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 Roadmap/14 - FECHAS/go/raynerpv2022.go create mode 100644 Roadmap/14 - FECHAS/python/raynerpv2022.py diff --git a/Roadmap/14 - FECHAS/go/raynerpv2022.go b/Roadmap/14 - FECHAS/go/raynerpv2022.go new file mode 100644 index 0000000000..4d21cd222e --- /dev/null +++ b/Roadmap/14 - FECHAS/go/raynerpv2022.go @@ -0,0 +1,41 @@ +package main + +import ( + "fmt" + "time" +) + +// /* +// * EJERCICIO: +// * Crea dos variables utilizando los objetos fecha (date, o semejante) de tu lenguaje: +// * - Una primera que represente la fecha (día, mes, año, hora, minuto, segundo) actual. +// * - Una segunda que represente tu fecha de nacimiento (te puedes inventar la hora). +// * Calcula cuántos años han transcurrido entre ambas fechas. +// * + +func main() { + now := time.Now() + fmt.Printf("Date of today %v:\n", now) + birthDate := time.Date(1979, time.December, 26, 19, 00, 00, 00, time.UTC) + fmt.Printf("Date of my Birthday %v:\n", birthDate) + dif := now.Year() - birthDate.Year() + fmt.Printf("How many years since I was born %v:\n", dif) + + // * DIFICULTAD EXTRA (opcional): + // * Utilizando la fecha de tu cumpleaños, formatéala y muestra su resultado de + // * 10 maneras diferentes. Por ejemplo: + // * - Día, mes y año. + // * - Hora, minuto y segundo. + // * - Día de año. + // * - Día de la semana. + // * - Nombre del mes. + // * (lo que se te ocurra...) + // */ + + // date := birthDate.Format("Dia/Mes/Ano") + fmt.Printf(" Date : %v/%v/%v \n", birthDate.Day(), birthDate.Month(), birthDate.Year()) + fmt.Printf(" Time : %v:%v:%v \n", birthDate.Hour(), birthDate.Minute(), birthDate.Second()) + fmt.Printf(" Date of the year: %v \n", birthDate.YearDay()) + fmt.Printf(" MOnth: %v \n", birthDate.Month()) + +} diff --git a/Roadmap/14 - FECHAS/python/raynerpv2022.py b/Roadmap/14 - FECHAS/python/raynerpv2022.py new file mode 100644 index 0000000000..120c68025d --- /dev/null +++ b/Roadmap/14 - FECHAS/python/raynerpv2022.py @@ -0,0 +1,42 @@ +# /* +# * EJERCICIO: +# * Crea dos variables utilizando los objetos fecha (date, o semejante) de tu lenguaje: +# * - Una primera que represente la fecha (día, mes, año, hora, minuto, segundo) actual. +# * - Una segunda que represente tu fecha de nacimiento (te puedes inventar la hora). +# * Calcula cuántos años han transcurrido entre ambas fechas. +# * + +import datetime + +now_date = datetime.datetime.now() +bith_date = datetime.datetime(1979,10,26,19,00,00,00) +print(now_date) +print(bith_date) +dif = now_date.year - bith_date.year + +print(f"Han pasado {dif} annos" ) + + + + + + + +# * DIFICULTAD EXTRA (opcional): +# * Utilizando la fecha de tu cumpleaños, formatéala y muestra su resultado de +# * 10 maneras diferentes. Por ejemplo: +# * - Día, mes y año. +# * - Hora, minuto y segundo. +# * - Día de año. +# * - Día de la semana. +# * - Nombre del mes. +# * (lo que se te ocurra...) +# */ + +print(f" Date {bith_date.date()}") +print(f" Date {bith_date.strftime("%d %m %y")}") +print(f" Time {bith_date.strftime("%H %M %S")}") +print(f" Time {bith_date.time()}") +print(f" Day of the week {bith_date.strftime("%A")}") +print(f" Name of Month {bith_date.strftime("%B")}") +print(f" day of the years {bith_date.strftime("%j")}") \ No newline at end of file From 0b98cfd35daa1873ae3f999daedaeee146e73222 Mon Sep 17 00:00:00 2001 From: riacosta Date: Sat, 7 Sep 2024 11:17:18 -0300 Subject: [PATCH 033/539] First Part --- .../python/rigo93acosta.py | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/rigo93acosta.py b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/rigo93acosta.py index 0391bcd585..9640decd55 100644 --- a/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/rigo93acosta.py +++ b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/rigo93acosta.py @@ -17,3 +17,51 @@ */ ''' +def is_prime(number: int) -> bool: + if number < 2: + return False + for i in range(2, int((number ** 0.5)+1)): + if number % i == 0: + return False + return True + + +def distribute_rings(total_rings: int): + + sauron = 1 + total_rings -= sauron + + for men in range(2, total_rings, 2): + for elves in range(1, total_rings, 2): + + dwarves = total_rings - elves - men + + if dwarves > 0 and is_prime(dwarves): + return { + "Hombres": men, + "Elfos": elves, + "Enanos": dwarves, + "Sauron": sauron + } + + return "Error: No es posible repartir los anillos." + + + +if __name__ == '__main__': + + try: + total_rings = int( + input('Introduce el número de anillos a repartir: ') + ) + + distributed_rings = distribute_rings(total_rings) + + if isinstance(distributed_rings, dict): + print("Posibles distribuciones de los anillos de poder:\n") + print(distributed_rings) + + else: + print(distributed_rings) + except ValueError: + print('Error, el número debe ser un entero.') From 65c1cd8e97c8511f8abf42644cc439bef1388322 Mon Sep 17 00:00:00 2001 From: riacosta Date: Sat, 7 Sep 2024 12:04:05 -0300 Subject: [PATCH 034/539] End_Reto --- .../python/rigo93acosta.py | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/rigo93acosta.py b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/rigo93acosta.py index 9640decd55..8112901480 100644 --- a/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/rigo93acosta.py +++ b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/rigo93acosta.py @@ -26,8 +26,11 @@ def is_prime(number: int) -> bool: return True + def distribute_rings(total_rings: int): + distributed_rings = [] + sauron = 1 total_rings -= sauron @@ -37,17 +40,18 @@ def distribute_rings(total_rings: int): dwarves = total_rings - elves - men if dwarves > 0 and is_prime(dwarves): - return { + + distributed_rings.append({ "Hombres": men, "Elfos": elves, "Enanos": dwarves, "Sauron": sauron - } + }) + if distributed_rings: + return distributed_rings return "Error: No es posible repartir los anillos." - - if __name__ == '__main__': try: @@ -57,10 +61,12 @@ def distribute_rings(total_rings: int): distributed_rings = distribute_rings(total_rings) - if isinstance(distributed_rings, dict): + if isinstance(distributed_rings, list): print("Posibles distribuciones de los anillos de poder:\n") - print(distributed_rings) - + for distribution in enumerate(distributed_rings): + print(f"{distribution[0] + 1}. {distribution[1]}") + + print(f"\nDistribución media: {distributed_rings[int(len(distributed_rings) / 2)]}") else: print(distributed_rings) except ValueError: From 4de5237d847a4db8718d938c5a5dfcfb1fc4abd1 Mon Sep 17 00:00:00 2001 From: resbaloso <134111217+raynerpv2022@users.noreply.github.com> Date: Sat, 7 Sep 2024 18:00:49 +0200 Subject: [PATCH 035/539] #15 Python and Go --- .../go/raynerpv2022.go" | 49 +++++++++++++++++++ .../python/raynerpv2022.py" | 40 +++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 "Roadmap/15 - ASINCRON\303\215A/go/raynerpv2022.go" create mode 100644 "Roadmap/15 - ASINCRON\303\215A/python/raynerpv2022.py" diff --git "a/Roadmap/15 - ASINCRON\303\215A/go/raynerpv2022.go" "b/Roadmap/15 - ASINCRON\303\215A/go/raynerpv2022.go" new file mode 100644 index 0000000000..de596d5be0 --- /dev/null +++ "b/Roadmap/15 - ASINCRON\303\215A/go/raynerpv2022.go" @@ -0,0 +1,49 @@ +package main + +import ( + "fmt" + "sync" + "time" +) + +// /* +// - EJERCICIO: +// - Utilizando tu lenguaje, crea un programa capaz de ejecutar de manera +// - asíncrona una función que tardará en finalizar un número concreto de +// - segundos parametrizables. También debes poder asignarle un nombre. +// - La función imprime su nombre, cuándo empieza, el tiempo que durará +// - su ejecución y cuando finaliza. +// * +// - DIFICULTAD EXTRA (opcional): +// - Utilizando el concepto de asincronía y la función anterior, crea +// - el siguiente programa que ejecuta en este orden: +// - - Una función C que dura 3 segundos. +// - - Una función B que dura 2 segundos. +// - - Una función A que dura 1 segundo. +// - - Una función D que dura 1 segundo. +// - - Las funciones C, B y A se ejecutan en paralelo. +// - - La función D comienza su ejecución cuando las 3 anteriores han +// - finalizado. +// */ + +func my_task(duration int, name string, wg *sync.WaitGroup) { + if wg != nil { + defer wg.Done() + } + start := time.Now() + fmt.Printf(" Task: %v Start: %v\n", name, start) + time.Sleep(time.Duration(duration) * time.Second) + end := time.Now() + fmt.Printf(" Task: %v End: %v Duration%v\n", name, end, duration) +} + +func main() { + var wg sync.WaitGroup + wg.Add(3) + go my_task(10, "TAsk A", &wg) + go my_task(8, "TAsk B", &wg) + go my_task(4, "TAsk c", &wg) + wg.Wait() + my_task(1, "TAsk D", nil) + +} diff --git "a/Roadmap/15 - ASINCRON\303\215A/python/raynerpv2022.py" "b/Roadmap/15 - ASINCRON\303\215A/python/raynerpv2022.py" new file mode 100644 index 0000000000..da6b923937 --- /dev/null +++ "b/Roadmap/15 - ASINCRON\303\215A/python/raynerpv2022.py" @@ -0,0 +1,40 @@ +# /* +# * EJERCICIO: +# * Utilizando tu lenguaje, crea un programa capaz de ejecutar de manera +# * asíncrona una función que tardará en finalizar un número concreto de +# * segundos parametrizables. También debes poder asignarle un nombre. +# * La función imprime su nombre, cuándo empieza, el tiempo que durará +# * su ejecución y cuando finaliza. +# * +import asyncio +from datetime import datetime + +async def my_asyn_func(time, name): + start = datetime.now() + print(f"Task:{name} Start: {start.strftime("%H:%M:%S")} ") + await asyncio.sleep(time) + end = datetime.now() + + print(f"Task:{name} End:{end.strftime("%H:%M:%S")} Duration:{time}") + + + +# * DIFICULTAD EXTRA (opcional): +# * Utilizando el concepto de asincronía y la función anterior, crea +# * el siguiente programa que ejecuta en este orden: +# * - Una función C que dura 3 segundos. +# * - Una función B que dura 2 segundos. +# * - Una función A que dura 1 segundo. +# * - Una función D que dura 1 segundo. +# * - Las funciones C, B y A se ejecutan en paralelo. +# * - La función D comienza su ejecución cuando las 3 anteriores han +# * finalizado. +# */ + + +async def main(): + + await asyncio.gather(my_asyn_func(10,"Aufgabe A"),my_asyn_func(7,"Aufgabe B"), my_asyn_func(3,"Aufgabe C")) + await my_asyn_func(1,"Aufgabe D") + +asyncio.run(main()) \ No newline at end of file From f7d8c179ccf1ce195c2c38d78b5c66c1d33af82a Mon Sep 17 00:00:00 2001 From: Lance <155090153+1ceL4nc3@users.noreply.github.com> Date: Sat, 7 Sep 2024 19:47:00 +0100 Subject: [PATCH 036/539] L4nce.c --- .../c/L4nce.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/L4nce.c diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/L4nce.c b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/L4nce.c new file mode 100644 index 0000000000..db635c0b9c --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/L4nce.c @@ -0,0 +1,13 @@ +https://www.cprogramming.com/ + +Types of comments +"// //" = // comment // +"/* */" = /*comment*/ + +integer +int a = 2; +constant value = const + type of variable + name of variable +const int n = 5; + +char x = 'c'; +float y = 2.35*32; From 49f00b72729824d038f07df8175f33efcd27c6ba Mon Sep 17 00:00:00 2001 From: Lance <155090153+1ceL4nc3@users.noreply.github.com> Date: Sat, 7 Sep 2024 21:17:03 +0100 Subject: [PATCH 037/539] Update L4nce.c --- .../c/L4nce.c | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/L4nce.c b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/L4nce.c index db635c0b9c..e404897e1b 100644 --- a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/L4nce.c +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/L4nce.c @@ -1,13 +1,29 @@ -https://www.cprogramming.com/ +https://www.cprogramming.com Types of comments -"// //" = // comment // -"/* */" = /*comment*/ +// // = // comment // +/* */ = /* comment */ -integer -int a = 2; -constant value = const + type of variable + name of variable +// constant value = const + type of variable + name of variable // const int n = 5; -char x = 'c'; -float y = 2.35*32; +//Data types // +char character = 'a'; // Single character, 1 byte // +int integer = 9; // Signed integer in base 10, 4 bytes// +float decimal = 1.5; // Floating point number with six digits of precision, 4 bytes // +double decimalDouble = -2456.4452; // Hold about 15 to 16 digits after and before any given decimal point, 8 bytes // +long longinteger = 132344546L; // Signed long integer, 4 bytes // +short shortinteger = 128; // Short signed integer, 2 bytes // +unsigned unsignedinteger = 50; // Unsigned integer in base 10, 4 bytes // +unsigned long unsignedlonginteger = 451345245UL; // Unsigned long long integer, 8 bytes // +unsigned short unsignedshortinteger = 256; // Short unsigned integer, 2 bytes // + +#include // header function + +int main() // main function +{ // indicates the beginning and end of functions and other code blocks // + char l_name = 'C'; // create a variable named l_name and assign it the character C // + + printf("!Hola %c!\n", l_name); // print the string !Hola + variable l_name// // %c indicates that the funtion is printing a character// // \n print another line// + +} From 4e8cef4a0c64a13dc3d15eaf4b52d21bc5368d15 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 7 Sep 2024 17:34:07 -0500 Subject: [PATCH 038/539] #00 - Python --- .../python/JohannManrique.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/JohannManrique.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/JohannManrique.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/JohannManrique.py new file mode 100644 index 0000000000..cf47fc8c50 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/JohannManrique.py @@ -0,0 +1,21 @@ +#https://www.python.org/ + +#esto es un comentario +""" +esto tambien es un comentario +""" +''' +y esta creo que es otra forma de hacer un comentario +''' + +a = "esto es una variable" + +CONSTANTES="creo que en este lenguaje no existen perce, pero se puede indicar creando la variable en mayusculas" + +texto= "esto es una cadena de texto o string" +enteros= 1234 +booleanos= True +booleanos2= False +decimales= 1.29 +A="¡Hola, Python!" +print(A) \ No newline at end of file From 7c281bf383bd0e0fc1a48853d62541ff79e1bc30 Mon Sep 17 00:00:00 2001 From: David Sabater Date: Sun, 8 Sep 2024 00:43:05 +0200 Subject: [PATCH 039/539] #01 - C++ --- .../c++/oixild.cpp | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/oixild.cpp diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/oixild.cpp b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/oixild.cpp new file mode 100644 index 0000000000..4371e59852 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/oixild.cpp @@ -0,0 +1,136 @@ +/* + * EJERCICIO: + * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: + * Aritmticos, lgicos, de comparacin, asignacin, identidad, pertenencia, bits... + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) + * - Utilizando las operaciones con operadores que t quieras, crea ejemplos + * que representen todos los tipos de estructuras de control que existan + * en tu lenguaje: + * Condicionales, iterativas, excepciones... + * - Debes hacer print por consola del resultado de todos los ejemplos. + + * + * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. + */ + + +#include +#include +#include // Para manejo de excepciones + +using namespace std; + +int main() { + // ** Operadores aritmticos ** + int a = 10; + int b = 3; + + cout << "Operadores aritmticos:" << endl; + cout << "Suma: " << a + b << endl; // Suma + cout << "Resta: " << a - b << endl; // Resta + cout << "Multiplicacin: " << a * b << endl; // Multiplicacin + cout << "Divisin: " << a / b << endl; // Divisin + cout << "Mdulo: " << a % b << endl; // Mdulo + cout << "Incremento: " << ++a << endl; // Incremento + cout << "Decremento: " << --b << endl; // Decremento + + // ** Operadores de asignacin ** + cout << "\nOperadores de asignacin:" << endl; + a = 5; + cout << "a = 5 -> " << a << endl; + a += 2; + cout << "a += 2 -> " << a << endl; + a -= 1; + cout << "a -= 1 -> " << a << endl; + a *= 3; + cout << "a *= 3 -> " << a << endl; + a /= 2; + cout << "a /= 2 -> " << a << endl; + a %= 3; + cout << "a %= 3 -> " << a << endl; + + // ** Operadores de comparacin ** + cout << "\nOperadores de comparacin:" << endl; + cout << "a == b: " << (a == b) << endl; // Igualdad + cout << "a != b: " << (a != b) << endl; // Diferente + cout << "a < b: " << (a < b) << endl; // Menor que + cout << "a > b: " << (a > b) << endl; // Mayor que + cout << "a <= b: " << (a <= b) << endl; // Menor o igual que + cout << "a >= b: " << (a >= b) << endl; // Mayor o igual que + + // ** Operadores lgicos ** + cout << "\nOperadores lgicos:" << endl; + bool x = true; + bool y = false; + cout << "x && y: " << (x && y) << endl; // AND lgico + cout << "x || y: " << (x || y) << endl; // OR lgico + cout << "!x: " << !x << endl; // NOT lgico + + // ** Operadores de bits ** + cout << "\nOperadores de bits:" << endl; + int c = 5; // 0101 en binario + int d = 9; // 1001 en binario + cout << "c & d: " << (c & d) << endl; // AND a nivel de bits + cout << "c | d: " << (c | d) << endl; // OR a nivel de bits + cout << "c ^ d: " << (c ^ d) << endl; // XOR a nivel de bits + cout << "~c: " << ~c << endl; // NOT a nivel de bits + cout << "c << 1: " << (c << 1) << endl; // Desplazamiento a la izquierda + cout << "c >> 1: " << (c >> 1) << endl; // Desplazamiento a la derecha + + // ** Estructuras de control: Condicionales ** + cout << "\nEstructuras de control - Condicionales:" << endl; + if (a > b) { + cout << "a es mayor que b" << endl; + } + else { + cout << "a no es mayor que b" << endl; + } + + // ** Estructuras de control: Iterativas ** + cout << "\nEstructuras de control - Iterativas:" << endl; + cout << "Bucle for:" << endl; + for (int i = 0; i < 3; i++) { + cout << "i = " << i << endl; + } + + cout << "Bucle while:" << endl; + int i = 0; + while (i < 3) { + cout << "i = " << i << endl; + i++; + } + + cout << "Bucle do-while:" << endl; + i = 0; + do { + cout << "i = " << i << endl; + i++; + } while (i < 3); + + // ** Estructuras de control: Manejo de excepciones ** + cout << "\nEstructuras de control - Excepciones:" << endl; + try { + int divisor = 0; + if (divisor == 0) { + throw runtime_error("Error: Divisin entre cero"); + } + int resultado = 10 / divisor; + cout << "Resultado: " << resultado << endl; + } + catch (const exception& e) { + cout << e.what() << endl; + } + + // ** Dificultad Extra ** + cout << "\nDificultad Extra:" << endl; + + int num = 10; + while (num <= 55) { + if (num % 2 == 0 && num % 3 != 0 && num % 16 != 0) { + cout << num << " " << endl; + num++; + } + num++; + } + return 0; +} From 2f987780f1030f8deef62b971cf65b8def32092d Mon Sep 17 00:00:00 2001 From: Jesus Antonio Escamilla Date: Sat, 7 Sep 2024 18:02:46 -0600 Subject: [PATCH 040/539] 08 - Java & Python --- .../java/JesusAntonioEEscamilla.java | 44 +++++++++++++++++++ .../python/JesusAntonioEEscamilla.py | 28 ++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 Roadmap/08 - CLASES/java/JesusAntonioEEscamilla.java create mode 100644 Roadmap/08 - CLASES/python/JesusAntonioEEscamilla.py diff --git a/Roadmap/08 - CLASES/java/JesusAntonioEEscamilla.java b/Roadmap/08 - CLASES/java/JesusAntonioEEscamilla.java new file mode 100644 index 0000000000..771fc9d9d3 --- /dev/null +++ b/Roadmap/08 - CLASES/java/JesusAntonioEEscamilla.java @@ -0,0 +1,44 @@ + + +/** #07 - Java -> Jesus Antonio Escamilla */ + +public class JesusAntonioEEscamilla { + public static void main(String[] args) { + //---EJERCIÓ--- + Persona persona = new Persona("Jesus Antonio", 24, "Programador"); + persona.imprimirDetalles(); + //---EXTRA--- + + } + + //---EJERCIÓ--- + // Definición de la clase Persona + static class Persona { + // Atributos de la clase + private String nombre; + private int edad; + private String ocupacion; + + // Constructor de la clase Persona + public Persona(String nombre, int edad, String ocupacion) { + this.nombre = nombre; // Inicializa el atributo nombre + this.edad = edad; // Inicializa el atributo edad + this.ocupacion = ocupacion; // Inicializa el atributo ocupacion + } + + // Método para imprimir los atributos de la clase + public void imprimirDetalles() { + System.out.println("Nombre: " + nombre); + System.out.println("Edad: " + edad); + System.out.println("Profesión: " + ocupacion); + } + } + + + + /**-----DIFICULTAD EXTRA-----*/ + + // Pendiente + + /**-----DIFICULTAD EXTRA-----*/ +} \ No newline at end of file diff --git a/Roadmap/08 - CLASES/python/JesusAntonioEEscamilla.py b/Roadmap/08 - CLASES/python/JesusAntonioEEscamilla.py new file mode 100644 index 0000000000..3fbb235ef6 --- /dev/null +++ b/Roadmap/08 - CLASES/python/JesusAntonioEEscamilla.py @@ -0,0 +1,28 @@ +# #08 - Python -> Jesus Antonio Escamilla + +""" +EJERCIÓ +""" +# Definición de la clase Persona +class Persona: + # Inicializador con atributos nombre y edad + def __init__(self, nombre, edad, ocupacion): + self.nombre = nombre + self.edad = edad + self.ocupacion = ocupacion + + # Método para imprimir los atributos + def imprimir_informacion(self): + print(f"Nombre: {self.nombre}, Edad: {self.edad}, Ocupación: {self.ocupacion}") + +# Crear una instancia de la clase Persona +persona1 = Persona("Jesus Antonio", 30, "Programador") + +persona1.imprimir_informacion() + + + +""" +EXTRA +""" +# Pendientes \ No newline at end of file From 7df27bd53fa6979e3f35cb862fcda79f8682594c Mon Sep 17 00:00:00 2001 From: mouredev Date: Sun, 8 Sep 2024 00:16:38 +0000 Subject: [PATCH 041/539] Update stats --- Roadmap/stats.json | 1860 ++++++++++++++++++++++---------------------- 1 file changed, 939 insertions(+), 921 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index 39774d72d6..627a83a17d 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,168 +1,168 @@ { "challenges_total": 37, "languages_total": 48, - "files_total": 6821, - "users_total": 1147, + "files_total": 6870, + "users_total": 1150, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1249 + "count": 1254 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 759 + "count": 761 }, { "order": 3, "name": "02 - FUNCIONES Y ALCANCE", - "count": 583 + "count": 584 }, { "order": 4, "name": "03 - ESTRUCTURAS DE DATOS", - "count": 399 + "count": 400 }, { "order": 5, "name": "04 - CADENAS DE CARACTERES", - "count": 329 + "count": 331 }, { "order": 6, "name": "06 - RECURSIVIDAD", - "count": 313 + "count": 314 }, { "order": 7, "name": "05 - VALOR Y REFERENCIA", - "count": 287 + "count": 288 }, { "order": 8, "name": "07 - PILAS Y COLAS", - "count": 241 + "count": 242 }, { "order": 9, "name": "08 - CLASES", - "count": 221 + "count": 222 }, { "order": 10, "name": "09 - HERENCIA", - "count": 218 + "count": 219 }, { "order": 11, "name": "10 - EXCEPCIONES", - "count": 181 + "count": 182 }, { "order": 12, "name": "11 - MANEJO DE FICHEROS", - "count": 153 + "count": 154 }, { "order": 13, "name": "13 - PRUEBAS UNITARIAS", - "count": 127 + "count": 130 }, { "order": 14, - "name": "12 - JSON Y XML", - "count": 127 + "name": "14 - FECHAS", + "count": 129 }, { "order": 15, - "name": "14 - FECHAS", - "count": 126 + "name": "12 - JSON Y XML", + "count": 128 }, { "order": 16, "name": "16 - EXPRESIONES REGULARES", - "count": 123 + "count": 124 }, { "order": 17, "name": "15 - ASINCRON\u00cdA", - "count": 120 + "count": 123 }, { "order": 18, "name": "17 - ITERACIONES", - "count": 112 + "count": 113 }, { "order": 19, "name": "18 - CONJUNTOS", - "count": 109 + "count": 111 }, { "order": 20, "name": "19 - ENUMERACIONES", - "count": 97 + "count": 99 }, { "order": 21, "name": "20 - PETICIONES HTTP", - "count": 95 + "count": 96 }, { "order": 22, "name": "21 - CALLBACKS", - "count": 86 + "count": 87 }, { "order": 23, "name": "22 - FUNCIONES DE ORDEN SUPERIOR", - "count": 80 + "count": 81 }, { "order": 24, "name": "23 - SINGLETON", - "count": 77 + "count": 79 }, { "order": 25, "name": "24 - DECORADORES", - "count": 69 + "count": 71 }, { "order": 26, "name": "25 - LOGS", - "count": 62 + "count": 64 }, { "order": 27, "name": "26 - SOLID SRP", - "count": 62 + "count": 63 }, { "order": 28, "name": "27 - SOLID OCP", - "count": 58 + "count": 59 }, { "order": 29, "name": "28 - SOLID LSP", - "count": 55 + "count": 56 }, { "order": 30, "name": "29 - SOLID ISP", - "count": 52 + "count": 53 }, { "order": 31, - "name": "32 - BATALLA DEADPOOL Y WOLVERINE", + "name": "30 - SOLID DIP", "count": 46 }, { "order": 32, - "name": "30 - SOLID DIP", - "count": 45 + "name": "32 - BATALLA DEADPOOL Y WOLVERINE", + "count": 46 }, { "order": 33, @@ -171,12 +171,12 @@ }, { "order": 34, - "name": "35 - REPARTIENDO LOS ANILLOS DE PODER", - "count": 37 + "name": "31 - SIMULADOR JUEGOS OL\u00cdMPICOS", + "count": 38 }, { "order": 35, - "name": "31 - SIMULADOR JUEGOS OL\u00cdMPICOS", + "name": "35 - REPARTIENDO LOS ANILLOS DE PODER", "count": 37 }, { @@ -194,74 +194,74 @@ { "order": 1, "name": "python", - "count": 2952, - "percentage": 43.28 + "count": 2959, + "percentage": 43.07 }, { "order": 2, "name": "javascript", - "count": 1338, - "percentage": 19.62 + "count": 1369, + "percentage": 19.93 }, { "order": 3, "name": "java", - "count": 612, - "percentage": 8.97 + "count": 614, + "percentage": 8.94 }, { "order": 4, "name": "typescript", - "count": 301, - "percentage": 4.41 + "count": 302, + "percentage": 4.4 }, { "order": 5, "name": "c#", "count": 252, - "percentage": 3.69 + "percentage": 3.67 }, { "order": 6, "name": "kotlin", - "count": 209, - "percentage": 3.06 + "count": 212, + "percentage": 3.09 }, { "order": 7, "name": "go", - "count": 209, - "percentage": 3.06 + "count": 212, + "percentage": 3.09 }, { "order": 8, "name": "swift", "count": 166, - "percentage": 2.43 + "percentage": 2.42 }, { "order": 9, "name": "php", "count": 151, - "percentage": 2.21 + "percentage": 2.2 }, { "order": 10, - "name": "rust", - "count": 112, + "name": "c++", + "count": 113, "percentage": 1.64 }, { "order": 11, - "name": "c++", + "name": "rust", "count": 112, - "percentage": 1.64 + "percentage": 1.63 }, { "order": 12, "name": "c", "count": 66, - "percentage": 0.97 + "percentage": 0.96 }, { "order": 13, @@ -272,20 +272,20 @@ { "order": 14, "name": "bash", - "count": 40, - "percentage": 0.59 + "count": 41, + "percentage": 0.6 }, { "order": 15, "name": "vb.net", "count": 36, - "percentage": 0.53 + "percentage": 0.52 }, { "order": 16, "name": "ocaml", "count": 34, - "percentage": 0.5 + "percentage": 0.49 }, { "order": 17, @@ -309,7 +309,7 @@ "order": 20, "name": "arduino", "count": 12, - "percentage": 0.18 + "percentage": 0.17 }, { "order": 21, @@ -555,220 +555,220 @@ }, { "order": 13, + "name": "sac-corts", + "count": 61, + "languages": 2 + }, + { + "order": 14, "name": "jesusantonioeescamilla", "count": 52, "languages": 3 }, { - "order": 14, + "order": 15, "name": "edalmava", "count": 51, "languages": 16 }, { - "order": 15, + "order": 16, "name": "amadorquispe", "count": 49, "languages": 2 }, { - "order": 16, + "order": 17, "name": "cesarcarmona30", "count": 48, "languages": 4 }, { - "order": 17, + "order": 18, "name": "ricjdev", "count": 47, "languages": 2 }, { - "order": 18, + "order": 19, "name": "raulg91", "count": 47, "languages": 2 }, { - "order": 19, + "order": 20, "name": "jesusway69", "count": 47, "languages": 2 }, { - "order": 20, + "order": 21, "name": "juanppdev", "count": 46, "languages": 3 }, { - "order": 21, + "order": 22, "name": "garos01", "count": 44, "languages": 2 }, { - "order": 22, + "order": 23, "name": "aldroide", "count": 42, "languages": 4 }, { - "order": 23, + "order": 24, "name": "santyjl", "count": 42, "languages": 3 }, { - "order": 24, + "order": 25, "name": "chrisdev00", "count": 41, "languages": 2 }, { - "order": 25, + "order": 26, "name": "didacdev", "count": 40, "languages": 5 }, { - "order": 26, + "order": 27, "name": "gabrielmoris", "count": 40, "languages": 3 }, { - "order": 27, + "order": 28, "name": "alexdevrep", "count": 38, "languages": 3 }, { - "order": 28, + "order": 29, "name": "neslarra", "count": 38, "languages": 2 }, { - "order": 29, + "order": 30, "name": "luishendrix92", "count": 37, "languages": 2 }, { - "order": 30, + "order": 31, "name": "asjordi", "count": 37, "languages": 1 }, { - "order": 31, + "order": 32, "name": "n0hagonada", "count": 36, "languages": 3 }, { - "order": 32, + "order": 33, "name": "emmanuelmmontesinos", "count": 36, "languages": 1 }, { - "order": 33, + "order": 34, "name": "mouredev", "count": 36, "languages": 1 }, { - "order": 34, + "order": 35, "name": "rauldoezon", "count": 35, "languages": 1 }, { - "order": 35, + "order": 36, "name": "rigo93acosta", "count": 35, "languages": 1 }, { - "order": 36, + "order": 37, "name": "angelsanchezt", "count": 34, "languages": 12 }, { - "order": 37, + "order": 38, "name": "rikmij", "count": 34, "languages": 2 }, { - "order": 38, + "order": 39, "name": "oriaj3", "count": 34, "languages": 1 }, { - "order": 39, + "order": 40, "name": "worlion", "count": 33, "languages": 2 }, { - "order": 40, + "order": 41, "name": "avcenal", "count": 33, "languages": 1 }, { - "order": 41, + "order": 42, "name": "juandaherrera", "count": 32, "languages": 5 }, { - "order": 42, + "order": 43, "name": "pedroomar23", "count": 32, "languages": 3 }, { - "order": 43, + "order": 44, "name": "pyramsd", "count": 32, "languages": 1 }, { - "order": 44, + "order": 45, + "name": "fborjalv", + "count": 32, + "languages": 1 + }, + { + "order": 46, "name": "ronipg", "count": 31, "languages": 4 }, { - "order": 45, + "order": 47, "name": "qv1ko", "count": 31, "languages": 4 }, { - "order": 46, - "name": "fborjalv", - "count": 31, - "languages": 1 - }, - { - "order": 47, + "order": 48, "name": "marcode24", "count": 30, "languages": 3 }, - { - "order": 48, - "name": "sac-corts", - "count": 30, - "languages": 1 - }, { "order": 49, "name": "alanshakir", @@ -783,124 +783,124 @@ }, { "order": 51, - "name": "any7dev", + "name": "raynerpv2022", "count": 29, "languages": 2 }, { "order": 52, + "name": "any7dev", + "count": 29, + "languages": 2 + }, + { + "order": 53, "name": "adra-dev", "count": 29, "languages": 1 }, { - "order": 53, + "order": 54, "name": "bernatcs", "count": 28, "languages": 2 }, { - "order": 54, + "order": 55, "name": "thegera4", "count": 27, "languages": 2 }, { - "order": 55, + "order": 56, "name": "parababire", "count": 27, "languages": 1 }, { - "order": 56, + "order": 57, "name": "isilanes", "count": 27, "languages": 1 }, { - "order": 57, + "order": 58, "name": "lucasrebuffo", "count": 27, "languages": 1 }, { - "order": 58, + "order": 59, "name": "nightblockchain30", "count": 26, "languages": 2 }, { - "order": 59, + "order": 60, + "name": "eulogioep", + "count": 26, + "languages": 1 + }, + { + "order": 61, "name": "caverobrandon", "count": 26, "languages": 1 }, { - "order": 60, + "order": 62, "name": "ggilperez", "count": 26, "languages": 1 }, { - "order": 61, + "order": 63, "name": "monicavaquerano", "count": 25, "languages": 2 }, { - "order": 62, + "order": 64, "name": "allbertomd", "count": 25, "languages": 1 }, { - "order": 63, + "order": 65, "name": "isaacus98", "count": 24, "languages": 3 }, { - "order": 64, + "order": 66, "name": "victoriaparraf", "count": 24, "languages": 1 }, { - "order": 65, + "order": 67, "name": "jamerrq", "count": 24, "languages": 1 }, { - "order": 66, + "order": 68, "name": "deyvid-10", "count": 24, "languages": 1 }, { - "order": 67, + "order": 69, "name": "fedeairala", "count": 24, "languages": 1 }, { - "order": 68, + "order": 70, "name": "zetared92", "count": 23, "languages": 3 }, - { - "order": 69, - "name": "raynerpv2022", - "count": 23, - "languages": 2 - }, - { - "order": 70, - "name": "eulogioep", - "count": 23, - "languages": 1 - }, { "order": 71, "name": "christian-jfr", @@ -963,55 +963,55 @@ }, { "order": 81, + "name": "simonguzman", + "count": 20, + "languages": 1 + }, + { + "order": 82, "name": "chartypes", "count": 19, "languages": 2 }, { - "order": 82, + "order": 83, "name": "sorubadguy", "count": 19, "languages": 1 }, { - "order": 83, + "order": 84, "name": "yenneralayon142", "count": 19, "languages": 1 }, { - "order": 84, + "order": 85, "name": "saezmd", "count": 19, "languages": 1 }, { - "order": 85, + "order": 86, "name": "trufoplus", "count": 19, "languages": 1 }, { - "order": 86, + "order": 87, "name": "pguillo02", "count": 18, "languages": 5 }, { - "order": 87, + "order": 88, "name": "estuardodev", "count": 18, "languages": 4 }, - { - "order": 88, - "name": "lumanet", - "count": 18, - "languages": 1 - }, { "order": 89, - "name": "simonguzman", + "name": "lumanet", "count": 18, "languages": 1 }, @@ -2307,1117 +2307,1117 @@ }, { "order": 305, - "name": "daeduol", + "name": "oixild", "count": 4, "languages": 2 }, { "order": 306, - "name": "mendozalz", + "name": "daeduol", "count": 4, "languages": 2 }, { "order": 307, - "name": "salkalero", + "name": "mendozalz", "count": 4, "languages": 2 }, { "order": 308, - "name": "elhacedordecosas", + "name": "salkalero", "count": 4, - "languages": 1 + "languages": 2 }, { "order": 309, - "name": "andeveling", + "name": "elhacedordecosas", "count": 4, "languages": 1 }, { "order": 310, - "name": "santiago-munoz-garcia", + "name": "andeveling", "count": 4, "languages": 1 }, { "order": 311, - "name": "deivitdev", + "name": "santiago-munoz-garcia", "count": 4, "languages": 1 }, { "order": 312, - "name": "joshbaez", + "name": "deivitdev", "count": 4, "languages": 1 }, { "order": 313, - "name": "marcoslombardo", + "name": "joshbaez", "count": 4, "languages": 1 }, { "order": 314, - "name": "lrpeset", + "name": "marcoslombardo", "count": 4, "languages": 1 }, { "order": 315, - "name": "dieswae", + "name": "lrpeset", "count": 4, "languages": 1 }, { "order": 316, - "name": "mateo423", + "name": "dieswae", "count": 4, "languages": 1 }, { "order": 317, - "name": "joaquinlopez14", + "name": "mateo423", "count": 4, "languages": 1 }, { "order": 318, - "name": "angelurrutdev", + "name": "joaquinlopez14", "count": 4, "languages": 1 }, { "order": 319, - "name": "elianisdev", + "name": "angelurrutdev", "count": 4, "languages": 1 }, { "order": 320, - "name": "omegatroy", + "name": "elianisdev", "count": 4, "languages": 1 }, { "order": 321, - "name": "socramwd", + "name": "omegatroy", "count": 4, "languages": 1 }, { "order": 322, - "name": "carzep09", + "name": "socramwd", "count": 4, "languages": 1 }, { "order": 323, - "name": "mayerga", + "name": "carzep09", "count": 4, "languages": 1 }, { "order": 324, - "name": "hugovrc", + "name": "mayerga", "count": 4, "languages": 1 }, { "order": 325, - "name": "cdbiancotti", + "name": "hugovrc", "count": 4, "languages": 1 }, { "order": 326, - "name": "tobibordino", + "name": "cdbiancotti", "count": 4, "languages": 1 }, { "order": 327, - "name": "guillermo-k", + "name": "h4ckxel", "count": 4, "languages": 1 }, { "order": 328, - "name": "zakkdrte", + "name": "tobibordino", "count": 4, "languages": 1 }, { "order": 329, - "name": "sarismejiasanchez", + "name": "guillermo-k", "count": 4, "languages": 1 }, { "order": 330, - "name": "buriticasara", + "name": "zakkdrte", "count": 4, "languages": 1 }, { "order": 331, - "name": "davstudy", + "name": "sarismejiasanchez", "count": 4, "languages": 1 }, { "order": 332, - "name": "zerek247", + "name": "buriticasara", "count": 4, "languages": 1 }, { "order": 333, - "name": "vicman-182", + "name": "davstudy", "count": 4, "languages": 1 }, { "order": 334, - "name": "dlgai12", + "name": "zerek247", "count": 4, "languages": 1 }, { "order": 335, - "name": "rodrigoghr", + "name": "vicman-182", "count": 4, "languages": 1 }, { "order": 336, - "name": "txuky", + "name": "dlgai12", "count": 4, "languages": 1 }, { "order": 337, - "name": "nox456", + "name": "rodrigoghr", "count": 4, "languages": 1 }, { "order": 338, - "name": "mplatab", + "name": "txuky", "count": 4, "languages": 1 }, { "order": 339, - "name": "angell4s", + "name": "nox456", "count": 4, "languages": 1 }, { "order": 340, - "name": "quejuan52", + "name": "mplatab", "count": 4, "languages": 1 }, { "order": 341, - "name": "axelprz", + "name": "angell4s", "count": 4, "languages": 1 }, { "order": 342, - "name": "javirub", + "name": "quejuan52", "count": 4, "languages": 1 }, { "order": 343, - "name": "mallcca", + "name": "axelprz", "count": 4, "languages": 1 }, { "order": 344, - "name": "sunjamer", + "name": "javirub", "count": 4, "languages": 1 }, { "order": 345, - "name": "carrenoalexander", + "name": "mallcca", "count": 4, "languages": 1 }, { "order": 346, - "name": "jadraz", + "name": "sunjamer", "count": 4, "languages": 1 }, { "order": 347, - "name": "anvildestroyer", + "name": "carrenoalexander", "count": 4, "languages": 1 }, { "order": 348, - "name": "luissssoto", + "name": "jadraz", "count": 4, "languages": 1 }, { "order": 349, - "name": "albertorevel", + "name": "anvildestroyer", "count": 4, "languages": 1 }, { "order": 350, - "name": "juanca2805", + "name": "luissssoto", "count": 4, "languages": 1 }, { "order": 351, - "name": "bladi23", + "name": "albertorevel", "count": 4, "languages": 1 }, { "order": 352, - "name": "blasbarragan", + "name": "juanca2805", "count": 4, "languages": 1 }, { "order": 353, - "name": "jerrysantana", + "name": "bladi23", "count": 4, "languages": 1 }, { "order": 354, - "name": "abel-ade", + "name": "blasbarragan", "count": 4, "languages": 1 }, { "order": 355, - "name": "jairo-alejandro", + "name": "jerrysantana", "count": 4, "languages": 1 }, { "order": 356, - "name": "sbs24", + "name": "abel-ade", "count": 4, "languages": 1 }, { "order": 357, - "name": "traver79", + "name": "jairo-alejandro", "count": 4, "languages": 1 }, { "order": 358, - "name": "ramxv", + "name": "sbs24", "count": 4, "languages": 1 }, { "order": 359, - "name": "inkhemi", + "name": "traver79", "count": 4, "languages": 1 }, { "order": 360, - "name": "juperdev", + "name": "ramxv", "count": 4, "languages": 1 }, { "order": 361, - "name": "rafacv23", + "name": "inkhemi", "count": 4, "languages": 1 }, { "order": 362, - "name": "d1d4cum", + "name": "juperdev", "count": 4, "languages": 1 }, { "order": 363, - "name": "mohamedelderkaoui", + "name": "rafacv23", "count": 4, "languages": 1 }, { "order": 364, - "name": "abelsrzz", - "count": 3, - "languages": 3 + "name": "d1d4cum", + "count": 4, + "languages": 1 }, { "order": 365, - "name": "angelo-eyama", - "count": 3, - "languages": 3 + "name": "mohamedelderkaoui", + "count": 4, + "languages": 1 }, { "order": 366, - "name": "akaisombra", + "name": "abelsrzz", "count": 3, "languages": 3 }, { "order": 367, - "name": "oskarcali", + "name": "angelo-eyama", "count": 3, "languages": 3 }, { "order": 368, - "name": "owen-ian", + "name": "akaisombra", "count": 3, "languages": 3 }, { "order": 369, - "name": "jehiselruth", + "name": "oskarcali", "count": 3, "languages": 3 }, { "order": 370, - "name": "n-skot", + "name": "owen-ian", "count": 3, - "languages": 2 + "languages": 3 }, { "order": 371, - "name": "dimasb69", + "name": "jehiselruth", "count": 3, - "languages": 2 + "languages": 3 }, { "order": 372, - "name": "alfarog507", + "name": "n-skot", "count": 3, "languages": 2 }, { "order": 373, - "name": "eloitr", + "name": "dimasb69", "count": 3, "languages": 2 }, { "order": 374, - "name": "diegopc-dev", + "name": "alfarog507", "count": 3, "languages": 2 }, { "order": 375, - "name": "robindev1812", + "name": "eloitr", "count": 3, "languages": 2 }, { "order": 376, - "name": "arliumdev", + "name": "diegopc-dev", "count": 3, "languages": 2 }, { "order": 377, - "name": "skala2301", + "name": "robindev1812", "count": 3, "languages": 2 }, { "order": 378, - "name": "pablotaber", + "name": "arliumdev", "count": 3, "languages": 2 }, { "order": 379, - "name": "allanoscoding", + "name": "skala2301", "count": 3, "languages": 2 }, { "order": 380, - "name": "seba9906", + "name": "pablotaber", "count": 3, "languages": 2 }, { "order": 381, - "name": "augustosdev", + "name": "allanoscoding", "count": 3, "languages": 2 }, { "order": 382, - "name": "dylanb55", + "name": "seba9906", "count": 3, - "languages": 1 + "languages": 2 }, { "order": 383, - "name": "mellamoomar", + "name": "augustosdev", "count": 3, - "languages": 1 + "languages": 2 }, { "order": 384, - "name": "oscar503sv", + "name": "dylanb55", "count": 3, "languages": 1 }, { "order": 385, - "name": "h4ckxel", + "name": "mellamoomar", "count": 3, "languages": 1 }, { "order": 386, - "name": "alejomazov", + "name": "oscar503sv", "count": 3, "languages": 1 }, { "order": 387, - "name": "bryanalzate007", + "name": "alejomazov", "count": 3, "languages": 1 }, { "order": 388, - "name": "ivanpelu7", + "name": "bryanalzate007", "count": 3, "languages": 1 }, { "order": 389, - "name": "dmauricio4", + "name": "ivanpelu7", "count": 3, "languages": 1 }, { "order": 390, - "name": "davidr1594", + "name": "dmauricio4", "count": 3, "languages": 1 }, { "order": 391, - "name": "vandresca", + "name": "davidr1594", "count": 3, "languages": 1 }, { "order": 392, - "name": "marlonleon2023", + "name": "vandresca", "count": 3, "languages": 1 }, { "order": 393, - "name": "nikorasu-d", + "name": "marlonleon2023", "count": 3, "languages": 1 }, { "order": 394, - "name": "barbafebles", + "name": "nikorasu-d", "count": 3, "languages": 1 }, { "order": 395, - "name": "heliercamejo", + "name": "barbafebles", "count": 3, "languages": 1 }, { "order": 396, - "name": "aggranadoss", + "name": "heliercamejo", "count": 3, "languages": 1 }, { "order": 397, - "name": "dannyvera1234", + "name": "aggranadoss", "count": 3, "languages": 1 }, { "order": 398, - "name": "axelsparta", + "name": "dannyvera1234", "count": 3, "languages": 1 }, { "order": 399, - "name": "gitperalta", + "name": "axelsparta", "count": 3, "languages": 1 }, { "order": 400, - "name": "samuelarandia", + "name": "gitperalta", "count": 3, "languages": 1 }, { "order": 401, - "name": "jaimerocel96", + "name": "samuelarandia", "count": 3, "languages": 1 }, { "order": 402, - "name": "sitnestic", + "name": "jaimerocel96", "count": 3, "languages": 1 }, { "order": 403, - "name": "matteozhao98", + "name": "sitnestic", "count": 3, "languages": 1 }, { "order": 404, - "name": "tebaah", + "name": "matteozhao98", "count": 3, "languages": 1 }, { "order": 405, - "name": "sebasgrdev", + "name": "tebaah", "count": 3, "languages": 1 }, { "order": 406, - "name": "14davidnkt", + "name": "sebasgrdev", "count": 3, "languages": 1 }, { "order": 407, - "name": "legs30011", + "name": "14davidnkt", "count": 3, "languages": 1 }, { "order": 408, - "name": "dariorfm", + "name": "legs30011", "count": 3, "languages": 1 }, { "order": 409, - "name": "orlas135", + "name": "dariorfm", "count": 3, "languages": 1 }, { "order": 410, - "name": "arbenisacosta", + "name": "orlas135", "count": 3, "languages": 1 }, { "order": 411, - "name": "hectoriglesias", + "name": "arbenisacosta", "count": 3, "languages": 1 }, { "order": 412, - "name": "matrix-miguel", + "name": "hectoriglesias", "count": 3, "languages": 1 }, { "order": 413, - "name": "jacarrillob", + "name": "matrix-miguel", "count": 3, "languages": 1 }, { "order": 414, - "name": "jelozanov", + "name": "jacarrillob", "count": 3, "languages": 1 }, { "order": 415, - "name": "andyfg0289", + "name": "jelozanov", "count": 3, "languages": 1 }, { "order": 416, - "name": "daniback95", + "name": "andyfg0289", "count": 3, "languages": 1 }, { "order": 417, - "name": "r4kso", + "name": "daniback95", "count": 3, "languages": 1 }, { "order": 418, - "name": "singularpigeon", + "name": "r4kso", "count": 3, "languages": 1 }, { "order": 419, - "name": "sandracalatayud", + "name": "singularpigeon", "count": 3, "languages": 1 }, { "order": 420, - "name": "andresargote", + "name": "sandracalatayud", "count": 3, "languages": 1 }, { "order": 421, - "name": "fernandog25", + "name": "andresargote", "count": 3, "languages": 1 }, { "order": 422, - "name": "agusbelp", + "name": "fernandog25", "count": 3, "languages": 1 }, { "order": 423, - "name": "uyarra73", + "name": "agusbelp", "count": 3, "languages": 1 }, { "order": 424, - "name": "asaelz", + "name": "uyarra73", "count": 3, "languages": 1 }, { "order": 425, - "name": "davidb313", + "name": "asaelz", "count": 3, "languages": 1 }, { "order": 426, - "name": "fdcorreadev", + "name": "davidb313", "count": 3, "languages": 1 }, { "order": 427, - "name": "magupe09", + "name": "fdcorreadev", "count": 3, "languages": 1 }, { "order": 428, - "name": "nathaliamf", + "name": "magupe09", "count": 3, "languages": 1 }, { "order": 429, - "name": "victorsschz", + "name": "nathaliamf", "count": 3, "languages": 1 }, { "order": 430, - "name": "hatorob", + "name": "victorsschz", "count": 3, "languages": 1 }, { "order": 431, - "name": "zuluangel", + "name": "hatorob", "count": 3, "languages": 1 }, { "order": 432, - "name": "matiascba27", + "name": "zuluangel", "count": 3, "languages": 1 }, { "order": 433, - "name": "faga01", + "name": "matiascba27", "count": 3, "languages": 1 }, { "order": 434, - "name": "ahinar", + "name": "faga01", "count": 3, "languages": 1 }, { "order": 435, - "name": "migueltfangche", + "name": "ahinar", "count": 3, "languages": 1 }, { "order": 436, - "name": "josueeeee", + "name": "migueltfangche", "count": 3, "languages": 1 }, { "order": 437, - "name": "emaenriquez", + "name": "josueeeee", "count": 3, "languages": 1 }, { "order": 438, - "name": "sebascmb", + "name": "emaenriquez", "count": 3, "languages": 1 }, { "order": 439, - "name": "gpinedaoviedo", + "name": "sebascmb", "count": 3, "languages": 1 }, { "order": 440, - "name": "blfuentes", + "name": "gpinedaoviedo", "count": 3, "languages": 1 }, { "order": 441, - "name": "javiearth", + "name": "blfuentes", "count": 3, "languages": 1 }, { "order": 442, - "name": "atienzar", + "name": "javiearth", "count": 3, "languages": 1 }, { "order": 443, - "name": "coshiloco", + "name": "atienzar", "count": 3, "languages": 1 }, { "order": 444, - "name": "crisvigas", + "name": "coshiloco", "count": 3, "languages": 1 }, { "order": 445, - "name": "tomytsa", + "name": "crisvigas", "count": 3, "languages": 1 }, { "order": 446, - "name": "rocallejas", + "name": "tomytsa", "count": 3, "languages": 1 }, { "order": 447, - "name": "guido2288", + "name": "rocallejas", "count": 3, "languages": 1 }, { "order": 448, - "name": "githjuan", + "name": "guido2288", "count": 3, "languages": 1 }, { "order": 449, - "name": "jeyker-dev", + "name": "githjuan", "count": 3, "languages": 1 }, { "order": 450, - "name": "eliskopun", + "name": "jeyker-dev", "count": 3, "languages": 1 }, { "order": 451, - "name": "ramon-almeida", + "name": "eliskopun", "count": 3, "languages": 1 }, { "order": 452, - "name": "danielperezrubio", + "name": "ramon-almeida", "count": 3, "languages": 1 }, { "order": 453, - "name": "minn09", + "name": "danielperezrubio", "count": 3, "languages": 1 }, { "order": 454, - "name": "elkin-dev", + "name": "minn09", "count": 3, "languages": 1 }, { "order": 455, - "name": "bertolini-victor", + "name": "elkin-dev", "count": 3, "languages": 1 }, { "order": 456, - "name": "jorgegarcia-dev", + "name": "bertolini-victor", "count": 3, "languages": 1 }, { "order": 457, - "name": "suescun845", + "name": "jorgegarcia-dev", "count": 3, "languages": 1 }, { "order": 458, - "name": "carlosalberto05", + "name": "suescun845", "count": 3, "languages": 1 }, { "order": 459, - "name": "mmacalli", + "name": "carlosalberto05", "count": 3, "languages": 1 }, { "order": 460, - "name": "mstaz4", + "name": "mmacalli", "count": 3, "languages": 1 }, { "order": 461, - "name": "emilianohoyos", + "name": "mstaz4", "count": 3, "languages": 1 }, { "order": 462, - "name": "rgeditv1", + "name": "emilianohoyos", "count": 3, "languages": 1 }, { "order": 463, - "name": "elder202", + "name": "rgeditv1", "count": 3, "languages": 1 }, { "order": 464, - "name": "dandrusco", + "name": "elder202", "count": 3, "languages": 1 }, { "order": 465, - "name": "mizadlogcia", + "name": "dandrusco", "count": 3, "languages": 1 }, { "order": 466, - "name": "antii16", + "name": "mizadlogcia", "count": 3, "languages": 1 }, { "order": 467, - "name": "strooplab", + "name": "antii16", "count": 3, "languages": 1 }, { "order": 468, - "name": "marcoh2325", + "name": "strooplab", "count": 3, "languages": 1 }, { "order": 469, - "name": "frostbitepy", + "name": "marcoh2325", "count": 3, "languages": 1 }, { "order": 470, - "name": "zzepu", + "name": "frostbitepy", "count": 3, "languages": 1 }, { "order": 471, - "name": "tekatoki", + "name": "zzepu", "count": 3, "languages": 1 }, { "order": 472, - "name": "yeam-10", + "name": "tekatoki", "count": 3, "languages": 1 }, { "order": 473, - "name": "exanderguitar", + "name": "yeam-10", "count": 3, "languages": 1 }, { "order": 474, - "name": "camilo-zuluaga", + "name": "exanderguitar", "count": 3, "languages": 1 }, { "order": 475, - "name": "macova96", + "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { "order": 476, - "name": "betzadev", + "name": "macova96", "count": 3, "languages": 1 }, { "order": 477, - "name": "monikgbar", + "name": "betzadev", "count": 3, "languages": 1 }, { "order": 478, - "name": "guillesese", + "name": "monikgbar", "count": 3, "languages": 1 }, { "order": 479, - "name": "artdugarte", + "name": "guillesese", "count": 3, "languages": 1 }, { "order": 480, - "name": "jofedev", + "name": "artdugarte", "count": 3, "languages": 1 }, { "order": 481, - "name": "oscarhub90", + "name": "jofedev", "count": 3, "languages": 1 }, { "order": 482, - "name": "tonywarcode", + "name": "oscarhub90", "count": 3, "languages": 1 }, { "order": 483, - "name": "oscargeovannyrincon", + "name": "tonywarcode", "count": 3, "languages": 1 }, { "order": 484, - "name": "joandevpy", + "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { "order": 485, - "name": "estelacode", + "name": "joandevpy", "count": 3, "languages": 1 }, { "order": 486, - "name": "xurxogz", + "name": "estelacode", "count": 3, "languages": 1 }, { "order": 487, - "name": "freedainew", + "name": "xurxogz", "count": 3, "languages": 1 }, { "order": 488, - "name": "swifty0705", + "name": "freedainew", "count": 3, "languages": 1 }, { "order": 489, - "name": "marce1084", + "name": "swifty0705", "count": 3, "languages": 1 }, { "order": 490, - "name": "oixild", + "name": "marce1084", "count": 3, "languages": 1 }, @@ -3831,985 +3831,985 @@ }, { "order": 559, - "name": "dararod", + "name": "drvito1977", "count": 2, "languages": 1 }, { "order": 560, - "name": "waldid32", + "name": "dararod", "count": 2, "languages": 1 }, { "order": 561, - "name": "reanthonyh", + "name": "waldid32", "count": 2, "languages": 1 }, { "order": 562, - "name": "roilhi", + "name": "reanthonyh", "count": 2, "languages": 1 }, { "order": 563, - "name": "cristiansystem", + "name": "roilhi", "count": 2, "languages": 1 }, { "order": 564, - "name": "evelynnobile", + "name": "cristiansystem", "count": 2, "languages": 1 }, { "order": 565, - "name": "nicolastapiasanz", + "name": "evelynnobile", "count": 2, "languages": 1 }, { "order": 566, - "name": "gomezcamilo9701", + "name": "nicolastapiasanz", "count": 2, "languages": 1 }, { "order": 567, - "name": "vicgallego", + "name": "gomezcamilo9701", "count": 2, "languages": 1 }, { "order": 568, - "name": "freddyasierraj", + "name": "vicgallego", "count": 2, "languages": 1 }, { "order": 569, - "name": "luis-vb", + "name": "freddyasierraj", "count": 2, "languages": 1 }, { "order": 570, - "name": "vikkanh", + "name": "luis-vb", "count": 2, "languages": 1 }, { "order": 571, - "name": "juaruibr", + "name": "vikkanh", "count": 2, "languages": 1 }, { "order": 572, - "name": "crisdev3", + "name": "juaruibr", "count": 2, "languages": 1 }, { "order": 573, - "name": "frealexandro", + "name": "crisdev3", "count": 2, "languages": 1 }, { "order": 574, - "name": "gamitocu", + "name": "frealexandro", "count": 2, "languages": 1 }, { "order": 575, - "name": "saracorraless", + "name": "gamitocu", "count": 2, "languages": 1 }, { "order": 576, - "name": "cesarocbu", + "name": "saracorraless", "count": 2, "languages": 1 }, { "order": 577, - "name": "jeisonredondo", + "name": "cesarocbu", "count": 2, "languages": 1 }, { "order": 578, - "name": "alanox1", + "name": "jeisonredondo", "count": 2, "languages": 1 }, { "order": 579, - "name": "christianumb", + "name": "alanox1", "count": 2, "languages": 1 }, { "order": 580, - "name": "jhonf1992", + "name": "christianumb", "count": 2, "languages": 1 }, { "order": 581, - "name": "k4rv3r", + "name": "jhonf1992", "count": 2, "languages": 1 }, { "order": 582, - "name": "rikar2o", + "name": "k4rv3r", "count": 2, "languages": 1 }, { "order": 583, - "name": "rolo27s", + "name": "rikar2o", "count": 2, "languages": 1 }, { "order": 584, - "name": "franciscocuminilondero", + "name": "rolo27s", "count": 2, "languages": 1 }, { "order": 585, - "name": "wesborland-github", + "name": "franciscocuminilondero", "count": 2, "languages": 1 }, { "order": 586, - "name": "doblea74", + "name": "wesborland-github", "count": 2, "languages": 1 }, { "order": 587, - "name": "matiasfarfan89", + "name": "doblea74", "count": 2, "languages": 1 }, { "order": 588, - "name": "nxl22", + "name": "matiasfarfan89", "count": 2, "languages": 1 }, { "order": 589, - "name": "valeriatorrealba", + "name": "nxl22", "count": 2, "languages": 1 }, { "order": 590, - "name": "farthaz", + "name": "valeriatorrealba", "count": 2, "languages": 1 }, { "order": 591, - "name": "aleoe01", + "name": "farthaz", "count": 2, "languages": 1 }, { "order": 592, - "name": "jaimemunozdev", + "name": "aleoe01", "count": 2, "languages": 1 }, { "order": 593, - "name": "miguelrejon96", + "name": "jaimemunozdev", "count": 2, "languages": 1 }, { "order": 594, - "name": "jorge186414", + "name": "miguelrejon96", "count": 2, "languages": 1 }, { "order": 595, - "name": "andnikdev", + "name": "jorge186414", "count": 2, "languages": 1 }, { "order": 596, - "name": "soldochris", + "name": "andnikdev", "count": 2, "languages": 1 }, { "order": 597, - "name": "leonardo291024", + "name": "soldochris", "count": 2, "languages": 1 }, { "order": 598, - "name": "mickel-arroz", + "name": "leonardo291024", "count": 2, "languages": 1 }, { "order": 599, - "name": "gianbordon", + "name": "mickel-arroz", "count": 2, "languages": 1 }, { "order": 600, - "name": "cpcarlosprieto", + "name": "gianbordon", "count": 2, "languages": 1 }, { "order": 601, - "name": "juangomezn", + "name": "cpcarlosprieto", "count": 2, "languages": 1 }, { "order": 602, - "name": "angelvelasco1", + "name": "juangomezn", "count": 2, "languages": 1 }, { "order": 603, - "name": "ssanjua", + "name": "angelvelasco1", "count": 2, "languages": 1 }, { "order": 604, - "name": "murquisdev", + "name": "ssanjua", "count": 2, "languages": 1 }, { "order": 605, - "name": "davhage", + "name": "murquisdev", "count": 2, "languages": 1 }, { "order": 606, - "name": "erikayeah", + "name": "davhage", "count": 2, "languages": 1 }, { "order": 607, - "name": "misterdan100", + "name": "erikayeah", "count": 2, "languages": 1 }, { "order": 608, - "name": "memogv", + "name": "misterdan100", "count": 2, "languages": 1 }, { "order": 609, - "name": "glaboryp", + "name": "memogv", "count": 2, "languages": 1 }, { "order": 610, - "name": "ovjohn", + "name": "glaboryp", "count": 2, "languages": 1 }, { "order": 611, - "name": "haryblanco20", + "name": "ovjohn", "count": 2, "languages": 1 }, { "order": 612, - "name": "christianhernandezb", + "name": "haryblanco20", "count": 2, "languages": 1 }, { "order": 613, - "name": "akzorla", + "name": "christianhernandezb", "count": 2, "languages": 1 }, { "order": 614, - "name": "0pio", + "name": "akzorla", "count": 2, "languages": 1 }, { "order": 615, - "name": "porto1090", + "name": "0pio", "count": 2, "languages": 1 }, { "order": 616, - "name": "johannhsdev", + "name": "porto1090", "count": 2, "languages": 1 }, { "order": 617, - "name": "jago86", + "name": "johannhsdev", "count": 2, "languages": 1 }, { "order": 618, - "name": "diegokarabin", + "name": "jago86", "count": 2, "languages": 1 }, { "order": 619, - "name": "gugliio", + "name": "diegokarabin", "count": 2, "languages": 1 }, { "order": 620, - "name": "kcx46", + "name": "gugliio", "count": 2, "languages": 1 }, { "order": 621, - "name": "nachodev7", + "name": "kcx46", "count": 2, "languages": 1 }, { "order": 622, - "name": "fernandoatello", + "name": "nachodev7", "count": 2, "languages": 1 }, { "order": 623, - "name": "pablosalme", + "name": "fernandoatello", "count": 2, "languages": 1 }, { "order": 624, - "name": "jsacristanbeltri", + "name": "pablosalme", "count": 2, "languages": 1 }, { "order": 625, - "name": "baauus", + "name": "jsacristanbeltri", "count": 2, "languages": 1 }, { "order": 626, - "name": "s384", + "name": "baauus", "count": 2, "languages": 1 }, { "order": 627, - "name": "lauradiazm29", + "name": "s384", "count": 2, "languages": 1 }, { "order": 628, - "name": "pakomor", + "name": "lauradiazm29", "count": 2, "languages": 1 }, { "order": 629, - "name": "adogdev", + "name": "pakomor", "count": 2, "languages": 1 }, { "order": 630, - "name": "eriickm", + "name": "adogdev", "count": 2, "languages": 1 }, { "order": 631, - "name": "christiancoc", + "name": "eriickm", "count": 2, "languages": 1 }, { "order": 632, - "name": "rojasricoo", + "name": "christiancoc", "count": 2, "languages": 1 }, { "order": 633, - "name": "inf015", + "name": "rojasricoo", "count": 2, "languages": 1 }, { "order": 634, - "name": "csaraugusto2", + "name": "inf015", "count": 2, "languages": 1 }, { "order": 635, - "name": "zalazarmartin", + "name": "csaraugusto2", "count": 2, "languages": 1 }, { "order": 636, - "name": "ziellucio01", + "name": "zalazarmartin", "count": 2, "languages": 1 }, { "order": 637, - "name": "dota43ver", + "name": "ziellucio01", "count": 2, "languages": 1 }, { "order": 638, - "name": "fjsubero", + "name": "dota43ver", "count": 2, "languages": 1 }, { "order": 639, - "name": "julind0", + "name": "fjsubero", "count": 2, "languages": 1 }, { "order": 640, - "name": "dariangl", + "name": "julind0", "count": 2, "languages": 1 }, { "order": 641, - "name": "ggtorca", + "name": "dariangl", "count": 2, "languages": 1 }, { "order": 642, - "name": "soydaviddev", + "name": "ggtorca", "count": 2, "languages": 1 }, { "order": 643, - "name": "e-techgod", + "name": "soydaviddev", "count": 2, "languages": 1 }, { "order": 644, - "name": "aboredllama", + "name": "e-techgod", "count": 2, "languages": 1 }, { "order": 645, - "name": "nevaito", + "name": "aboredllama", "count": 2, "languages": 1 }, { "order": 646, - "name": "nach012", + "name": "nevaito", "count": 2, "languages": 1 }, { "order": 647, - "name": "dans182", + "name": "nach012", "count": 2, "languages": 1 }, { "order": 648, - "name": "freyfonseca", + "name": "dans182", "count": 2, "languages": 1 }, { "order": 649, - "name": "aegpgrafologo", + "name": "freyfonseca", "count": 2, "languages": 1 }, { "order": 650, - "name": "alejandrovelasquezr", + "name": "aegpgrafologo", "count": 2, "languages": 1 }, { "order": 651, - "name": "fabianpa505", + "name": "alejandrovelasquezr", "count": 2, "languages": 1 }, { "order": 652, - "name": "carlosmarte23", + "name": "fabianpa505", "count": 2, "languages": 1 }, { "order": 653, - "name": "anblackter", + "name": "carlosmarte23", "count": 2, "languages": 1 }, { "order": 654, - "name": "tic4", + "name": "anblackter", "count": 2, "languages": 1 }, { "order": 655, - "name": "josephfaster", + "name": "tic4", "count": 2, "languages": 1 }, { "order": 656, - "name": "gregfc95", + "name": "josephfaster", "count": 2, "languages": 1 }, { "order": 657, - "name": "victore16", + "name": "gregfc95", "count": 2, "languages": 1 }, { "order": 658, - "name": "dokeys28", + "name": "victore16", "count": 2, "languages": 1 }, { "order": 659, - "name": "noaregui", + "name": "dokeys28", "count": 2, "languages": 1 }, { "order": 660, - "name": "alejandro-mantilla", + "name": "noaregui", "count": 2, "languages": 1 }, { "order": 661, - "name": "gmigues", + "name": "alejandro-mantilla", "count": 2, "languages": 1 }, { "order": 662, - "name": "juanseevn", + "name": "gmigues", "count": 2, "languages": 1 }, { "order": 663, - "name": "vesubius", + "name": "juanseevn", "count": 2, "languages": 1 }, { "order": 664, - "name": "zeti1231", + "name": "vesubius", "count": 2, "languages": 1 }, { "order": 665, - "name": "cipollalucas", + "name": "zeti1231", "count": 2, "languages": 1 }, { "order": 666, - "name": "miguelberrio0810", + "name": "cipollalucas", "count": 2, "languages": 1 }, { "order": 667, - "name": "santiagodc8", + "name": "miguelberrio0810", "count": 2, "languages": 1 }, { "order": 668, - "name": "pedrojog", + "name": "santiagodc8", "count": 2, "languages": 1 }, { "order": 669, - "name": "culebropalido", + "name": "pedrojog", "count": 2, "languages": 1 }, { "order": 670, - "name": "marioyellowy", + "name": "culebropalido", "count": 2, "languages": 1 }, { "order": 671, - "name": "jcknot", + "name": "marioyellowy", "count": 2, "languages": 1 }, { "order": 672, - "name": "peeanoot", + "name": "jcknot", "count": 2, "languages": 1 }, { "order": 673, - "name": "coronelsam", + "name": "peeanoot", "count": 2, "languages": 1 }, { "order": 674, - "name": "arhl2023", + "name": "coronelsam", "count": 2, "languages": 1 }, { "order": 675, - "name": "marianoemir", + "name": "arhl2023", "count": 2, "languages": 1 }, { "order": 676, - "name": "isidrojng", + "name": "marianoemir", "count": 2, "languages": 1 }, { "order": 677, - "name": "anaroncero", + "name": "isidrojng", "count": 2, "languages": 1 }, { "order": 678, - "name": "hersac", + "name": "anaroncero", "count": 2, "languages": 1 }, { "order": 679, - "name": "vecinacoo", + "name": "hersac", "count": 2, "languages": 1 }, { "order": 680, - "name": "juanmjimenezs", + "name": "vecinacoo", "count": 2, "languages": 1 }, { "order": 681, - "name": "armentaangel", + "name": "juanmjimenezs", "count": 2, "languages": 1 }, { "order": 682, - "name": "lordzzz777", + "name": "armentaangel", "count": 2, "languages": 1 }, { "order": 683, - "name": "sdm29gh", + "name": "lordzzz777", "count": 2, "languages": 1 }, { "order": 684, - "name": "zonnen69", + "name": "sdm29gh", "count": 2, "languages": 1 }, { "order": 685, - "name": "jmichael39", + "name": "zonnen69", "count": 2, "languages": 1 }, { "order": 686, - "name": "davidvilem", + "name": "jmichael39", "count": 2, "languages": 1 }, { "order": 687, - "name": "torvicv", - "count": 1, + "name": "davidvilem", + "count": 2, "languages": 1 }, { "order": 688, - "name": "dgquintero", + "name": "torvicv", "count": 1, "languages": 1 }, { "order": 689, - "name": "c-blskv", + "name": "dgquintero", "count": 1, "languages": 1 }, { "order": 690, - "name": "emaerniquez", + "name": "c-blskv", "count": 1, "languages": 1 }, { "order": 691, - "name": "carolhs92", + "name": "emaerniquez", "count": 1, "languages": 1 }, { "order": 692, - "name": "leonardo-henao", + "name": "carolhs92", "count": 1, "languages": 1 }, { "order": 693, - "name": "juancamilofvx", + "name": "leonardo-henao", "count": 1, "languages": 1 }, { "order": 694, - "name": "vikernes27666", + "name": "juancamilofvx", "count": 1, "languages": 1 }, { "order": 695, - "name": "cub-tor", + "name": "vikernes27666", "count": 1, "languages": 1 }, { "order": 696, - "name": "nightmare79", + "name": "cub-tor", "count": 1, "languages": 1 }, { "order": 697, - "name": "carlosmperezm", + "name": "nightmare79", "count": 1, "languages": 1 }, { "order": 698, - "name": "gonzalinuz18", + "name": "carlosmperezm", "count": 1, "languages": 1 }, { "order": 699, - "name": "qwik-zghieb", + "name": "gonzalinuz18", "count": 1, "languages": 1 }, { "order": 700, - "name": "miquelrr", + "name": "qwik-zghieb", "count": 1, "languages": 1 }, { "order": 701, - "name": "miguel2rar", + "name": "miquelrr", "count": 1, "languages": 1 }, { "order": 702, - "name": "eamartin", + "name": "miguel2rar", "count": 1, "languages": 1 }, { "order": 703, - "name": "gabriel-dangelo", + "name": "eamartin", "count": 1, "languages": 1 }, { "order": 704, - "name": "agustinfccll", + "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { "order": 705, - "name": "anitandil", + "name": "agustinfccll", "count": 1, "languages": 1 }, { "order": 706, - "name": "evilpodato04", + "name": "anitandil", "count": 1, "languages": 1 }, { "order": 707, - "name": "francomyburg", + "name": "evilpodato04", "count": 1, "languages": 1 }, { "order": 708, - "name": "neicervb", + "name": "francomyburg", "count": 1, "languages": 1 }, { "order": 709, - "name": "josephinoo", + "name": "neicervb", "count": 1, "languages": 1 }, { "order": 710, - "name": "arathhh8", + "name": "josephinoo", "count": 1, "languages": 1 }, { "order": 711, - "name": "paluzz", + "name": "arathhh8", "count": 1, "languages": 1 }, { "order": 712, - "name": "theposi", + "name": "paluzz", "count": 1, "languages": 1 }, { "order": 713, - "name": "vinyoles", + "name": "theposi", "count": 1, "languages": 1 }, { "order": 714, - "name": "omarroman29", + "name": "vinyoles", "count": 1, "languages": 1 }, { "order": 715, - "name": "sergio-strazzacappa", + "name": "omarroman29", "count": 1, "languages": 1 }, { "order": 716, - "name": "corvo-99", + "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { "order": 717, - "name": "danielcastillo1112", + "name": "corvo-99", "count": 1, "languages": 1 }, { "order": 718, - "name": "malkarmah", + "name": "danielcastillo1112", "count": 1, "languages": 1 }, { "order": 719, - "name": "sirvega83", + "name": "malkarmah", "count": 1, "languages": 1 }, { "order": 720, - "name": "franpua", + "name": "sirvega83", "count": 1, "languages": 1 }, { "order": 721, - "name": "van-02", + "name": "franpua", "count": 1, "languages": 1 }, { "order": 722, - "name": "drvito1977", + "name": "van-02", "count": 1, "languages": 1 }, @@ -4905,2460 +4905,2478 @@ }, { "order": 738, - "name": "rulo77", + "name": "feliaguirre7", "count": 1, "languages": 1 }, { "order": 739, - "name": "is2095", + "name": "rulo77", "count": 1, "languages": 1 }, { "order": 740, - "name": "jancalos", + "name": "is2095", "count": 1, "languages": 1 }, { "order": 741, - "name": "marcosapodaca", + "name": "jancalos", "count": 1, "languages": 1 }, { "order": 742, - "name": "angelcruzg23", + "name": "marcosapodaca", "count": 1, "languages": 1 }, { "order": 743, - "name": "ca2puntosv", + "name": "angelcruzg23", "count": 1, "languages": 1 }, { "order": 744, - "name": "armm77", + "name": "ca2puntosv", "count": 1, "languages": 1 }, { "order": 745, - "name": "afacorroloscos", + "name": "armm77", "count": 1, "languages": 1 }, { "order": 746, - "name": "rocadev2714", + "name": "afacorroloscos", "count": 1, "languages": 1 }, { "order": 747, - "name": "chrisfelixgil", + "name": "rocadev2714", "count": 1, "languages": 1 }, { "order": 748, - "name": "sandrarg85", + "name": "chrisfelixgil", "count": 1, "languages": 1 }, { "order": 749, - "name": "rootqui", + "name": "sandrarg85", "count": 1, "languages": 1 }, { "order": 750, - "name": "ishimaku", + "name": "rootqui", "count": 1, "languages": 1 }, { "order": 751, - "name": "pkmaventura", + "name": "ishimaku", "count": 1, "languages": 1 }, { "order": 752, - "name": "miguelgargallo", + "name": "pkmaventura", "count": 1, "languages": 1 }, { "order": 753, - "name": "astriebeck", + "name": "miguelgargallo", "count": 1, "languages": 1 }, { "order": 754, - "name": "lobogeekmx", + "name": "astriebeck", "count": 1, "languages": 1 }, { "order": 755, - "name": "marvinagui", + "name": "lobogeekmx", "count": 1, "languages": 1 }, { "order": 756, - "name": "marqitos", + "name": "marvinagui", "count": 1, "languages": 1 }, { "order": 757, - "name": "nunezlagos", + "name": "marqitos", "count": 1, "languages": 1 }, { "order": 758, - "name": "jcrobles99", + "name": "nunezlagos", "count": 1, "languages": 1 }, { "order": 759, - "name": "ledyam", + "name": "jcrobles99", "count": 1, "languages": 1 }, { "order": 760, - "name": "jatomas", + "name": "ledyam", "count": 1, "languages": 1 }, { "order": 761, - "name": "jaennova", + "name": "jatomas", "count": 1, "languages": 1 }, { "order": 762, - "name": "luisalberto22", + "name": "jaennova", "count": 1, "languages": 1 }, { "order": 763, - "name": "francisleble", + "name": "luisalberto22", "count": 1, "languages": 1 }, { "order": 764, - "name": "deiiviitdev", + "name": "francisleble", "count": 1, "languages": 1 }, { "order": 765, - "name": "braiso-22", + "name": "deiiviitdev", "count": 1, "languages": 1 }, { "order": 766, - "name": "daniel-cas", + "name": "braiso-22", "count": 1, "languages": 1 }, { "order": 767, + "name": "daniel-cas", + "count": 1, + "languages": 1 + }, + { + "order": 768, "name": "acirdevelper", "count": 1, "languages": 1 }, { - "order": 768, + "order": 769, "name": "borjadelgadodev", "count": 1, "languages": 1 }, { - "order": 769, + "order": 770, "name": "elpeque29", "count": 1, "languages": 1 }, { - "order": 770, + "order": 771, "name": "jhordanluyo", "count": 1, "languages": 1 }, { - "order": 771, + "order": 772, "name": "davidcv-dev", "count": 1, "languages": 1 }, { - "order": 772, + "order": 773, "name": "mbmaeso", "count": 1, "languages": 1 }, { - "order": 773, + "order": 774, "name": "alvarominarro", "count": 1, "languages": 1 }, { - "order": 774, + "order": 775, "name": "bjchavez", "count": 1, "languages": 1 }, { - "order": 775, + "order": 776, "name": "madelefonb", "count": 1, "languages": 1 }, { - "order": 776, + "order": 777, "name": "lfwzk", "count": 1, "languages": 1 }, { - "order": 777, + "order": 778, "name": "ercky1980", "count": 1, "languages": 1 }, { - "order": 778, + "order": 779, "name": "jsruedatorres", "count": 1, "languages": 1 }, { - "order": 779, + "order": 780, "name": "jacobrwx", "count": 1, "languages": 1 }, { - "order": 780, + "order": 781, "name": "abengl", "count": 1, "languages": 1 }, { - "order": 781, + "order": 782, "name": "jd-gm", "count": 1, "languages": 1 }, { - "order": 782, + "order": 783, "name": "lucianogriffa", "count": 1, "languages": 1 }, { - "order": 783, + "order": 784, "name": "quirogapau", "count": 1, "languages": 1 }, { - "order": 784, + "order": 785, "name": "joseperesini", "count": 1, "languages": 1 }, { - "order": 785, + "order": 786, "name": "mhrosariom", "count": 1, "languages": 1 }, { - "order": 786, + "order": 787, "name": "sergioab7", "count": 1, "languages": 1 }, { - "order": 787, + "order": 788, "name": "santaravena", "count": 1, "languages": 1 }, { - "order": 788, + "order": 789, "name": "datrujillog", "count": 1, "languages": 1 }, { - "order": 789, + "order": 790, "name": "johnniew81", "count": 1, "languages": 1 }, { - "order": 790, + "order": 791, "name": "chriszaldana", "count": 1, "languages": 1 }, { - "order": 791, + "order": 792, "name": "antonioverdugo", "count": 1, "languages": 1 }, { - "order": 792, + "order": 793, "name": "kronomio", "count": 1, "languages": 1 }, { - "order": 793, + "order": 794, "name": "kevinramirez28", "count": 1, "languages": 1 }, { - "order": 794, + "order": 795, "name": "juanpablo-a", "count": 1, "languages": 1 }, { - "order": 795, + "order": 796, "name": "gerespinosa", "count": 1, "languages": 1 }, { - "order": 796, + "order": 797, "name": "1978acb", "count": 1, "languages": 1 }, { - "order": 797, + "order": 798, "name": "alexxawada", "count": 1, "languages": 1 }, { - "order": 798, + "order": 799, "name": "ricarsur", "count": 1, "languages": 1 }, { - "order": 799, + "order": 800, "name": "alemar16", "count": 1, "languages": 1 }, { - "order": 800, + "order": 801, "name": "pointfs", "count": 1, "languages": 1 }, { - "order": 801, + "order": 802, "name": "edperez07", "count": 1, "languages": 1 }, { - "order": 802, + "order": 803, "name": "dacronik", "count": 1, "languages": 1 }, { - "order": 803, + "order": 804, "name": "abraham9804", "count": 1, "languages": 1 }, { - "order": 804, + "order": 805, "name": "afl0r3s", "count": 1, "languages": 1 }, { - "order": 805, + "order": 806, "name": "dianelis1", "count": 1, "languages": 1 }, { - "order": 806, + "order": 807, "name": "fernandofl", "count": 1, "languages": 1 }, { - "order": 807, + "order": 808, "name": "conrado85", "count": 1, "languages": 1 }, { - "order": 808, + "order": 809, "name": "agus-ig", "count": 1, "languages": 1 }, { - "order": 809, + "order": 810, "name": "alvarommedia", "count": 1, "languages": 1 }, { - "order": 810, + "order": 811, "name": "maximotoro", "count": 1, "languages": 1 }, { - "order": 811, + "order": 812, "name": "m4xisil", "count": 1, "languages": 1 }, { - "order": 812, + "order": 813, "name": "francomoreira", "count": 1, "languages": 1 }, { - "order": 813, + "order": 814, "name": "aleclto7", "count": 1, "languages": 1 }, { - "order": 814, + "order": 815, "name": "nnunezmedina", "count": 1, "languages": 1 }, { - "order": 815, + "order": 816, "name": "codejoss", "count": 1, "languages": 1 }, { - "order": 816, + "order": 817, "name": "yaojema", "count": 1, "languages": 1 }, { - "order": 817, + "order": 818, "name": "romanocoder", "count": 1, "languages": 1 }, { - "order": 818, + "order": 819, "name": "sixtodev", "count": 1, "languages": 1 }, { - "order": 819, + "order": 820, "name": "cgomezadolfo", "count": 1, "languages": 1 }, { - "order": 820, + "order": 821, "name": "rojasvargas", "count": 1, "languages": 1 }, { - "order": 821, + "order": 822, "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { - "order": 822, + "order": 823, "name": "l3v1xx", "count": 1, "languages": 1 }, { - "order": 823, + "order": 824, "name": "patricioguerra30", "count": 1, "languages": 1 }, { - "order": 824, + "order": 825, "name": "lytsar", "count": 1, "languages": 1 }, { - "order": 825, + "order": 826, "name": "siuldev", "count": 1, "languages": 1 }, { - "order": 826, + "order": 827, "name": "brayancordova1", "count": 1, "languages": 1 }, { - "order": 827, + "order": 828, "name": "ronnieruuz", "count": 1, "languages": 1 }, { - "order": 828, + "order": 829, "name": "yessikamichelle", "count": 1, "languages": 1 }, { - "order": 829, + "order": 830, "name": "vainsito1", "count": 1, "languages": 1 }, { - "order": 830, + "order": 831, "name": "oscarletelier", "count": 1, "languages": 1 }, { - "order": 831, + "order": 832, "name": "kocho03", "count": 1, "languages": 1 }, { - "order": 832, + "order": 833, "name": "aidicoop", "count": 1, "languages": 1 }, { - "order": 833, + "order": 834, "name": "albabp", "count": 1, "languages": 1 }, { - "order": 834, + "order": 835, "name": "nozodev", "count": 1, "languages": 1 }, { - "order": 835, + "order": 836, "name": "mvillegas18", "count": 1, "languages": 1 }, { - "order": 836, + "order": 837, "name": "augustbs", "count": 1, "languages": 1 }, { - "order": 837, + "order": 838, "name": "luchof5", "count": 1, "languages": 1 }, { - "order": 838, + "order": 839, "name": "fullstackarlo", "count": 1, "languages": 1 }, { - "order": 839, + "order": 840, "name": "mdemena", "count": 1, "languages": 1 }, { - "order": 840, + "order": 841, "name": "cliverjimny123", "count": 1, "languages": 1 }, { - "order": 841, + "order": 842, "name": "rodmiggithub", "count": 1, "languages": 1 }, { - "order": 842, + "order": 843, "name": "s9code", "count": 1, "languages": 1 }, { - "order": 843, + "order": 844, "name": "javieradev", "count": 1, "languages": 1 }, { - "order": 844, + "order": 845, "name": "xnomada", "count": 1, "languages": 1 }, { - "order": 845, + "order": 846, "name": "miguelsarm", "count": 1, "languages": 1 }, { - "order": 846, + "order": 847, "name": "royhuamanavila", "count": 1, "languages": 1 }, { - "order": 847, + "order": 848, "name": "imista", "count": 1, "languages": 1 }, { - "order": 848, + "order": 849, "name": "denisortega", "count": 1, "languages": 1 }, { - "order": 849, + "order": 850, "name": "kouski", "count": 1, "languages": 1 }, { - "order": 850, + "order": 851, "name": "leydimadrid", "count": 1, "languages": 1 }, { - "order": 851, + "order": 852, "name": "frannm29", "count": 1, "languages": 1 }, { - "order": 852, + "order": 853, "name": "saintsluis", "count": 1, "languages": 1 }, { - "order": 853, + "order": 854, "name": "gc796", "count": 1, "languages": 1 }, { - "order": 854, + "order": 855, "name": "pierre-ol", "count": 1, "languages": 1 }, { - "order": 855, + "order": 856, "name": "francescoalterio", "count": 1, "languages": 1 }, { - "order": 856, + "order": 857, "name": "gustavoguerrero", "count": 1, "languages": 1 }, { - "order": 857, + "order": 858, "name": "diegoxxd", "count": 1, "languages": 1 }, { - "order": 858, + "order": 859, "name": "walkerlyna", "count": 1, "languages": 1 }, { - "order": 859, + "order": 860, "name": "sejotaz", "count": 1, "languages": 1 }, { - "order": 860, + "order": 861, "name": "duendeintemporal", "count": 1, "languages": 1 }, { - "order": 861, + "order": 862, "name": "frcan89", "count": 1, "languages": 1 }, { - "order": 862, + "order": 863, "name": "nicorey89", "count": 1, "languages": 1 }, { - "order": 863, + "order": 864, "name": "alexis0717", "count": 1, "languages": 1 }, { - "order": 864, + "order": 865, "name": "edgonzz", "count": 1, "languages": 1 }, { - "order": 865, + "order": 866, "name": "vmga09", "count": 1, "languages": 1 }, { - "order": 866, + "order": 867, "name": "lfam200", "count": 1, "languages": 1 }, { - "order": 867, + "order": 868, "name": "kenzambrano", "count": 1, "languages": 1 }, { - "order": 868, + "order": 869, "name": "dmhenaopa", "count": 1, "languages": 1 }, { - "order": 869, + "order": 870, "name": "jpiacaruso", "count": 1, "languages": 1 }, { - "order": 870, + "order": 871, "name": "isnatthy", "count": 1, "languages": 1 }, { - "order": 871, + "order": 872, "name": "peticas", "count": 1, "languages": 1 }, { - "order": 872, + "order": 873, "name": "flarien", "count": 1, "languages": 1 }, { - "order": 873, + "order": 874, "name": "franciscokarriere", "count": 1, "languages": 1 }, { - "order": 874, + "order": 875, "name": "pipeyz21", "count": 1, "languages": 1 }, { - "order": 875, + "order": 876, "name": "luisgarm", "count": 1, "languages": 1 }, { - "order": 876, + "order": 877, "name": "tetotille", "count": 1, "languages": 1 }, { - "order": 877, + "order": 878, "name": "vorosdev", "count": 1, "languages": 1 }, { - "order": 878, + "order": 879, "name": "santiagomac", "count": 1, "languages": 1 }, { - "order": 879, + "order": 880, "name": "implevacui", "count": 1, "languages": 1 }, { - "order": 880, + "order": 881, "name": "fede6299", "count": 1, "languages": 1 }, { - "order": 881, + "order": 882, "name": "kevin05m", "count": 1, "languages": 1 }, { - "order": 882, + "order": 883, "name": "diegomm27", "count": 1, "languages": 1 }, { - "order": 883, + "order": 884, "name": "pablo-lnx", "count": 1, "languages": 1 }, { - "order": 884, + "order": 885, "name": "darkohokage", "count": 1, "languages": 1 }, { - "order": 885, + "order": 886, "name": "jhonnfl", "count": 1, "languages": 1 }, { - "order": 886, + "order": 887, "name": "jarzatedev", "count": 1, "languages": 1 }, { - "order": 887, + "order": 888, "name": "brunom-93", "count": 1, "languages": 1 }, { - "order": 888, + "order": 889, "name": "alejandroruiz23", "count": 1, "languages": 1 }, { - "order": 889, + "order": 890, "name": "trollface77", "count": 1, "languages": 1 }, { - "order": 890, + "order": 891, "name": "jaimesoftdev", "count": 1, "languages": 1 }, { - "order": 891, + "order": 892, "name": "edm1ya", "count": 1, "languages": 1 }, { - "order": 892, + "order": 893, "name": "tartabullroberto", "count": 1, "languages": 1 }, { - "order": 893, + "order": 894, "name": "serg-pq", "count": 1, "languages": 1 }, { - "order": 894, + "order": 895, "name": "lara-vel-dev", "count": 1, "languages": 1 }, { - "order": 895, + "order": 896, "name": "alexisbarradev", "count": 1, "languages": 1 }, { - "order": 896, + "order": 897, "name": "kelvincb", "count": 1, "languages": 1 }, { - "order": 897, + "order": 898, "name": "carlostoledoe", "count": 1, "languages": 1 }, { - "order": 898, + "order": 899, "name": "gilbertho502", "count": 1, "languages": 1 }, { - "order": 899, + "order": 900, "name": "v0l0v", "count": 1, "languages": 1 }, { - "order": 900, + "order": 901, "name": "johao23", "count": 1, "languages": 1 }, { - "order": 901, + "order": 902, "name": "geridage", "count": 1, "languages": 1 }, { - "order": 902, + "order": 903, "name": "vmarialuzm", "count": 1, "languages": 1 }, { - "order": 903, + "order": 904, "name": "snowcardenas", "count": 1, "languages": 1 }, { - "order": 904, + "order": 905, "name": "and-y21", "count": 1, "languages": 1 }, { - "order": 905, + "order": 906, "name": "arturodlapaz17", "count": 1, "languages": 1 }, { - "order": 906, + "order": 907, "name": "manuu42", "count": 1, "languages": 1 }, { - "order": 907, + "order": 908, "name": "howlett9999", "count": 1, "languages": 1 }, { - "order": 908, + "order": 909, "name": "hnaranjog", "count": 1, "languages": 1 }, { - "order": 909, + "order": 910, "name": "wallsified", "count": 1, "languages": 1 }, { - "order": 910, + "order": 911, "name": "lluistech", "count": 1, "languages": 1 }, { - "order": 911, + "order": 912, "name": "mamartinez14", "count": 1, "languages": 1 }, { - "order": 912, + "order": 913, "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { - "order": 913, + "order": 914, "name": "bassalex27", "count": 1, "languages": 1 }, { - "order": 914, + "order": 915, "name": "yetlanezils", "count": 1, "languages": 1 }, { - "order": 915, + "order": 916, "name": "ndepaul82", "count": 1, "languages": 1 }, { - "order": 916, + "order": 917, "name": "amitchellg", "count": 1, "languages": 1 }, { - "order": 917, + "order": 918, "name": "turudev1979", "count": 1, "languages": 1 }, { - "order": 918, + "order": 919, "name": "deivimiller", "count": 1, "languages": 1 }, { - "order": 919, + "order": 920, + "name": "haroldalb", + "count": 1, + "languages": 1 + }, + { + "order": 921, "name": "dakkaj", "count": 1, "languages": 1 }, { - "order": 920, + "order": 922, "name": "juli-m4", "count": 1, "languages": 1 }, { - "order": 921, + "order": 923, "name": "sergiomhernandez", "count": 1, "languages": 1 }, { - "order": 922, + "order": 924, "name": "masenace", "count": 1, "languages": 1 }, { - "order": 923, + "order": 925, "name": "e-xtian", "count": 1, "languages": 1 }, { - "order": 924, + "order": 926, "name": "vickalck", "count": 1, "languages": 1 }, { - "order": 925, + "order": 927, "name": "gmedinat911", "count": 1, "languages": 1 }, { - "order": 926, + "order": 928, "name": "eljavi0", "count": 1, "languages": 1 }, { - "order": 927, + "order": 929, "name": "yeisongil", "count": 1, "languages": 1 }, { - "order": 928, + "order": 930, "name": "julioorozco05", "count": 1, "languages": 1 }, { - "order": 929, + "order": 931, "name": "fergz1988", "count": 1, "languages": 1 }, { - "order": 930, + "order": 932, "name": "marcos0803", "count": 1, "languages": 1 }, { - "order": 931, + "order": 933, "name": "xcortes", "count": 1, "languages": 1 }, { - "order": 932, + "order": 934, "name": "facundorsabia", "count": 1, "languages": 1 }, { - "order": 933, + "order": 935, "name": "nico70012", "count": 1, "languages": 1 }, { - "order": 934, + "order": 936, "name": "charly024", "count": 1, "languages": 1 }, { - "order": 935, + "order": 937, "name": "devjerez", "count": 1, "languages": 1 }, { - "order": 936, + "order": 938, "name": "gersonoroz", "count": 1, "languages": 1 }, { - "order": 937, + "order": 939, "name": "jafuma0320", "count": 1, "languages": 1 }, { - "order": 938, + "order": 940, "name": "g4nd4lf", "count": 1, "languages": 1 }, { - "order": 939, + "order": 941, "name": "obed-tc", "count": 1, "languages": 1 }, { - "order": 940, + "order": 942, "name": "devkenn", "count": 1, "languages": 1 }, { - "order": 941, + "order": 943, "name": "xalejandrow", "count": 1, "languages": 1 }, { - "order": 942, + "order": 944, "name": "henrydavidprimera", "count": 1, "languages": 1 }, { - "order": 943, + "order": 945, "name": "luceldasilva", "count": 1, "languages": 1 }, { - "order": 944, + "order": 946, "name": "mjordanaam", "count": 1, "languages": 1 }, { - "order": 945, + "order": 947, "name": "betulioo", "count": 1, "languages": 1 }, { - "order": 946, + "order": 948, "name": "judithernandez", "count": 1, "languages": 1 }, { - "order": 947, + "order": 949, "name": "dimanu-py", "count": 1, "languages": 1 }, { - "order": 948, + "order": 950, "name": "snowale", "count": 1, "languages": 1 }, { - "order": 949, + "order": 951, "name": "cd1974", "count": 1, "languages": 1 }, { - "order": 950, + "order": 952, "name": "acobo3", "count": 1, "languages": 1 }, { - "order": 951, + "order": 953, "name": "isaacdci", "count": 1, "languages": 1 }, { - "order": 952, + "order": 954, + "name": "manueldenisdev", + "count": 1, + "languages": 1 + }, + { + "order": 955, "name": "anexo01", "count": 1, "languages": 1 }, { - "order": 953, + "order": 956, "name": "yamiyugi25", "count": 1, "languages": 1 }, { - "order": 954, + "order": 957, "name": "gl-informatica", "count": 1, "languages": 1 }, { - "order": 955, + "order": 958, "name": "miguelmancebo", "count": 1, "languages": 1 }, { - "order": 956, + "order": 959, "name": "neusier101", "count": 1, "languages": 1 }, { - "order": 957, + "order": 960, "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { - "order": 958, + "order": 961, "name": "xhinto", "count": 1, "languages": 1 }, { - "order": 959, + "order": 962, "name": "dacaldev", "count": 1, "languages": 1 }, { - "order": 960, + "order": 963, "name": "juan-cruz01", "count": 1, "languages": 1 }, { - "order": 961, + "order": 964, "name": "juanalbornoz32", "count": 1, "languages": 1 }, { - "order": 962, + "order": 965, "name": "cisneros2404", "count": 1, "languages": 1 }, { - "order": 963, + "order": 966, "name": "neftalyr", "count": 1, "languages": 1 }, { - "order": 964, + "order": 967, "name": "latorredev", "count": 1, "languages": 1 }, { - "order": 965, + "order": 968, "name": "osneidert", "count": 1, "languages": 1 }, { - "order": 966, + "order": 969, "name": "jrgranadosb", "count": 1, "languages": 1 }, { - "order": 967, + "order": 970, "name": "vicvilla30", "count": 1, "languages": 1 }, { - "order": 968, + "order": 971, "name": "carlosbb70", "count": 1, "languages": 1 }, { - "order": 969, + "order": 972, "name": "pablom-2015", "count": 1, "languages": 1 }, { - "order": 970, + "order": 973, "name": "xtinarita", "count": 1, "languages": 1 }, { - "order": 971, + "order": 974, "name": "wilsonbarrera", "count": 1, "languages": 1 }, { - "order": 972, + "order": 975, "name": "jereaguilar", "count": 1, "languages": 1 }, { - "order": 973, + "order": 976, "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { - "order": 974, + "order": 977, "name": "danidan1214", "count": 1, "languages": 1 }, { - "order": 975, + "order": 978, "name": "demegorash", "count": 1, "languages": 1 }, { - "order": 976, + "order": 979, "name": "cris10026", "count": 1, "languages": 1 }, { - "order": 977, + "order": 980, "name": "davidgramiro", "count": 1, "languages": 1 }, { - "order": 978, + "order": 981, "name": "jgarteag", "count": 1, "languages": 1 }, { - "order": 979, + "order": 982, "name": "adcarret", "count": 1, "languages": 1 }, { - "order": 980, + "order": 983, "name": "natanaelzubiri", "count": 1, "languages": 1 }, { - "order": 981, + "order": 984, "name": "diegogomezcor4", "count": 1, "languages": 1 }, { - "order": 982, + "order": 985, "name": "perla-zg", "count": 1, "languages": 1 }, { - "order": 983, + "order": 986, "name": "neshurtado", "count": 1, "languages": 1 }, { - "order": 984, + "order": 987, "name": "marcelinoarias369", "count": 1, "languages": 1 }, { - "order": 985, + "order": 988, "name": "pushodev", "count": 1, "languages": 1 }, { - "order": 986, + "order": 989, "name": "sherkla12e", "count": 1, "languages": 1 }, { - "order": 987, + "order": 990, "name": "luisangeles20", "count": 1, "languages": 1 }, { - "order": 988, + "order": 991, "name": "omar8102", "count": 1, "languages": 1 }, { - "order": 989, + "order": 992, "name": "eatsangels", "count": 1, "languages": 1 }, { - "order": 990, + "order": 993, "name": "alejarandro", "count": 1, "languages": 1 }, { - "order": 991, + "order": 994, "name": "tashidian", "count": 1, "languages": 1 }, { - "order": 992, + "order": 995, "name": "alejandro000", "count": 1, "languages": 1 }, { - "order": 993, + "order": 996, "name": "francgci", "count": 1, "languages": 1 }, { - "order": 994, + "order": 997, "name": "krisipo", "count": 1, "languages": 1 }, { - "order": 995, + "order": 998, "name": "jalonso76", "count": 1, "languages": 1 }, { - "order": 996, + "order": 999, "name": "leo18q", "count": 1, "languages": 1 }, { - "order": 997, + "order": 1000, "name": "sofiamfernandez", "count": 1, "languages": 1 }, { - "order": 998, + "order": 1001, "name": "jgregoris", "count": 1, "languages": 1 }, { - "order": 999, + "order": 1002, "name": "josuelopez5", "count": 1, "languages": 1 }, { - "order": 1000, + "order": 1003, "name": "mrf1989", "count": 1, "languages": 1 }, { - "order": 1001, + "order": 1004, "name": "zeraven09", "count": 1, "languages": 1 }, { - "order": 1002, + "order": 1005, "name": "pr1de-23", "count": 1, "languages": 1 }, { - "order": 1003, + "order": 1006, "name": "kronoscba", "count": 1, "languages": 1 }, { - "order": 1004, + "order": 1007, "name": "erickcis", "count": 1, "languages": 1 }, { - "order": 1005, + "order": 1008, "name": "experthacker444", "count": 1, "languages": 1 }, { - "order": 1006, + "order": 1009, "name": "javirr4", "count": 1, "languages": 1 }, { - "order": 1007, + "order": 1010, "name": "ignacioskm", "count": 1, "languages": 1 }, { - "order": 1008, + "order": 1011, "name": "jchernandez87", "count": 1, "languages": 1 }, { - "order": 1009, + "order": 1012, "name": "ferngpv", "count": 1, "languages": 1 }, { - "order": 1010, + "order": 1013, "name": "kshields51", "count": 1, "languages": 1 }, { - "order": 1011, + "order": 1014, "name": "salas89", "count": 1, "languages": 1 }, { - "order": 1012, + "order": 1015, "name": "90dread", "count": 1, "languages": 1 }, { - "order": 1013, + "order": 1016, "name": "chema-dw", "count": 1, "languages": 1 }, { - "order": 1014, + "order": 1017, "name": "sbngl", "count": 1, "languages": 1 }, { - "order": 1015, + "order": 1018, "name": "m4xxdev", "count": 1, "languages": 1 }, { - "order": 1016, + "order": 1019, "name": "cristianvergaraf", "count": 1, "languages": 1 }, { - "order": 1017, + "order": 1020, "name": "lizzymaken", "count": 1, "languages": 1 }, { - "order": 1018, + "order": 1021, "name": "claudios1980", "count": 1, "languages": 1 }, { - "order": 1019, + "order": 1022, "name": "sergiovelayos", "count": 1, "languages": 1 }, { - "order": 1020, + "order": 1023, "name": "miguelangel861", "count": 1, "languages": 1 }, { - "order": 1021, + "order": 1024, "name": "marcosjarrin", "count": 1, "languages": 1 }, { - "order": 1022, + "order": 1025, "name": "jandresalvar", "count": 1, "languages": 1 }, { - "order": 1023, + "order": 1026, "name": "joferpg", "count": 1, "languages": 1 }, { - "order": 1024, + "order": 1027, "name": "jlrojano", "count": 1, "languages": 1 }, { - "order": 1025, + "order": 1028, "name": "ivanserran", "count": 1, "languages": 1 }, { - "order": 1026, + "order": 1029, "name": "dany3gs", "count": 1, "languages": 1 }, { - "order": 1027, + "order": 1030, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1028, + "order": 1031, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1029, + "order": 1032, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1030, + "order": 1033, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1031, + "order": 1034, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1032, + "order": 1035, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1033, + "order": 1036, "name": "bycris13", "count": 1, "languages": 1 }, { - "order": 1034, + "order": 1037, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1035, + "order": 1038, "name": "v1k770r", "count": 1, "languages": 1 }, { - "order": 1036, + "order": 1039, "name": "gianellannie", "count": 1, "languages": 1 }, { - "order": 1037, + "order": 1040, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1038, + "order": 1041, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1039, + "order": 1042, "name": "fredylopez01", "count": 1, "languages": 1 }, { - "order": 1040, + "order": 1043, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1041, + "order": 1044, "name": "lautimorales", "count": 1, "languages": 1 }, { - "order": 1042, + "order": 1045, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1043, + "order": 1046, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1044, + "order": 1047, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1045, + "order": 1048, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1046, + "order": 1049, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1047, + "order": 1050, "name": "adriansaint07", "count": 1, "languages": 1 }, { - "order": 1048, + "order": 1051, "name": "javiir", "count": 1, "languages": 1 }, { - "order": 1049, + "order": 1052, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1050, + "order": 1053, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1051, + "order": 1054, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1052, + "order": 1055, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1053, + "order": 1056, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1054, + "order": 1057, "name": "jrgim", "count": 1, "languages": 1 }, { - "order": 1055, + "order": 1058, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1056, + "order": 1059, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1057, + "order": 1060, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1058, + "order": 1061, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1059, + "order": 1062, "name": "robermejia", "count": 1, "languages": 1 }, { - "order": 1060, + "order": 1063, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1061, + "order": 1064, "name": "reneguzman7", "count": 1, "languages": 1 }, { - "order": 1062, + "order": 1065, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1063, + "order": 1066, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1064, + "order": 1067, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1065, + "order": 1068, "name": "dovinhoyos", "count": 1, "languages": 1 }, { - "order": 1066, + "order": 1069, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1067, + "order": 1070, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1068, + "order": 1071, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1069, + "order": 1072, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1070, + "order": 1073, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1074, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1075, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1076, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1077, "name": "antoniojzp86", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1078, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1079, "name": "zyn7e", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1080, "name": "diegopardomontero", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1081, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1082, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1083, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1084, "name": "clespinosa2024", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1085, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1086, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1087, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1088, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1089, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1090, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1091, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1092, "name": "rawc1nnamon", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1093, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1094, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1095, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1096, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1097, "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { - "order": 1095, + "order": 1098, "name": "orzefox", "count": 1, "languages": 1 }, { - "order": 1096, + "order": 1099, "name": "acirdeveloper", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1100, "name": "emiliordev", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1101, "name": "sve-nnn", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1102, "name": "edgarmedranoa", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1103, "name": "rafapg93", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1104, "name": "vickalc", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1105, "name": "riukac", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1106, "name": "rusian69", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1107, "name": "wijimenezz", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1108, "name": "albertovf", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1109, "name": "markayala13", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1110, "name": "rocha30", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1111, "name": "righelch", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1112, "name": "deathbat00", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1113, "name": "nicoloboo02", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1114, "name": "sergiopq", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1115, "name": "angeloro", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1116, "name": "jony-english22", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1117, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1118, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1119, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1117, + "order": 1120, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1118, + "order": 1121, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1122, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1123, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1124, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1125, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1126, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1127, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1128, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1129, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1130, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1131, "name": "willypaz243", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1132, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1133, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1134, "name": "juampaweb", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1135, "name": "girngoma", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1136, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1137, "name": "ddaniel27", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1138, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1139, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1140, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1141, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1142, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1143, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1144, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1145, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1146, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1144, + "order": 1147, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1145, + "order": 1148, "name": "ouendinga", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1149, "name": "melonconyogurt", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1150, "name": "mantaras96", "count": 1, "languages": 1 From 5175f452bc531fec46c18a453664fba9703f4dea Mon Sep 17 00:00:00 2001 From: JheisonQuiroga Date: Sat, 7 Sep 2024 21:55:42 -0500 Subject: [PATCH 042/539] Agregar jheisonquiroga.py en la rama main --- .../python/jheisonquiroga.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jheisonquiroga.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jheisonquiroga.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jheisonquiroga.py new file mode 100644 index 0000000000..7a6a10f2d1 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jheisonquiroga.py @@ -0,0 +1,29 @@ +#https://www.python.org/ +#1. Sintaxis de creacion de comentarios +#1.1. Para una sola linea se utilizan los numerales (#) +""" +1.2. Comentar varias lineas: Se utilizan las comillas dobles o simples triples +""" +''' +1.2. Comentar varias lineas: Se utilizan las comillas dobles o simples triples +''' +#2. Crea una variable y una constante si el lenguaje lo soporta +mi_variable = 69 + +#2.1. Costante +PI = 3.1416 + +#3. Tipos de datos + +cadena = "string" #Cadena de texto (str) +numero_entero = 10 # Numero entero (int) +numero_flotante = 3.5 # Numero flotante (float) +booleano = True # Valor booleano (bool) +lista = [1,2,3] # Lista (list) +tupla = (1,2,3) # tupla (tuple) +diccionario = {"clave" : "valor"} #Diccionario (dict) + +nombre_lenguaje = "Python" +print(f"¡Hola, {nombre_lenguaje}!") + + From 5cad8bf047a3d1ffeae5d63b524a2a66cf0a79e3 Mon Sep 17 00:00:00 2001 From: GordoMaster Date: Sun, 8 Sep 2024 00:26:18 -0400 Subject: [PATCH 043/539] #15-Python --- .../python/Gordo-Master.py" | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 "Roadmap/15 - ASINCRON\303\215A/python/Gordo-Master.py" diff --git "a/Roadmap/15 - ASINCRON\303\215A/python/Gordo-Master.py" "b/Roadmap/15 - ASINCRON\303\215A/python/Gordo-Master.py" new file mode 100644 index 0000000000..f529657269 --- /dev/null +++ "b/Roadmap/15 - ASINCRON\303\215A/python/Gordo-Master.py" @@ -0,0 +1,26 @@ +# 15 - Asincronia + +import asyncio +from datetime import datetime + +async def call_name(name,time_to_wait): + print(datetime.now().time().strftime(f"Comienza función: {name}: %X, durara {time_to_wait} segundos")) + await asyncio.sleep(time_to_wait) + print(datetime.now().time().strftime(f"Termina funcion {name}: %X")) + +# asyncio.run(call_name("Gordo Master",2)) + +""" +Ejercicio Extra +""" +async def main(): + + await asyncio.gather( + call_name("C",3), + call_name("B",2), + call_name("A",1) + ) + + await call_name("D",1) + +asyncio.run(main()) From 836061def064b2782b69c1c07c56b1bd2a3d84b8 Mon Sep 17 00:00:00 2001 From: Dkp Date: Sat, 7 Sep 2024 23:16:37 -0600 Subject: [PATCH 044/539] #00-Python --- .../python/Dkp-Dev.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Dkp-Dev.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Dkp-Dev.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Dkp-Dev.py new file mode 100644 index 0000000000..717db2b4fb --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Dkp-Dev.py @@ -0,0 +1,28 @@ +# 1.Crea un comentario en el código y coloca la URL del sitio web oficial del lenguaje de programación que has seleccionado. +# Empezamos de cero! + +# https://www.python.org + +""" + Este es + un comentario + en 3 lineas +""" +# 2.Crea una variable (y una constante si el lenguaje lo soporta). +variable = "Mi Variable" +MY_CONSTANT = "Constante" # Esta constante puede mutar, pero al estar en mayusculas, por convencion nadie la deberia de cambiar + +# 3.Crea variables representando todos los tipos de datos primitivos +int_var = 7 +float_var = 2.5 +bool_var = True +bool2_var = False +string_var = "Cadena de texto" +string2_var = 'Cadena de texto con comilla simple' + +# 4.Imprime por terminal el texto: "¡Hola, [y el nombre de tu lenguaje]!" + +YO = "Dkp-Dev!!" +PYTHON = "Python!!" + +print("Hola", PYTHON, "soy ",YO) From da089555eb7fbfa4a1c792c5d64a4b9c166d2636 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sun, 8 Sep 2024 07:48:05 +0200 Subject: [PATCH 045/539] #26 - Kotlin --- Roadmap/26 - SOLID SRP/kotlin/eulogioep.kt | 130 +++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 Roadmap/26 - SOLID SRP/kotlin/eulogioep.kt diff --git a/Roadmap/26 - SOLID SRP/kotlin/eulogioep.kt b/Roadmap/26 - SOLID SRP/kotlin/eulogioep.kt new file mode 100644 index 0000000000..1ad0fb4cec --- /dev/null +++ b/Roadmap/26 - SOLID SRP/kotlin/eulogioep.kt @@ -0,0 +1,130 @@ +/* + * Principio de Responsabilidad Única (SRP) + * + * El Principio de Responsabilidad Única es el primer principio de SOLID y establece que una clase + * debe tener una, y solo una, razón para cambiar. En otras palabras, una clase debe tener una + * única responsabilidad bien definida. + * + * Este principio promueve la modularidad, facilita el mantenimiento y mejora la legibilidad del código. + * Cuando una clase tiene múltiples responsabilidades, se vuelve más difícil de entender, modificar y probar. + */ + +// Definiciones de datos comunes +data class Book(val title: String, val author: String, var availableCopies: Int) +data class User(val name: String, val id: String, val email: String) +data class Loan(val user: User, val book: Book) + +// Versión que no cumple con SRP +class LibraryWithoutSRP { + private val books = mutableListOf() + private val users = mutableListOf() + private val loans = mutableListOf() + + fun addBook(title: String, author: String, copies: Int) { + books.add(Book(title, author, copies)) + } + + fun registerUser(name: String, id: String, email: String) { + users.add(User(name, id, email)) + } + + fun loanBook(userId: String, bookTitle: String) { + val user = users.find { it.id == userId } + val book = books.find { it.title == bookTitle } + if (user != null && book != null && book.availableCopies > 0) { + loans.add(Loan(user, book)) + book.availableCopies-- + } + } + + fun returnBook(userId: String, bookTitle: String) { + val loan = loans.find { it.user.id == userId && it.book.title == bookTitle } + if (loan != null) { + loans.remove(loan) + loan.book.availableCopies++ + } + } +} + +// Versión refactorizada que cumple con SRP +class BookManager { + private val books = mutableListOf() + + fun addBook(title: String, author: String, copies: Int) { + books.add(Book(title, author, copies)) + } + + fun findBook(title: String): Book? = books.find { it.title == title } +} + +class UserManager { + private val users = mutableListOf() + + fun registerUser(name: String, id: String, email: String) { + users.add(User(name, id, email)) + } + + fun findUser(id: String): User? = users.find { it.id == id } +} + +class LoanManager { + private val loans = mutableListOf() + + fun loanBook(user: User, book: Book) { + if (book.availableCopies > 0) { + loans.add(Loan(user, book)) + book.availableCopies-- + } + } + + fun returnBook(user: User, book: Book) { + val loan = loans.find { it.user == user && it.book == book } + if (loan != null) { + loans.remove(loan) + book.availableCopies++ + } + } +} + +class Library( + private val bookManager: BookManager, + private val userManager: UserManager, + private val loanManager: LoanManager +) { + fun addBook(title: String, author: String, copies: Int) { + bookManager.addBook(title, author, copies) + } + + fun registerUser(name: String, id: String, email: String) { + userManager.registerUser(name, id, email) + } + + fun loanBook(userId: String, bookTitle: String) { + val user = userManager.findUser(userId) + val book = bookManager.findBook(bookTitle) + if (user != null && book != null) { + loanManager.loanBook(user, book) + } + } + + fun returnBook(userId: String, bookTitle: String) { + val user = userManager.findUser(userId) + val book = bookManager.findBook(bookTitle) + if (user != null && book != null) { + loanManager.returnBook(user, book) + } + } +} + +// Uso del sistema refactorizado +fun main() { + val bookManager = BookManager() + val userManager = UserManager() + val loanManager = LoanManager() + val library = Library(bookManager, userManager, loanManager) + + library.addBook("1984", "George Orwell", 5) + library.registerUser("EulogioEP", "001", "eulogioep@email.com") + library.loanBook("001", "1984") + library.returnBook("001", "1984") +} \ No newline at end of file From eaacbda2a59822a0f72681b53e581455b067d4f9 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sun, 8 Sep 2024 07:50:49 +0200 Subject: [PATCH 046/539] #27 - Kotlin --- Roadmap/27 - SOLID OCP/kotlin/eulogioep.kt | 76 ++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Roadmap/27 - SOLID OCP/kotlin/eulogioep.kt diff --git a/Roadmap/27 - SOLID OCP/kotlin/eulogioep.kt b/Roadmap/27 - SOLID OCP/kotlin/eulogioep.kt new file mode 100644 index 0000000000..b389ca6481 --- /dev/null +++ b/Roadmap/27 - SOLID OCP/kotlin/eulogioep.kt @@ -0,0 +1,76 @@ +/* + * Principio Abierto-Cerrado (OCP) de SOLID + * + * El principio OCP establece que las entidades de software (clases, módulos, funciones, etc.) + * deben estar abiertas para la extensión, pero cerradas para la modificación. Esto significa + * que debemos poder extender el comportamiento de una clase sin modificar su código existente. + * + * En este ejemplo, demostraremos cómo aplicar el OCP en el diseño de una calculadora, + * permitiendo agregar nuevas operaciones sin modificar el código existente. + */ + +// Interfaz que define la operación matemática +interface Operation { + fun execute(a: Double, b: Double): Double +} + +// Implementaciones de las operaciones básicas +class Addition : Operation { + override fun execute(a: Double, b: Double) = a + b +} + +class Subtraction : Operation { + override fun execute(a: Double, b: Double) = a - b +} + +class Multiplication : Operation { + override fun execute(a: Double, b: Double) = a * b +} + +class Division : Operation { + override fun execute(a: Double, b: Double): Double { + if (b == 0.0) throw IllegalArgumentException("Cannot divide by zero") + return a / b + } +} + +// Calculadora que utiliza el principio OCP +class Calculator { + private val operations = mutableMapOf() + + fun addOperation(name: String, operation: Operation) { + operations[name] = operation + } + + fun calculate(a: Double, b: Double, operationName: String): Double { + val operation = operations[operationName] + ?: throw IllegalArgumentException("Operation not supported") + return operation.execute(a, b) + } +} + +// Ejemplo de uso y prueba +fun main() { + val calculator = Calculator() + + // Agregar operaciones básicas + calculator.addOperation("add", Addition()) + calculator.addOperation("subtract", Subtraction()) + calculator.addOperation("multiply", Multiplication()) + calculator.addOperation("divide", Division()) + + // Probar operaciones básicas + println("5 + 3 = ${calculator.calculate(5.0, 3.0, "add")}") + println("5 - 3 = ${calculator.calculate(5.0, 3.0, "subtract")}") + println("5 * 3 = ${calculator.calculate(5.0, 3.0, "multiply")}") + println("6 / 3 = ${calculator.calculate(6.0, 3.0, "divide")}") + + // Agregar una nueva operación (potencia) sin modificar el código existente + class Power : Operation { + override fun execute(a: Double, b: Double) = Math.pow(a, b) + } + calculator.addOperation("power", Power()) + + // Probar la nueva operación + println("2^3 = ${calculator.calculate(2.0, 3.0, "power")}") +} From f4fd66e9b1ced4b8a00d4a121dd0785b2eb11a72 Mon Sep 17 00:00:00 2001 From: Dkp-Dev Date: Sat, 7 Sep 2024 23:54:45 -0600 Subject: [PATCH 047/539] #00 - Python --- .../python/Dkp-Dev.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Dkp-Dev.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Dkp-Dev.py index 717db2b4fb..30eb399d5c 100644 --- a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Dkp-Dev.py +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Dkp-Dev.py @@ -22,7 +22,7 @@ # 4.Imprime por terminal el texto: "¡Hola, [y el nombre de tu lenguaje]!" -YO = "Dkp-Dev!!" +YO = "Dkp-Dev!" PYTHON = "Python!!" print("Hola", PYTHON, "soy ",YO) From bb27a9e73c22064b19c500bfe1c56b320ff259ea Mon Sep 17 00:00:00 2001 From: mvidalb Date: Sun, 8 Sep 2024 12:10:34 +0200 Subject: [PATCH 048/539] #11 - Python --- .../11 - MANEJO DE FICHEROS/python/mvidalb.py | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 Roadmap/11 - MANEJO DE FICHEROS/python/mvidalb.py diff --git a/Roadmap/11 - MANEJO DE FICHEROS/python/mvidalb.py b/Roadmap/11 - MANEJO DE FICHEROS/python/mvidalb.py new file mode 100644 index 0000000000..cb35e0142a --- /dev/null +++ b/Roadmap/11 - MANEJO DE FICHEROS/python/mvidalb.py @@ -0,0 +1,105 @@ +import os + +''' +Ejercicio +''' +file_name = "mvidalb.txt" + +with open(file_name, "w") as file: + file.write("Mario\n") + file.write("40\n") + file.write("Python") + +with open(file_name, "r") as file: + print(file.read()) + +os.remove(file_name) + + +''' +Ejercicio extra +''' +file_txt = "ventas.txt" +open(file_txt, "a") #a = append, seguir añadiendo + +while True: + print("¡Bienvenido!") + print("1. Añadir producto.") + print("2. Consultar producto.") + print("3. Actualizar producto.") + print("4. Eliminar producto.") + print("5. Mostrar productos.") + print("6. Calcular venta total.") + print("7. Calcular venta por producto.") + print("8. Salir.") + accion = input("Selecciona la acción a realizar: ") + + match accion: + case "1": + name = input("Nombre: ") + quantity = input("Cantidad: ") + price = input("Precio: ") + with open(file_txt, "a",) as file: #a = append, seguir añadiendo + file.write(f"{name}, {quantity}, {price}\n") + case "2": + name = input("Nombre: ") + with open(file_txt, "r") as file: + for line in file.readlines(): + if line.split(", ")[0] == name: + print(line) + break + print("Ese producto no existe!\n") + case "3": + name = input("Nombre: ") + quantity = input("Cantidad: ") + price = input("Precio: ") + with open(file_txt, "r") as file: # Copio todas las líneas + lines = file.readlines() + with open(file_txt, "w") as file: # Escribo todo de nuevo + for line in lines: + if line.split(", ")[0] == name: + file.write(f"{name}, {quantity}, {price}\n") + print("Producto actualizado!\n") + else: + file.write(line) + case "4": + name = input("Nombre: ") + with open(file_txt, "r") as file: # Copio todas las líneas + lines = file.readlines() + with open(file_txt, "w") as file: # Escribo todo de nuevo + for line in lines: + if line.split(", ")[0] != name: + file.write(line) + else: + print("Ese producto no existe!") + case "5": + with open(file_txt, "r") as file: + print(file.read()) + case "6": + total_price = 0 + with open(file_txt, "r") as file: + for line in file.readlines(): + quantity = int(line.split(", ")[1]) + price = float(line.split(", ")[2]) + total_price += quantity*price + print(f"Venta total: {total_price} €") + case "7": + name = input("Nombre: ") + total_product = 0 + with open(file_txt, "r") as file: + for line in file.readlines(): + components = line.split(", ") + if components[0] == name: + quantity = int(line.split(", ")[1]) + price = float(line.split(", ")[2]) + total_product += quantity*price + break + print(f"Venta producto {name}: {total_product} €") + case "8": + print("ventas.txt ha sido borrado. ¡Hasta pronto!") + os.remove(file_txt) + break + case _: + print("No ha seleccionado ninguna acción entre los números 1 y 5.") + + \ No newline at end of file From 07d4d4d2df36c59aa06d40a3c4f5addc7d325f67 Mon Sep 17 00:00:00 2001 From: mvidalb Date: Sun, 8 Sep 2024 14:24:51 +0200 Subject: [PATCH 049/539] #12 - Python --- Roadmap/12 - JSON Y XML/python/mvidalb.py | 107 ++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 Roadmap/12 - JSON Y XML/python/mvidalb.py diff --git a/Roadmap/12 - JSON Y XML/python/mvidalb.py b/Roadmap/12 - JSON Y XML/python/mvidalb.py new file mode 100644 index 0000000000..8df0bacfbc --- /dev/null +++ b/Roadmap/12 - JSON Y XML/python/mvidalb.py @@ -0,0 +1,107 @@ +import json +import os +import xml.etree.ElementTree as xml + +data = { + "name" : "Mario", + "age" : 40, + "birth_date" : "01/01/2000", + "programming_languages" : ["Python", "C#"] +} + +# XML +xml_file = "mvidalb.xml" + +def create_xml(): + + root = xml.Element("data") + + for key, value in data.items(): + child = xml.SubElement(root, key) + if isinstance(value, list): + for item in value: + child_child = xml.SubElement(child, "item") + child_child.text = item + else: + child.text = str(value) + + tree = xml.ElementTree(root) + tree.write(xml_file) + +create_xml() + +with open(xml_file, "r") as xml_data: + print("XML file:") + print(xml_data.read()) + +os.remove(xml_file) + + +# JSON +json_file = "mvidalb.json" + +def create_json(): + with open(json_file, "w") as json_data: + json.dump(data, json_data) + +create_json() + +# Shift + Alt + F para formatear el archivo a formato JSON! + +with open(json_file, "r") as json_data: + print("JSON file:") + print(json_data.read()) + +os.remove(json_file) + + +''' +Ejercicio extra +''' +create_xml() +create_json() + +class Data: + + def __init__(self, name, age, birth_date, programming_languages) -> None: + self.name = name + self.age = age + self.birth_date = birth_date + self.programming_languages = programming_languages + +def extract_xml(): + with open(xml_file, "r") as xml_data: + + root = xml.fromstring(xml_data.read()) + name = root.find("name").text + age = root.find("age").text + birth_date = root.find("birth_date").text + + programming_languages = [] + for item in root.find("programming_languages"): + programming_languages.append(item.text) + + xml_class = Data(name, age, birth_date, programming_languages) + print("DATA CLASS: XML FILE") + print(xml_class.__dict__) + +def extract_json(): + with open(json_file, "r") as json_data: + + json_dict = json.load(json_data) + + name = json_dict["name"] + age = json_dict["age"] + birth_date = json_dict["birth_date"] + programming_languages = json_dict["programming_languages"] + + json_class = Data(name, age, birth_date, programming_languages) + print("DATA CLASS: JSON FILE") + print(json_class.__dict__) + +extract_xml() +extract_json() + +os.remove(xml_file) +os.remove(json_file) + From 48812c144ad4c760e0c3039da75a2e620ef060ed Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Sun, 8 Sep 2024 16:38:16 +0200 Subject: [PATCH 050/539] #07 - TypeScript --- .../07 - PILAS Y COLAS/typescript/qv1ko.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Roadmap/07 - PILAS Y COLAS/typescript/qv1ko.ts diff --git a/Roadmap/07 - PILAS Y COLAS/typescript/qv1ko.ts b/Roadmap/07 - PILAS Y COLAS/typescript/qv1ko.ts new file mode 100644 index 0000000000..ae55deaf48 --- /dev/null +++ b/Roadmap/07 - PILAS Y COLAS/typescript/qv1ko.ts @@ -0,0 +1,19 @@ +let stack: number[] = []; + +stack.push(1); +stack.push(2); +stack.push(3); + +if (stack.length !== 0) { + console.log(stack.pop()); +} + +let queue: string[] = []; + +queue.push('a'); +queue.push('b'); +queue.push('c'); + +if (queue.length !== 0){ + console.log(queue[0]); +} From a7066ab00a6979c885cc18676abd3f59b9d7d26c Mon Sep 17 00:00:00 2001 From: Daniel Hernandez Puerto Date: Sun, 8 Sep 2024 20:22:29 +0200 Subject: [PATCH 051/539] Solution for readmap 36 --- .../dart/redom69.dart | 212 ++++++++++++++++++ .../javascript/redom69.js | 149 ++++++++++++ .../python/redom69.py | 156 +++++++++++++ .../typescript/redom69.ts | 159 +++++++++++++ 4 files changed, 676 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/dart/redom69.dart create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/redom69.js create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/redom69.py create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/typescript/redom69.ts diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/dart/redom69.dart b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/dart/redom69.dart new file mode 100644 index 0000000000..ed44ab34b8 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/dart/redom69.dart @@ -0,0 +1,212 @@ +import 'dart:io'; +import 'dart:math'; + +List printQuiz() { + final List> preguntas = [ + { + "pregunta": "¿Qué es lo que más disfrutas al programar?", + "opciones": [ + {"respuesta": "Diseñar interfaces atractivas", "casa": "Frontend"}, + { + "respuesta": "Optimizar el rendimiento del servidor", + "casa": "Backend" + }, + {"respuesta": "Crear aplicaciones móviles útiles", "casa": "Mobile"}, + {"respuesta": "Analizar grandes conjuntos de datos", "casa": "Data"} + ] + }, + { + "pregunta": "¿Qué tipo de proyecto te atrae más?", + "opciones": [ + {"respuesta": "Aplicaciones web con mucho estilo", "casa": "Frontend"}, + { + "respuesta": "Sistemas que manejen grandes volúmenes de datos", + "casa": "Backend" + }, + { + "respuesta": "Aplicaciones para teléfonos inteligentes", + "casa": "Mobile" + }, + {"respuesta": "Dashboards para visualizar información", "casa": "Data"} + ] + }, + { + "pregunta": "¿Qué herramienta te resulta más interesante?", + "opciones": [ + {"respuesta": "HTML, CSS y JavaScript", "casa": "Frontend"}, + {"respuesta": "Node.js o Python", "casa": "Backend"}, + {"respuesta": "React Native o Swift", "casa": "Mobile"}, + {"respuesta": "SQL o Python con Pandas", "casa": "Data"} + ] + }, + { + "pregunta": "¿Cuál es tu mayor fortaleza como programador?", + "opciones": [ + {"respuesta": "Crear interfaces amigables", "casa": "Frontend"}, + { + "respuesta": "Solucionar problemas complejos en el servidor", + "casa": "Backend" + }, + {"respuesta": "Desarrollar apps funcionales", "casa": "Mobile"}, + {"respuesta": "Encontrar patrones en los datos", "casa": "Data"} + ] + }, + { + "pregunta": "¿Qué prefieres en un equipo de desarrollo?", + "opciones": [ + {"respuesta": "Ser quien diseña el look y feel", "casa": "Frontend"}, + { + "respuesta": "Ser quien gestiona la arquitectura de la aplicación", + "casa": "Backend" + }, + { + "respuesta": "Ser quien se encarga de la versión móvil", + "casa": "Mobile" + }, + { + "respuesta": "Ser quien analiza el rendimiento del sistema", + "casa": "Data" + } + ] + }, + { + "pregunta": "¿En qué te enfocas más cuando trabajas en un proyecto?", + "opciones": [ + { + "respuesta": "En el diseño visual y la experiencia de usuario", + "casa": "Frontend" + }, + { + "respuesta": "En la estabilidad y escalabilidad del sistema", + "casa": "Backend" + }, + { + "respuesta": "En hacer que la app funcione en dispositivos móviles", + "casa": "Mobile" + }, + { + "respuesta": "En el análisis y visualización de los datos", + "casa": "Data" + } + ] + }, + { + "pregunta": "¿Cuál es tu mayor motivación como desarrollador?", + "opciones": [ + { + "respuesta": "Crear experiencias de usuario memorables", + "casa": "Frontend" + }, + { + "respuesta": "Resolver problemas complejos con eficiencia", + "casa": "Backend" + }, + { + "respuesta": + "Desarrollar aplicaciones que la gente use todos los días", + "casa": "Mobile" + }, + {"respuesta": "Descubrir patrones ocultos en los datos", "casa": "Data"} + ] + }, + { + "pregunta": "¿Qué aspecto prefieres de un nuevo proyecto?", + "opciones": [ + { + "respuesta": "Hacer que se vea genial y sea fácil de usar", + "casa": "Frontend" + }, + { + "respuesta": "Asegurarme de que el servidor funcione sin problemas", + "casa": "Backend" + }, + { + "respuesta": "Hacer que funcione bien en dispositivos móviles", + "casa": "Mobile" + }, + { + "respuesta": "Organizar y visualizar los datos de forma eficiente", + "casa": "Data" + } + ] + }, + { + "pregunta": "¿Qué tecnología te emociona más aprender?", + "opciones": [ + { + "respuesta": "Frameworks de JavaScript como React o Angular", + "casa": "Frontend" + }, + { + "respuesta": "Microservicios o arquitectura en la nube", + "casa": "Backend" + }, + {"respuesta": "Desarrollo de aplicaciones móviles", "casa": "Mobile"}, + {"respuesta": "Big Data o inteligencia artificial", "casa": "Data"} + ] + }, + { + "pregunta": "Si pudieras elegir un área de especialización, ¿cuál sería?", + "opciones": [ + {"respuesta": "Interfaz y experiencia de usuario", "casa": "Frontend"}, + { + "respuesta": "Desarrollo y mantenimiento del servidor", + "casa": "Backend" + }, + {"respuesta": "Aplicaciones móviles", "casa": "Mobile"}, + {"respuesta": "Ciencia de datos y análisis", "casa": "Data"} + ] + } + ]; + + List answers = []; + + preguntas.forEach((preguntaObj) { + print(preguntaObj['pregunta']); + List opciones = preguntaObj['opciones']; + + // Imprimir las opciones y pedir la respuesta + for (int i = 0; i < opciones.length; i++) { + print("${String.fromCharCode(97 + i)}) ${opciones[i]['respuesta']}"); + } + + String? answer = stdin.readLineSync(); + answers.add(answer!); + }); + + return answers; +} + +String selectHouse(List answers) { + int countFront = answers.where((a) => a == 'a').length; + int countBackend = answers.where((a) => a == 'b').length; + int countMobile = answers.where((a) => a == 'c').length; + int countData = answers.where((a) => a == 'd').length; + + Map casas = { + "Frontend": countFront, + "Backend": countBackend, + "Mobile": countMobile, + "Data": countData + }; + + int maxCount = casas.values.reduce(max); + + List posiblesCasas = + casas.keys.where((casa) => casas[casa] == maxCount).toList(); + + if (posiblesCasas.length > 1) { + print("¡Ha sido una decisión complicada!"); + return posiblesCasas[Random().nextInt(posiblesCasas.length)]; + } + + return posiblesCasas[0]; +} + +void main() { + print("Introduce tu nombre: "); + String? name = stdin.readLineSync(); + List answers = printQuiz(); + String house = selectHouse(answers); + print("$name, la casa seleccionada es: $house"); +} diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/redom69.js b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/redom69.js new file mode 100644 index 0000000000..e577191876 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/redom69.js @@ -0,0 +1,149 @@ +const readline = require('readline'); + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +function printQuiz() { + const preguntas = [ + { + pregunta: "¿Qué es lo que más disfrutas al programar?", + opciones: [ + { respuesta: "Diseñar interfaces atractivas", casa: "Frontend" }, + { respuesta: "Optimizar el rendimiento del servidor", casa: "Backend" }, + { respuesta: "Crear aplicaciones móviles útiles", casa: "Mobile" }, + { respuesta: "Analizar grandes conjuntos de datos", casa: "Data" } + ] + }, + { + pregunta: "¿Qué tipo de proyecto te atrae más?", + opciones: [ + { respuesta: "Aplicaciones web con mucho estilo", casa: "Frontend" }, + { respuesta: "Sistemas que manejen grandes volúmenes de datos", casa: "Backend" }, + { respuesta: "Aplicaciones para teléfonos inteligentes", casa: "Mobile" }, + { respuesta: "Dashboards para visualizar información", casa: "Data" } + ] + }, + { + pregunta: "¿Qué herramienta te resulta más interesante?", + opciones: [ + { respuesta: "HTML, CSS y JavaScript", casa: "Frontend" }, + { respuesta: "Node.js o Python", casa: "Backend" }, + { respuesta: "React Native o Swift", casa: "Mobile" }, + { respuesta: "SQL o Python con Pandas", casa: "Data" } + ] + }, + { + pregunta: "¿Cuál es tu mayor fortaleza como programador?", + opciones: [ + { respuesta: "Crear interfaces amigables", casa: "Frontend" }, + { respuesta: "Solucionar problemas complejos en el servidor", casa: "Backend" }, + { respuesta: "Desarrollar apps funcionales", casa: "Mobile" }, + { respuesta: "Encontrar patrones en los datos", casa: "Data" } + ] + }, + { + pregunta: "¿Qué prefieres en un equipo de desarrollo?", + opciones: [ + { respuesta: "Ser quien diseña el look y feel", casa: "Frontend" }, + { respuesta: "Ser quien gestiona la arquitectura de la aplicación", casa: "Backend" }, + { respuesta: "Ser quien se encarga de la versión móvil", casa: "Mobile" }, + { respuesta: "Ser quien analiza el rendimiento del sistema", casa: "Data" } + ] + }, + { + pregunta: "¿En qué te enfocas más cuando trabajas en un proyecto?", + opciones: [ + { respuesta: "En el diseño visual y la experiencia de usuario", casa: "Frontend" }, + { respuesta: "En la estabilidad y escalabilidad del sistema", casa: "Backend" }, + { respuesta: "En hacer que la app funcione en dispositivos móviles", casa: "Mobile" }, + { respuesta: "En el análisis y visualización de los datos", casa: "Data" } + ] + }, + { + pregunta: "¿Cuál es tu mayor motivación como desarrollador?", + opciones: [ + { respuesta: "Crear experiencias de usuario memorables", casa: "Frontend" }, + { respuesta: "Resolver problemas complejos con eficiencia", casa: "Backend" }, + { respuesta: "Desarrollar aplicaciones que la gente use todos los días", casa: "Mobile" }, + { respuesta: "Descubrir patrones ocultos en los datos", casa: "Data" } + ] + }, + { + pregunta: "¿Qué aspecto prefieres de un nuevo proyecto?", + opciones: [ + { respuesta: "Hacer que se vea genial y sea fácil de usar", casa: "Frontend" }, + { respuesta: "Asegurarme de que el servidor funcione sin problemas", casa: "Backend" }, + { respuesta: "Hacer que funcione bien en dispositivos móviles", casa: "Mobile" }, + { respuesta: "Organizar y visualizar los datos de forma eficiente", casa: "Data" } + ] + }, + { + pregunta: "¿Qué tecnología te emociona más aprender?", + opciones: [ + { respuesta: "Frameworks de JavaScript como React o Angular", casa: "Frontend" }, + { respuesta: "Microservicios o arquitectura en la nube", casa: "Backend" }, + { respuesta: "Desarrollo de aplicaciones móviles", casa: "Mobile" }, + { respuesta: "Big Data o inteligencia artificial", casa: "Data" } + ] + }, + { + pregunta: "Si pudieras elegir un área de especialización, ¿cuál sería?", + opciones: [ + { respuesta: "Interfaz y experiencia de usuario", casa: "Frontend" }, + { respuesta: "Desarrollo y mantenimiento del servidor", casa: "Backend" }, + { respuesta: "Aplicaciones móviles", casa: "Mobile" }, + { respuesta: "Ciencia de datos y análisis", casa: "Data" } + ] + } + ]; + + const answers = []; + + const askQuestion = (index) => { + if (index < preguntas.length) { + console.log(preguntas[index].pregunta); + preguntas[index].opciones.forEach((opcion, idx) => { + console.log(`${String.fromCharCode(97 + idx)}: ${opcion.respuesta}`); + }); + rl.question('Selecciona una opción: ', (answer) => { + answers.push(answer); + askQuestion(index + 1); + }); + } else { + rl.close(); + const house = selectHouse(answers); + console.log(`La casa seleccionada es: ${house}`); + } + }; + + askQuestion(0); +} + +function selectHouse(answers) { + const countFront = answers.filter((a) => a === 'a').length; + const countBackend = answers.filter((a) => a === 'b').length; + const countMobile = answers.filter((a) => a === 'c').length; + const countData = answers.filter((a) => a === 'd').length; + + const casas = { Frontend: countFront, Backend: countBackend, Mobile: countMobile, Data: countData }; + const maxCount = Math.max(...Object.values(casas)); + + const posiblesCasas = Object.keys(casas).filter(casa => casas[casa] === maxCount); + + if (posiblesCasas.length > 1) { + console.log("¡Ha sido una decisión complicada!"); + return posiblesCasas[Math.floor(Math.random() * posiblesCasas.length)]; + } + + return posiblesCasas[0]; +} + +function main() { + rl.question('Introduce tu nombre: ', (name) => { + printQuiz(); + }); +} + +main(); diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/redom69.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/redom69.py new file mode 100644 index 0000000000..de93427fdc --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/redom69.py @@ -0,0 +1,156 @@ +""" + EJERCICIO: + Cada 1 de septiembre, el Hogwarts Express parte hacia la escuela + de programación de Hogwarts para magos y brujas del código. + En ella, su famoso sombrero seleccionador ayuda a los programadores + a encontrar su camino... + Desarrolla un programa que simule el comportamiento del sombrero. + Requisitos: + 1. El sombrero realizará 10 preguntas para determinar la casa del alumno. + 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data. + (Puedes elegir las que quieras) + Acciones: + 1. Crea un programa que solicite el nombre del alumno y realice 10 + preguntas, con cuatro posibles respuestas cada una. + 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección). + 3. Una vez finalizado, el sombrero indica el nombre del alumno + y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria, + pero indicándole al alumno que la decisión ha sido complicada). +""" + +preguntas = { + "pregunta_1": { + "pregunta": "¿Qué es lo que más disfrutas al programar?", + "opciones": { + "a": {"respuesta": "Diseñar interfaces atractivas", "casa": "Frontend"}, + "b": {"respuesta": "Optimizar el rendimiento del servidor", "casa": "Backend"}, + "c": {"respuesta": "Crear aplicaciones móviles útiles", "casa": "Mobile"}, + "d": {"respuesta": "Analizar grandes conjuntos de datos", "casa": "Data"} + } + }, + "pregunta_2": { + "pregunta": "¿Qué tipo de proyecto te atrae más?", + "opciones": { + "a": {"respuesta": "Aplicaciones web con mucho estilo", "casa": "Frontend"}, + "b": {"respuesta": "Sistemas que manejen grandes volúmenes de datos", "casa": "Backend"}, + "c": {"respuesta": "Aplicaciones para teléfonos inteligentes", "casa": "Mobile"}, + "d": {"respuesta": "Dashboards para visualizar información", "casa": "Data"} + } + }, + "pregunta_3": { + "pregunta": "¿Qué herramienta te resulta más interesante?", + "opciones": { + "a": {"respuesta": "HTML, CSS y JavaScript", "casa": "Frontend"}, + "b": {"respuesta": "Node.js o Python", "casa": "Backend"}, + "c": {"respuesta": "React Native o Swift", "casa": "Mobile"}, + "d": {"respuesta": "SQL o Python con Pandas", "casa": "Data"} + } + }, + "pregunta_4": { + "pregunta": "¿Cuál es tu mayor fortaleza como programador?", + "opciones": { + "a": {"respuesta": "Crear interfaces amigables", "casa": "Frontend"}, + "b": {"respuesta": "Solucionar problemas complejos en el servidor", "casa": "Backend"}, + "c": {"respuesta": "Desarrollar apps funcionales", "casa": "Mobile"}, + "d": {"respuesta": "Encontrar patrones en los datos", "casa": "Data"} + } + }, + "pregunta_5": { + "pregunta": "¿Qué prefieres en un equipo de desarrollo?", + "opciones": { + "a": {"respuesta": "Ser quien diseña el look y feel", "casa": "Frontend"}, + "b": {"respuesta": "Ser quien gestiona la arquitectura de la aplicación", "casa": "Backend"}, + "c": {"respuesta": "Ser quien se encarga de la versión móvil", "casa": "Mobile"}, + "d": {"respuesta": "Ser quien analiza el rendimiento del sistema", "casa": "Data"} + } + }, + "pregunta_6": { + "pregunta": "¿En qué te enfocas más cuando trabajas en un proyecto?", + "opciones": { + "a": {"respuesta": "En el diseño visual y la experiencia de usuario", "casa": "Frontend"}, + "b": {"respuesta": "En la estabilidad y escalabilidad del sistema", "casa": "Backend"}, + "c": {"respuesta": "En hacer que la app funcione en dispositivos móviles", "casa": "Mobile"}, + "d": {"respuesta": "En el análisis y visualización de los datos", "casa": "Data"} + } + }, + "pregunta_7": { + "pregunta": "¿Cuál es tu mayor motivación como desarrollador?", + "opciones": { + "a": {"respuesta": "Crear experiencias de usuario memorables", "casa": "Frontend"}, + "b": {"respuesta": "Resolver problemas complejos con eficiencia", "casa": "Backend"}, + "c": {"respuesta": "Desarrollar aplicaciones que la gente use todos los días", "casa": "Mobile"}, + "d": {"respuesta": "Descubrir patrones ocultos en los datos", "casa": "Data"} + } + }, + "pregunta_8": { + "pregunta": "¿Qué aspecto prefieres de un nuevo proyecto?", + "opciones": { + "a": {"respuesta": "Hacer que se vea genial y sea fácil de usar", "casa": "Frontend"}, + "b": {"respuesta": "Asegurarme de que el servidor funcione sin problemas", "casa": "Backend"}, + "c": {"respuesta": "Hacer que funcione bien en dispositivos móviles", "casa": "Mobile"}, + "d": {"respuesta": "Organizar y visualizar los datos de forma eficiente", "casa": "Data"} + } + }, + "pregunta_9": { + "pregunta": "¿Qué tecnología te emociona más aprender?", + "opciones": { + "a": {"respuesta": "Frameworks de JavaScript como React o Angular", "casa": "Frontend"}, + "b": {"respuesta": "Microservicios o arquitectura en la nube", "casa": "Backend"}, + "c": {"respuesta": "Desarrollo de aplicaciones móviles", "casa": "Mobile"}, + "d": {"respuesta": "Big Data o inteligencia artificial", "casa": "Data"} + } + }, + "pregunta_10": { + "pregunta": "Si pudieras elegir un área de especialización, ¿cuál sería?", + "opciones": { + "a": {"respuesta": "Interfaz y experiencia de usuario", "casa": "Frontend"}, + "b": {"respuesta": "Desarrollo y mantenimiento del servidor", "casa": "Backend"}, + "c": {"respuesta": "Aplicaciones móviles", "casa": "Mobile"}, + "d": {"respuesta": "Ciencia de datos y análisis", "casa": "Data"} + } + } +} + +def print_quiz(): + # Ejemplo para acceder a las preguntas + answers = [] + for clave, contenido in preguntas.items(): + print(contenido["pregunta"]) + for opcion, detalle in contenido["opciones"].items(): + print(f"{opcion}: {detalle['respuesta']}") + answer = input("Selecciona una de las opciones: ") + answers.append(answer) + return answers + +def select_house(answers): + # Contar las respuestas para cada casa + countFront = answers.count('a') + countBackend = answers.count('b') + countMobile = answers.count('c') + countData = answers.count('d') + + casas = { + "Frontend": countFront, + "Backend": countBackend, + "Mobile": countMobile, + "Data": countData + } + + max_count = max(casas.values()) + + posibles_casas = [casa for casa, count in casas.items() if count == max_count] + + if len(posibles_casas) > 1: + print("¡Ha sido una decisión complicada!") + return random.choice(posibles_casas) + + return posibles_casas[0] + +def main(): + name = input("Introduce tu nombre: ") + answers = print_quiz() + house = select_house(answers) + print(f"{name } la casa seleccionada es: {house}") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/typescript/redom69.ts b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/typescript/redom69.ts new file mode 100644 index 0000000000..c2a0cd387b --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/typescript/redom69.ts @@ -0,0 +1,159 @@ +import * as readline from 'readline'; + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +interface Opcion { + respuesta: string; + casa: string; +} + +interface Pregunta { + pregunta: string; + opciones: Opcion[]; +} + +const preguntas: Pregunta[] = [ + { + pregunta: "¿Qué es lo que más disfrutas al programar?", + opciones: [ + { respuesta: "Diseñar interfaces atractivas", casa: "Frontend" }, + { respuesta: "Optimizar el rendimiento del servidor", casa: "Backend" }, + { respuesta: "Crear aplicaciones móviles útiles", casa: "Mobile" }, + { respuesta: "Analizar grandes conjuntos de datos", casa: "Data" } + ] + }, + { + pregunta: "¿Qué tipo de proyecto te atrae más?", + opciones: [ + { respuesta: "Aplicaciones web con mucho estilo", casa: "Frontend" }, + { respuesta: "Sistemas que manejen grandes volúmenes de datos", casa: "Backend" }, + { respuesta: "Aplicaciones para teléfonos inteligentes", casa: "Mobile" }, + { respuesta: "Dashboards para visualizar información", casa: "Data" } + ] + }, + { + pregunta: "¿Qué herramienta te resulta más interesante?", + opciones: [ + { respuesta: "HTML, CSS y JavaScript", casa: "Frontend" }, + { respuesta: "Node.js o Python", casa: "Backend" }, + { respuesta: "React Native o Swift", casa: "Mobile" }, + { respuesta: "SQL o Python con Pandas", casa: "Data" } + ] + }, + { + pregunta: "¿Cuál es tu mayor fortaleza como programador?", + opciones: [ + { respuesta: "Crear interfaces amigables", casa: "Frontend" }, + { respuesta: "Solucionar problemas complejos en el servidor", casa: "Backend" }, + { respuesta: "Desarrollar apps funcionales", casa: "Mobile" }, + { respuesta: "Encontrar patrones en los datos", casa: "Data" } + ] + }, + { + pregunta: "¿Qué prefieres en un equipo de desarrollo?", + opciones: [ + { respuesta: "Ser quien diseña el look y feel", casa: "Frontend" }, + { respuesta: "Ser quien gestiona la arquitectura de la aplicación", casa: "Backend" }, + { respuesta: "Ser quien se encarga de la versión móvil", casa: "Mobile" }, + { respuesta: "Ser quien analiza el rendimiento del sistema", casa: "Data" } + ] + }, + { + pregunta: "¿En qué te enfocas más cuando trabajas en un proyecto?", + opciones: [ + { respuesta: "En el diseño visual y la experiencia de usuario", casa: "Frontend" }, + { respuesta: "En la estabilidad y escalabilidad del sistema", casa: "Backend" }, + { respuesta: "En hacer que la app funcione en dispositivos móviles", casa: "Mobile" }, + { respuesta: "En el análisis y visualización de los datos", casa: "Data" } + ] + }, + { + pregunta: "¿Cuál es tu mayor motivación como desarrollador?", + opciones: [ + { respuesta: "Crear experiencias de usuario memorables", casa: "Frontend" }, + { respuesta: "Resolver problemas complejos con eficiencia", casa: "Backend" }, + { respuesta: "Desarrollar aplicaciones que la gente use todos los días", casa: "Mobile" }, + { respuesta: "Descubrir patrones ocultos en los datos", casa: "Data" } + ] + }, + { + pregunta: "¿Qué aspecto prefieres de un nuevo proyecto?", + opciones: [ + { respuesta: "Hacer que se vea genial y sea fácil de usar", casa: "Frontend" }, + { respuesta: "Asegurarme de que el servidor funcione sin problemas", casa: "Backend" }, + { respuesta: "Hacer que funcione bien en dispositivos móviles", casa: "Mobile" }, + { respuesta: "Organizar y visualizar los datos de forma eficiente", casa: "Data" } + ] + }, + { + pregunta: "¿Qué tecnología te emociona más aprender?", + opciones: [ + { respuesta: "Frameworks de JavaScript como React o Angular", casa: "Frontend" }, + { respuesta: "Microservicios o arquitectura en la nube", casa: "Backend" }, + { respuesta: "Desarrollo de aplicaciones móviles", casa: "Mobile" }, + { respuesta: "Big Data o inteligencia artificial", casa: "Data" } + ] + }, + { + pregunta: "Si pudieras elegir un área de especialización, ¿cuál sería?", + opciones: [ + { respuesta: "Interfaz y experiencia de usuario", casa: "Frontend" }, + { respuesta: "Desarrollo y mantenimiento del servidor", casa: "Backend" }, + { respuesta: "Aplicaciones móviles", casa: "Mobile" }, + { respuesta: "Ciencia de datos y análisis", casa: "Data" } + ] + } +]; + +function printQuiz() { + const answers: string[] = []; + + const askQuestion = (index: number): void => { + if (index < preguntas.length) { + console.log(preguntas[index].pregunta); + preguntas[index].opciones.forEach((opcion, idx) => { + console.log(`${String.fromCharCode(97 + idx)}: ${opcion.respuesta}`); + }); + rl.question('Selecciona una opción: ', (answer) => { + answers.push(answer); + askQuestion(index + 1); + }); + } else { + rl.close(); + const house = selectHouse(answers); + console.log(`La casa seleccionada es: ${house}`); + } + }; + + askQuestion(0); +} + +function selectHouse(answers: string[]): string { + const countFront = answers.filter((a) => a === 'a').length; + const countBackend = answers.filter((a) => a === 'b').length; + const countMobile = answers.filter((a) => a === 'c').length; + const countData = answers.filter((a) => a === 'd').length; + + const casas: { [key: string]: number } = { Frontend: countFront, Backend: countBackend, Mobile: countMobile, Data: countData }; + const maxCount = Math.max(...Object.values(casas)); + + const posiblesCasas = Object.keys(casas).filter(casa => casas[casa] === maxCount); + + if (posiblesCasas.length > 1) { + console.log("¡Ha sido una decisión complicada!"); + return posiblesCasas[Math.floor(Math.random() * posiblesCasas.length)]; + } + + return posiblesCasas[0]; +} + +function main() { + rl.question('Introduce tu nombre: ', (name) => { + printQuiz(); + }); +} + +main(); From 25ab8f2d144a1b5bed73e1dcad7993f9cc770b2d Mon Sep 17 00:00:00 2001 From: Alecraft8 Date: Sun, 8 Sep 2024 15:11:15 -0400 Subject: [PATCH 052/539] Alecraft8 --- .../python/Alecraft8.py | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/Alecraft8.py diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/Alecraft8.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/Alecraft8.py new file mode 100644 index 0000000000..d8c113acc4 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/Alecraft8.py @@ -0,0 +1,75 @@ +from random import randint + +# Array de Preguntas del Sombrero + +preguntas = [ + "¿Te sientes cómodo manejando servidores?", + "¿Eres bueno con Javascript y CSS?", + "¿Manejas bases de datos?", + "¿Programas en Python, Ruby, C, u otro lenguaje de Backend?", + "¿Te gusta tomar café?", + "¿Haz hecho algun proyecto de páginas web?", + "¿Conoces tecnologías de manejo de datos?", + "¿Te gusta programar programas de escritorio?", + "¿Usas PHP?", + "¿Usas Kotlin y/o Java?" +] + +# Variables de respuestas + +n = "no" +s = "si" +l = "lo manejo" +m = "no mucho" + +# Posibles variaciones de respuestas +# N de Array = N de Preguntas + +responses = { + "Frontend": [n, s, n, n, m, l, n, m, m, m], + "Backend": [l, m, l, s, s, s, l, l, l, l], + "Mobile": [m, l, m, m, l, n, m, n, n, s], + "Data": [s, n, s, l, n, m, s, s, s, n] + } + +houses_points = { + "Frontend": 0, + "Backend": 0, + "Mobile": 0, + "Data": 0 + } + +def main(): + name = input("Ingrese el nombre del alumno: ") + print("Bienvenido al Hogwarts Express, %s!" % (name)) + print("Este es tu sombrero seleccionador, encuentra tu camino hacia la escuela de programación de Hogwarts.") + print("Empezamos las preguntas.") + for pregunta in range(len(preguntas)): + bad_answer = True + while bad_answer: + respuesta = input(preguntas[pregunta] + " (Si/No/No mucho/Lo manejo): ").lower() + if respuesta in ["si", "no", "lo manejo", "no mucho"]: + for i in responses.keys(): + if responses[i][pregunta] == respuesta: + houses_points[i] += 1 + bad_answer = False + else: + print("Respuesta incorrecta, intenta nuevamente.") + + casas_mas_probables = [] + + for i in houses_points.keys(): + casas_mas_probables.append((houses_points[i], i)) + casas_mas_probables.sort(reverse=True) + + casa_mas_probable = 0 + + if casas_mas_probables[0][0] == casas_mas_probables[1][0]: + print("La decision ha sido dificil...") + casa_mas_probable = randint(0,1) + + return name, casas_mas_probables[casa_mas_probable][1] + +if __name__ == "__main__": + nombre_alumno, estancia = main() + print("¡%s, te ha tocado %s!" % (nombre_alumno, estancia)) From 9d3562583f5d1a159d61e58b119ed15a28e2abd8 Mon Sep 17 00:00:00 2001 From: Luis Q Date: Sun, 8 Sep 2024 16:15:41 -0300 Subject: [PATCH 053/539] #00 - Java --- .../java/queralesDev.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/queralesDev.java diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/queralesDev.java b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/queralesDev.java new file mode 100644 index 0000000000..ae365710f3 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/queralesDev.java @@ -0,0 +1,29 @@ + +public class queralesDev { + public static void main(String[] args) { + /* + https://www.java.com/es/ + */ + + /* + Las diferentes sintaxis para crear comentarios son las siguientes + /* Esto es Comentario de varias lineas + //comentario de una sola linea + ///comentario de una sola linea tambien + */ + + int numeroEntero; + String JAVA = "Soy una constante"; + + byte numero; + int numeroEntero2; + short numeroCorto; + long numeroLargo; + double numeroConComa; + char caracter; + float numeroConComa2; + + System.out.printf("Hola soy java"); + + } +} \ No newline at end of file From bba0cbf3995fed6a751991ce64670acf911b80b2 Mon Sep 17 00:00:00 2001 From: gustavo Date: Sun, 8 Sep 2024 21:42:52 +0200 Subject: [PATCH 054/539] Add files via upload archivo para el ejercicio 2 se bash --- .../bash/drvito1977.sh | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/bash/drvito1977.sh diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/bash/drvito1977.sh b/Roadmap/02 - FUNCIONES Y ALCANCE/bash/drvito1977.sh new file mode 100644 index 0000000000..d43bb57587 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/bash/drvito1977.sh @@ -0,0 +1,90 @@ +#!/bin/bash +# Esta línea indica que el script debe ser interpretado por Bash + +# Función sin parámetros ni retorno +function sin_parametros_ni_retorno { + # Imprime un mensaje indicando que esta función no tiene parámetros ni retorno + echo "Función sin parámetros ni retorno" +} + +# Función con un parámetro +function con_un_parametro { + # $1 es el primer parámetro pasado a la función + echo "Función con un parámetro: $1" +} + +# Función con varios parámetros +function con_varios_parametros { + # $1, $2, y $3 son los primeros tres parámetros pasados a la función + echo "Función con varios parámetros: $1, $2, $3" +} + +# Llamada a la función sin parámetros ni retorno +sin_parametros_ni_retorno + +# Llamada a la función con un parámetro +con_un_parametro "Hola" + +# Llamada a la función con varios parámetros +con_varios_parametros "Uno" "Dos" "Tres" + +# Definición de la función 'fa' anidada +function fa { + # Imprime un mensaje indicando que se está llamando a la función 'fa' + echo "Llamando a la función anidada, fa" + + # Definición de la función interna 'fu' dentro de 'fa' + function fu { + # Imprime un mensaje indicando que se está llamando a la función 'fu' + echo "Llamando a la función interna, fu" + } + + # Llama a la función interna 'fu' dentro de la función 'fa' + fu +} + +# Llama a la función 'fa' +fa + +# Calcula el factorial de 'n' usando un bucle while +function factorial { + local n=$1 + local result=1 + while [ $n -gt 1 ]; do + result=$((result * n)) + ((n--)) + done + # Devuelve el resultado del factorial + echo $result +} +factorial 5 # Llama a la función 'factorial' con el argumento 5 + +# Función que recibe dos parámetros de tipo cadena de texto y retorna un número +function imprimir_numeros { + local cadena1=$1 + local cadena2=$2 + local contador=0 + + for ((i=1; i<=100; i++)); do + if ((i % 3 == 0 && i % 5 == 0)); then + echo "${cadena1}${cadena2}" + elif ((i % 3 == 0)); then + echo "$cadena1" + elif ((i % 5 == 0)); then + echo "$cadena2" + else + echo "$i" + ((contador++)) + fi + done + + # Retorna el número de veces que se ha impreso el número en lugar de los textos + return $contador +} + +# Llamada a la función 'imprimir_numeros' con los parámetros "Fizz" y "Buzz" +imprimir_numeros "Fizz" "Buzz" +# Captura el valor de retorno de la función +contador=$? +echo "El número de veces que se ha impreso el número en lugar de los textos es: $contador" + From 839218cc367227290b410b6ffe5bfea7a08fb24f Mon Sep 17 00:00:00 2001 From: kenysdev Date: Sun, 8 Sep 2024 16:07:36 -0500 Subject: [PATCH 055/539] 36 - Python - EL SOMBRERO SELECCIONADOR --- .../python/kenysdev.py | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/kenysdev.py diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/kenysdev.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/kenysdev.py new file mode 100644 index 0000000000..c807322d13 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/kenysdev.py @@ -0,0 +1,100 @@ +# _____________________________________ +# https://github.com/kenysdev +# 2024 - Python +# _____________________________________ +# 36 EL SOMBRERO SELECCIONADOR +# ------------------------------------ +# * Cada 1 de septiembre, el Hogwarts Express parte hacia la escuela +# * de programación de Hogwarts para magos y brujas del código. +# * En ella, su famoso sombrero seleccionador ayuda a los programadores +# * a encontrar su camino... +# * Desarrolla un programa que simule el comportamiento del sombrero. +# * Requisitos: +# * 1. El sombrero realizará 10 preguntas para determinar la casa del alumno. +# * 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data. +# * (Puedes elegir las que quieras) +# * Acciones: +# * 1. Crea un programa que solicite el nombre del alumno y realice 10 +# * preguntas, con cuatro posibles respuestas cada una. +# * 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección). +# * 3. Una vez finalizado, el sombrero indica el nombre del alumno +# * y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria, +# * pero indicándole al alumno que la decisión ha sido complicada). + +from random import choice +from typing import List + +HOUSES = ["Frontend", "Backend", "Mobile", "Data"] + +# Nota: Preguntas y respuestas generadas por IA + +QUESTIONS = [ + "¿Qué te atrae más?", + "¿Qué superhéroe de la programación te gustaría ser?", + "En un proyecto de software, ¿qué rol te emociona más?", + "Si tu código fuera una obra de arte, ¿qué estilo tendría?", + "¿Qué animal de programación serías?", + "En una hackathon, ¿qué tipo de proyecto propondrías?", + "Si tu carrera en tech fuera una película, ¿de qué género sería?", + "¿Qué herramienta de programación no puede faltar en tu caja de herramientas digital?", + "Si pudieras resolver un gran problema en tech, ¿cuál elegirías?", + "¿Qué tipo de equipo prefieres?" +] + +ANSWERS = [ + ["Crear experiencias visuales.", "Solucionar problemas de funcionamiento.", "Innovar en dispositivos portátiles.", "Descubrir tendencias ocultas."], + ["Diseñador de Interfaces, creando experiencias asombrosas", "Arquitecto de Sistemas, construyendo estructuras robustas", "Mago de Apps, conjurando soluciones móviles", "Explorador de Datos, descubriendo tesoros ocultos"], + ["Director de UX, orquestando la sinfonía visual", "Ingeniero de Backend, dominando la lógica del servidor", "Desarrollador de Apps, llevando la potencia al bolsillo", "Científico de Datos, descifrando los secretos de la información"], + ["Minimalismo elegante, como una landing page perfecta", "Arquitectura compleja, como un sistema distribuido", "Diseño adaptativo, fluyendo en diferentes dispositivos", "Visualización de datos, pintando historias con números"], + ["Un camaleón, adaptándome a diferentes frameworks", "Un pulpo, manejando múltiples servicios a la vez", "Un colibrí, ágil y siempre en movimiento", "Una lechuza, analizando datos con sabiduría"], + ["Una web app que revolucione la experiencia del usuario", "Un sistema de IA que optimice procesos backend", "Una app móvil que cambie la forma de interactuar con el mundo", "Un proyecto de big data que prediga tendencias futuras"], + ["Comedia romántica con JavaScript y CSS", "Thriller de ciencia ficción con microservicios", "Aventura de acción en el mundo de las apps", "Documental profundo sobre el universo de los datos"], + ["Un editor de código con plugins para diseño visual", "Una robusta suite de testing y depuración", "Un emulador multi-dispositivo de última generación", "Una plataforma de análisis de datos en tiempo real"], + ["Hacer que la accesibilidad web sea universal", "Crear una arquitectura de software autorreparable", "Desarrollar una plataforma de AR/VR para educación móvil", "Construir un modelo de IA ético y transparente"], + ["Creativos enfocados en diseño.", "Técnicos que construyen sistemas.", "Especialistas en aplicaciones móviles.", "Expertos en datos y análisis."] +] + +class SortingHat: + def __init__(self, name: str): + self.name = name + self.scores = {house: 0 for house in HOUSES} + + def ask_question(self, q_num: int, question: str, answers: List[str]): + print(f"\n#{q_num}: {question}") + for i, answer in enumerate(answers, start=1): + print(f"{i}) {answer}") + + while True: + try: + choice = int(input("Elige tu respuesta (1-4): ")) - 1 + if 0 <= choice < len(HOUSES): + self.scores[HOUSES[choice]] += 1 + break + else: + print("Por favor, elige un número entre 1 y 4.") + except ValueError: + print("Por favor, ingresa un número válido.") + + def select_house(self) -> str: + max_score = max(self.scores.values()) + top_houses = [house for house, score in self.scores.items() if score == max_score] + + if len(top_houses) > 1: + print("\nLa decisión ha sido complicada.") + return choice(top_houses) + return top_houses[0] + +def main(): + print("EL SOMBRERO SELECCIONADOR") + name = input("¿Cuál es tu nombre? : ") + hat = SortingHat(name) + + for i, (question, answers) in enumerate(zip(QUESTIONS, ANSWERS), start=1): + hat.ask_question(i, question, answers) + + selected_house = hat.select_house() + print(f"\n'{name}' pertenecerá a la casa '{selected_house}'\n") + +if __name__ == "__main__": + main() + From 9ee6b11da0b1f11a52fbc8f1eec940708f6ab171 Mon Sep 17 00:00:00 2001 From: kenysdev Date: Sun, 8 Sep 2024 16:39:15 -0500 Subject: [PATCH 056/539] 36 - C# - EL SOMBRERO SELECCIONADOR --- .../c#/kenysdev.cs | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/c#/kenysdev.cs diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/c#/kenysdev.cs b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/c#/kenysdev.cs new file mode 100644 index 0000000000..0f3cc8a00d --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/c#/kenysdev.cs @@ -0,0 +1,118 @@ +namespace exs36; +/* +_____________________________________ +https://github.com/kenysdev +2024 - C# +_____________________________________ +EL SOMBRERO SELECCIONADOR +------------------------------------ +* Cada 1 de septiembre, el Hogwarts Express parte hacia la escuela +* de programación de Hogwarts para magos y brujas del código. +* En ella, su famoso sombrero seleccionador ayuda a los programadores +* a encontrar su camino... +* Desarrolla un programa que simule el comportamiento del sombrero. +* Requisitos: +* 1. El sombrero realizará 10 preguntas para determinar la casa del alumno. +* 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data. +* (Puedes elegir las que quieras) +* Acciones: +* 1. Crea un programa que solicite el nombre del alumno y realice 10 +* preguntas, con cuatro posibles respuestas cada una. +* 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección). +* 3. Una vez finalizado, el sombrero indica el nombre del alumno +* y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria, +* pero indicándole al alumno que la decisión ha sido complicada). +*/ + +using System; +using System.Collections.Generic; +using System.Linq; + +class Program +{ + private static readonly string[] HOUSES = ["Frontend", "Backend", "Mobile", "Data"]; + + // NOTA: Preguntas y respuestas generadas por IA + private static readonly string[] QUESTIONS = [ + "¿Qué te atrae más?", + "¿Qué superhéroe de la programación te gustaría ser?", + "En un proyecto de software, ¿qué rol te emociona más?", + "Si tu código fuera una obra de arte, ¿qué estilo tendría?", + "¿Qué animal de programación serías?", + "En una hackathon, ¿qué tipo de proyecto propondrías?", + "Si tu carrera en tech fuera una película, ¿de qué género sería?", + "¿Qué herramienta de programación no puede faltar en tu caja de herramientas digital?", + "Si pudieras resolver un gran problema en tech, ¿cuál elegirías?", + "¿Qué tipo de equipo prefieres?" + ]; + + private static readonly string[][] ANSWERS = [ + ["Crear experiencias visuales.", "Solucionar problemas de funcionamiento.", "Innovar en dispositivos portátiles.", "Descubrir tendencias ocultas."], + ["Diseñador de Interfaces, creando experiencias asombrosas", "Arquitecto de Sistemas, construyendo estructuras robustas", "Mago de Apps, conjurando soluciones móviles", "Explorador de Datos, descubriendo tesoros ocultos"], + ["Director de UX, orquestando la sinfonía visual", "Ingeniero de Backend, dominando la lógica del servidor", "Desarrollador de Apps, llevando la potencia al bolsillo", "Científico de Datos, descifrando los secretos de la información"], + ["Minimalismo elegante, como una landing page perfecta", "Arquitectura compleja, como un sistema distribuido", "Diseño adaptativo, fluyendo en diferentes dispositivos", "Visualización de datos, pintando historias con números"], + ["Un camaleón, adaptándome a diferentes frameworks", "Un pulpo, manejando múltiples servicios a la vez", "Un colibrí, ágil y siempre en movimiento", "Una lechuza, analizando datos con sabiduría"], + ["Una web app que revolucione la experiencia del usuario", "Un sistema de IA que optimice procesos backend", "Una app móvil que cambie la forma de interactuar con el mundo", "Un proyecto de big data que prediga tendencias futuras"], + ["Comedia romántica con JavaScript y CSS", "Thriller de ciencia ficción con microservicios", "Aventura de acción en el mundo de las apps", "Documental profundo sobre el universo de los datos"], + ["Un editor de código con plugins para diseño visual", "Una robusta suite de testing y depuración", "Un emulador multi-dispositivo de última generación", "Una plataforma de análisis de datos en tiempo real"], + ["Hacer que la accesibilidad web sea universal", "Crear una arquitectura de software autorreparable", "Desarrollar una plataforma de AR/VR para educación móvil", "Construir un modelo de IA ético y transparente"], + ["Creativos enfocados en diseño.", "Técnicos que construyen sistemas.", "Especialistas en aplicaciones móviles.", "Expertos en datos y análisis."] + ]; + + class SortingHat + { + private readonly Dictionary scores = HOUSES.ToDictionary(house => house, _ => 0); + + public void AskQuestion(int qNum, string question, string[] answers) + { + Console.WriteLine($"\n#{qNum}: {question}"); + for (int i = 0; i < answers.Length; i++) + { + Console.WriteLine($"{i + 1}) {answers[i]}"); + } + + while (true) + { + Console.Write("Elige tu respuesta (1-4): "); + if (int.TryParse(Console.ReadLine(), out int choice) && choice >= 1 && choice <= 4) + { + scores[HOUSES[choice - 1]]++; + break; + } + else + { + Console.WriteLine("Por favor, elige un número entre 1 y 4."); + } + } + } + + public string SelectHouse() + { + int maxScore = scores.Values.Max(); + var topHouses = scores.Where(kv => kv.Value == maxScore).Select(kv => kv.Key).ToList(); + + if (topHouses.Count > 1) + { + Console.WriteLine("\nLa decisión ha sido complicada."); + return topHouses[new Random().Next(topHouses.Count)]; + } + return topHouses[0]; + } + } + + static void Main() + { + Console.WriteLine("EL SOMBRERO SELECCIONADOR"); + Console.Write("¿Cuál es tu nombre? : "); + string name = Console.ReadLine() ?? string.Empty; + var hat = new SortingHat(); + + for (int i = 0; i < QUESTIONS.Length; i++) + { + hat.AskQuestion(i + 1, QUESTIONS[i], ANSWERS[i]); + } + + string selectedHouse = hat.SelectHouse(); + Console.WriteLine($"\n'{name}' pertenecerá a la casa '{selectedHouse}'\n"); + } +} From 0b8046409f321af9754f89277b443cba9cd553ee Mon Sep 17 00:00:00 2001 From: Erysnell Gonzalez Perez <118245971+Erysnell@users.noreply.github.com> Date: Sun, 8 Sep 2024 17:59:33 -0400 Subject: [PATCH 057/539] Add files via upload #00-Javascript --- .../javascript/Erysnell.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/Erysnell.js diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/Erysnell.js b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/Erysnell.js new file mode 100644 index 0000000000..5724de5752 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/Erysnell.js @@ -0,0 +1,15 @@ +// https://developer.mozilla.org/es/docs/Web/JavaScript + +// comentarios de una sola linea +/*comentarios +de varias lineas*/ + +let variable; +const constante = 5; + +let number = 1; +let string = 'string'; +let boolean = true; +let array = [1,2,3]; + +console.log("Hola Javascript"); \ No newline at end of file From 703637b9e5ea3f0083ee94eccde834b3eb104d30 Mon Sep 17 00:00:00 2001 From: kenysdev Date: Sun, 8 Sep 2024 16:58:30 -0500 Subject: [PATCH 058/539] 36 - vb.net - EL SOMBRERO SELECCIONADOR --- .../vb.net/kenysdev.vb | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/vb.net/kenysdev.vb diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/vb.net/kenysdev.vb b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/vb.net/kenysdev.vb new file mode 100644 index 0000000000..633db889f5 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/vb.net/kenysdev.vb @@ -0,0 +1,105 @@ +' _____________________________________ +' https://github.com/kenysdev +' 2024 - vb.net +' _____________________________________ +' 36 EL SOMBRERO SELECCIONADOR +' ------------------------------------ +' * Cada 1 de septiembre, el Hogwarts Express parte hacia la escuela +' * de programación de Hogwarts para magos y brujas del código. +' * En ella, su famoso sombrero seleccionador ayuda a los programadores +' * a encontrar su camino... +' * Desarrolla un programa que simule el comportamiento del sombrero. +' * Requisitos: +' * 1. El sombrero realizará 10 preguntas para determinar la casa del alumno. +' * 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data. +' * (Puedes elegir las que quieras) +' * Acciones: +' * 1. Crea un programa que solicite el nombre del alumno y realice 10 +' * preguntas, con cuatro posibles respuestas cada una. +' * 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección). +' * 3. Una vez finalizado, el sombrero indica el nombre del alumno +' * y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria, +' * pero indicándole al alumno que la decisión ha sido complicada). + + +Module Program + Private ReadOnly HOUSES As String() = {"Frontend", "Backend", "Mobile", "Data"} + + ' NOTA: Preguntas y respuestas generadas por IA + Private ReadOnly QUESTIONS As String() = { + "¿Qué te atrae más?", + "¿Qué superhéroe de la programación te gustaría ser?", + "En un proyecto de software, ¿qué rol te emociona más?", + "Si tu código fuera una obra de arte, ¿qué estilo tendría?", + "¿Qué animal de programación serías?", + "En una hackathon, ¿qué tipo de proyecto propondrías?", + "Si tu carrera en tech fuera una película, ¿de qué género sería?", + "¿Qué herramienta de programación no puede faltar en tu caja de herramientas digital?", + "Si pudieras resolver un gran problema en tech, ¿cuál elegirías?", + "¿Qué tipo de equipo prefieres?" + } + + Private ReadOnly ANSWERS As String()() = { + New String() {"Crear experiencias visuales.", "Solucionar problemas de funcionamiento.", "Innovar en dispositivos portátiles.", "Descubrir tendencias ocultas."}, + New String() {"Diseñador de Interfaces, creando experiencias asombrosas", "Arquitecto de Sistemas, construyendo estructuras robustas", "Mago de Apps, conjurando soluciones móviles", "Explorador de Datos, descubriendo tesoros ocultos"}, + New String() {"Director de UX, orquestando la sinfonía visual", "Ingeniero de Backend, dominando la lógica del servidor", "Desarrollador de Apps, llevando la potencia al bolsillo", "Científico de Datos, descifrando los secretos de la información"}, + New String() {"Minimalismo elegante, como una landing page perfecta", "Arquitectura compleja, como un sistema distribuido", "Diseño adaptativo, fluyendo en diferentes dispositivos", "Visualización de datos, pintando historias con números"}, + New String() {"Un camaleón, adaptándome a diferentes frameworks", "Un pulpo, manejando múltiples servicios a la vez", "Un colibrí, ágil y siempre en movimiento", "Una lechuza, analizando datos con sabiduría"}, + New String() {"Una web app que revolucione la experiencia del usuario", "Un sistema de IA que optimice procesos backend", "Una app móvil que cambie la forma de interactuar con el mundo", "Un proyecto de big data que prediga tendencias futuras"}, + New String() {"Comedia romántica con JavaScript y CSS", "Thriller de ciencia ficción con microservicios", "Aventura de acción en el mundo de las apps", "Documental profundo sobre el universo de los datos"}, + New String() {"Un editor de código con plugins para diseño visual", "Una robusta suite de testing y depuración", "Un emulador multi-dispositivo de última generación", "Una plataforma de análisis de datos en tiempo real"}, + New String() {"Hacer que la accesibilidad web sea universal", "Crear una arquitectura de software autorreparable", "Desarrollar una plataforma de AR/VR para educación móvil", "Construir un modelo de IA ético y transparente"}, + New String() {"Creativos enfocados en diseño.", "Técnicos que construyen sistemas.", "Especialistas en aplicaciones móviles.", "Expertos en datos y análisis."} + } + + Private Class SortingHat + Private ReadOnly scores As Dictionary(Of String, Integer) + + Public Sub New() + scores = HOUSES.ToDictionary(Function(house) house, Function(house) 0) + End Sub + + Public Sub AskQuestion(qNum As Integer, question As String, answers As String()) + Console.WriteLine($"{vbCrLf}#{qNum}: {question}") + For i As Integer = 0 To answers.Length - 1 + Console.WriteLine($"{i + 1}) {answers(i)}") + Next + + While True + Console.Write("Elige tu respuesta (1-4): ") + Dim choice As Integer + If Integer.TryParse(Console.ReadLine(), choice) AndAlso choice >= 1 AndAlso choice <= 4 Then + scores(HOUSES(choice - 1)) += 1 + Exit While + Else + Console.WriteLine("Por favor, elige un número entre 1 y 4.") + End If + End While + End Sub + + Public Function SelectHouse() As String + Dim maxScore = scores.Values.Max() + Dim topHouses = scores.Where(Function(kv) kv.Value = maxScore).Select(Function(kv) kv.Key).ToList() + + If topHouses.Count > 1 Then + Console.WriteLine(vbCrLf & "La decisión ha sido complicada.") + Return topHouses(New Random().Next(topHouses.Count)) + End If + Return topHouses(0) + End Function + End Class + + Sub Main() + Console.WriteLine("EL SOMBRERO SELECCIONADOR") + Console.Write("¿Cuál es tu nombre? : ") + Dim name As String = If(Console.ReadLine(), String.Empty) + Dim hat As New SortingHat() + + For i As Integer = 0 To QUESTIONS.Length - 1 + hat.AskQuestion(i + 1, QUESTIONS(i), ANSWERS(i)) + Next + + Dim selectedHouse As String = hat.SelectHouse() + Console.WriteLine($"{vbCrLf}'{name}' pertenecerá a la casa '{selectedHouse}'{vbCrLf}") + End Sub +End Module From 05c2c9dad539e08f5a56a8a72e0024a0e24606d0 Mon Sep 17 00:00:00 2001 From: kenysdev Date: Sun, 8 Sep 2024 17:17:15 -0500 Subject: [PATCH 059/539] 36 - Rust - EL SOMBRERO SELECCIONADOR --- .../rust/kenysdev.rs | 130 ++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/rust/kenysdev.rs diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/rust/kenysdev.rs b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/rust/kenysdev.rs new file mode 100644 index 0000000000..0c86b286a5 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/rust/kenysdev.rs @@ -0,0 +1,130 @@ +/* +_____________________________________ +https://github.com/kenysdev +2024 - Rust +_____________________________________ +36 EL SOMBRERO SELECCIONADOR +------------------------------------ +* Cada 1 de septiembre, el Hogwarts Express parte hacia la escuela +* de programación de Hogwarts para magos y brujas del código. +* En ella, su famoso sombrero seleccionador ayuda a los programadores +* a encontrar su camino... +* Desarrolla un programa que simule el comportamiento del sombrero. +* Requisitos: +* 1. El sombrero realizará 10 preguntas para determinar la casa del alumno. +* 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data. +* (Puedes elegir las que quieras) +* Acciones: +* 1. Crea un programa que solicite el nombre del alumno y realice 10 +* preguntas, con cuatro posibles respuestas cada una. +* 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección). +* 3. Una vez finalizado, el sombrero indica el nombre del alumno +* y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria, +* pero indicándole al alumno que la decisión ha sido complicada). +*/ + +use std::collections::HashMap; +use std::io::{self, Write}; + +// [dependencies] +// rand = "0.8.5" +// https://crates.io/crates/rand +use rand::Rng; + +const HOUSES: [&str; 4] = ["Frontend", "Backend", "Mobile", "Data"]; + +// NOTA: Preguntas y respuestas generadas por IA +const QUESTIONS: [&str; 10] = [ + "¿Qué te atrae más?", + "¿Qué superhéroe de la programación te gustaría ser?", + "En un proyecto de software, ¿qué rol te emociona más?", + "Si tu código fuera una obra de arte, ¿qué estilo tendría?", + "¿Qué animal de programación serías?", + "En una hackathon, ¿qué tipo de proyecto propondrías?", + "Si tu carrera en tech fuera una película, ¿de qué género sería?", + "¿Qué herramienta de programación no puede faltar en tu caja de herramientas digital?", + "Si pudieras resolver un gran problema en tech, ¿cuál elegirías?", + "¿Qué tipo de equipo prefieres?", +]; + +const ANSWERS: [[&str; 4]; 10] = [ + ["Crear experiencias visuales.", "Solucionar problemas de funcionamiento.", "Innovar en dispositivos portátiles.", "Descubrir tendencias ocultas."], + ["Diseñador de Interfaces, creando experiencias asombrosas", "Arquitecto de Sistemas, construyendo estructuras robustas", "Mago de Apps, conjurando soluciones móviles", "Explorador de Datos, descubriendo tesoros ocultos"], + ["Director de UX, orquestando la sinfonía visual", "Ingeniero de Backend, dominando la lógica del servidor", "Desarrollador de Apps, llevando la potencia al bolsillo", "Científico de Datos, descifrando los secretos de la información"], + ["Minimalismo elegante, como una landing page perfecta", "Arquitectura compleja, como un sistema distribuido", "Diseño adaptativo, fluyendo en diferentes dispositivos", "Visualización de datos, pintando historias con números"], + ["Un camaleón, adaptándome a diferentes frameworks", "Un pulpo, manejando múltiples servicios a la vez", "Un colibrí, ágil y siempre en movimiento", "Una lechuza, analizando datos con sabiduría"], + ["Una web app que revolucione la experiencia del usuario", "Un sistema de IA que optimice procesos backend", "Una app móvil que cambie la forma de interactuar con el mundo", "Un proyecto de big data que prediga tendencias futuras"], + ["Comedia romántica con JavaScript y CSS", "Thriller de ciencia ficción con microservicios", "Aventura de acción en el mundo de las apps", "Documental profundo sobre el universo de los datos"], + ["Un editor de código con plugins para diseño visual", "Una robusta suite de testing y depuración", "Un emulador multi-dispositivo de última generación", "Una plataforma de análisis de datos en tiempo real"], + ["Hacer que la accesibilidad web sea universal", "Crear una arquitectura de software autorreparable", "Desarrollar una plataforma de AR/VR para educación móvil", "Construir un modelo de IA ético y transparente"], + ["Creativos enfocados en diseño.", "Técnicos que construyen sistemas.", "Especialistas en aplicaciones móviles.", "Expertos en datos y análisis."], +]; + +struct SortingHat { + scores: HashMap, +} + +impl SortingHat { + fn new() -> Self { + let scores = HOUSES.iter().map(|&house| (house.to_string(), 0)).collect(); + SortingHat { scores } + } + + fn ask_question(&mut self, q_num: usize, question: &str, answers: &[&str]) { + println!("\n#{}: {}", q_num, question); + for (i, answer) in answers.iter().enumerate() { + println!("{}) {}", i + 1, answer); + } + + loop { + print!("Elige tu respuesta (1-4): "); + io::stdout().flush().unwrap(); + + let mut choice = String::new(); + io::stdin().read_line(&mut choice).unwrap(); + + if let Ok(num) = choice.trim().parse::() { + if num >= 1 && num <= 4 { + *self.scores.get_mut(HOUSES[num - 1]).unwrap() += 1; + break; + } + } + println!("Por favor, elige un número entre 1 y 4."); + } + } + + fn select_house(&self) -> String { + let max_score = self.scores.values().max().unwrap(); + let top_houses: Vec<_> = self.scores + .iter() + .filter(|(_, &score)| score == *max_score) + .map(|(house, _)| house) + .collect(); + + if top_houses.len() > 1 { + println!("\nLa decisión ha sido complicada."); + top_houses[rand::thread_rng().gen_range(0..top_houses.len())].clone() + } else { + top_houses[0].clone() + } + } +} + +fn main() { + println!("EL SOMBRERO SELECCIONADOR"); + print!("¿Cuál es tu nombre? : "); + io::stdout().flush().unwrap(); + + let mut name = String::new(); + io::stdin().read_line(&mut name).unwrap(); + let name = name.trim(); + + let mut hat = SortingHat::new(); + + for (i, (&question, answers)) in QUESTIONS.iter().zip(ANSWERS.iter()).enumerate() { + hat.ask_question(i + 1, question, answers); + } + + let selected_house = hat.select_house(); + println!("\n'{}' pertenecerá a la casa '{}'\n", name, selected_house); +} From 90405a96ccb3bde90f2d552d7aab143e2b629e4d Mon Sep 17 00:00:00 2001 From: mouredev Date: Mon, 9 Sep 2024 00:15:51 +0000 Subject: [PATCH 060/539] Update stats --- Roadmap/stats.json | 204 +++++++++++++++++++++++---------------------- 1 file changed, 105 insertions(+), 99 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index 627a83a17d..d3b641f0cc 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,8 +1,8 @@ { "challenges_total": 37, "languages_total": 48, - "files_total": 6870, - "users_total": 1150, + "files_total": 6879, + "users_total": 1151, "challenges_ranking": [ { "order": 1, @@ -187,57 +187,57 @@ { "order": 37, "name": "36 - EL SOMBRERO SELECCIONADOR", - "count": 13 + "count": 22 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 2959, - "percentage": 43.07 + "count": 2962, + "percentage": 43.06 }, { "order": 2, "name": "javascript", - "count": 1369, - "percentage": 19.93 + "count": 1370, + "percentage": 19.92 }, { "order": 3, "name": "java", "count": 614, - "percentage": 8.94 + "percentage": 8.93 }, { "order": 4, "name": "typescript", - "count": 302, + "count": 303, "percentage": 4.4 }, { "order": 5, "name": "c#", - "count": 252, - "percentage": 3.67 + "count": 253, + "percentage": 3.68 }, { "order": 6, "name": "kotlin", "count": 212, - "percentage": 3.09 + "percentage": 3.08 }, { "order": 7, "name": "go", "count": 212, - "percentage": 3.09 + "percentage": 3.08 }, { "order": 8, "name": "swift", "count": 166, - "percentage": 2.42 + "percentage": 2.41 }, { "order": 9, @@ -247,15 +247,15 @@ }, { "order": 10, - "name": "c++", + "name": "rust", "count": 113, "percentage": 1.64 }, { "order": 11, - "name": "rust", - "count": 112, - "percentage": 1.63 + "name": "c++", + "count": 113, + "percentage": 1.64 }, { "order": 12, @@ -266,8 +266,8 @@ { "order": 13, "name": "dart", - "count": 48, - "percentage": 0.7 + "count": 49, + "percentage": 0.71 }, { "order": 14, @@ -278,8 +278,8 @@ { "order": 15, "name": "vb.net", - "count": 36, - "percentage": 0.52 + "count": 37, + "percentage": 0.54 }, { "order": 16, @@ -490,7 +490,7 @@ { "order": 2, "name": "kenysdev", - "count": 144, + "count": 148, "languages": 4 }, { @@ -1143,334 +1143,334 @@ }, { "order": 111, + "name": "redom69", + "count": 14, + "languages": 4 + }, + { + "order": 112, "name": "andresgcastillo", "count": 14, "languages": 2 }, { - "order": 112, + "order": 113, "name": "ygriegasb", "count": 14, "languages": 2 }, { - "order": 113, + "order": 114, "name": "gonzadev28", "count": 14, "languages": 2 }, { - "order": 114, + "order": 115, "name": "elmer125", "count": 14, "languages": 1 }, { - "order": 115, + "order": 116, "name": "vincentrodriguezr", "count": 14, "languages": 1 }, { - "order": 116, + "order": 117, "name": "mikelm2020", "count": 14, "languages": 1 }, { - "order": 117, + "order": 118, "name": "gordo-master", "count": 14, "languages": 1 }, { - "order": 118, + "order": 119, "name": "paula2409", "count": 14, "languages": 1 }, { - "order": 119, + "order": 120, "name": "volumidev", "count": 13, "languages": 3 }, { - "order": 120, + "order": 121, "name": "diegoibb", "count": 13, "languages": 3 }, { - "order": 121, + "order": 122, "name": "manjaitan", "count": 13, "languages": 2 }, { - "order": 122, + "order": 123, "name": "jesuses1312", "count": 13, "languages": 2 }, { - "order": 123, + "order": 124, "name": "ocram1304", "count": 13, "languages": 1 }, { - "order": 124, + "order": 125, "name": "dan-corbo", "count": 13, "languages": 1 }, { - "order": 125, + "order": 126, "name": "juanchernandezdev", "count": 13, "languages": 1 }, { - "order": 126, + "order": 127, "name": "c-gabs", "count": 13, "languages": 1 }, { - "order": 127, + "order": 128, "name": "jav-mol", "count": 13, "languages": 1 }, { - "order": 128, + "order": 129, "name": "tomu98", "count": 13, "languages": 1 }, { - "order": 129, + "order": 130, "name": "neosv", "count": 13, "languages": 1 }, { - "order": 130, + "order": 131, "name": "julian98789", "count": 13, "languages": 1 }, { - "order": 131, + "order": 132, "name": "juanrcoder", "count": 12, "languages": 2 }, { - "order": 132, + "order": 133, "name": "keltoi-dev", "count": 12, "languages": 2 }, { - "order": 133, + "order": 134, "name": "andresmcardenas", "count": 12, "languages": 2 }, { - "order": 134, + "order": 135, "name": "a-mayans", "count": 12, "languages": 2 }, { - "order": 135, + "order": 136, "name": "deathwing696", "count": 12, "languages": 2 }, { - "order": 136, + "order": 137, "name": "pancratzia", "count": 12, "languages": 1 }, { - "order": 137, + "order": 138, "name": "jeronimocardu", "count": 12, "languages": 1 }, { - "order": 138, + "order": 139, "name": "evilpotato04", "count": 12, "languages": 1 }, { - "order": 139, + "order": 140, "name": "javierjoyera", "count": 12, "languages": 1 }, { - "order": 140, + "order": 141, "name": "dataciriano", "count": 12, "languages": 1 }, { - "order": 141, + "order": 142, "name": "josealberto13", "count": 12, "languages": 1 }, { - "order": 142, + "order": 143, "name": "clmiranda", "count": 12, "languages": 1 }, { - "order": 143, + "order": 144, "name": "andrewcodev", "count": 12, "languages": 1 }, { - "order": 144, + "order": 145, "name": "javierfiestasbotella", "count": 12, "languages": 1 }, { - "order": 145, + "order": 146, "name": "pipe281", "count": 12, "languages": 1 }, { - "order": 146, + "order": 147, "name": "jchavescaceres", "count": 11, "languages": 2 }, { - "order": 147, + "order": 148, "name": "switchdays", "count": 11, "languages": 2 }, { - "order": 148, + "order": 149, "name": "arkmiguel379", "count": 11, "languages": 2 }, { - "order": 149, + "order": 150, "name": "ialmontedr0", "count": 11, "languages": 1 }, { - "order": 150, + "order": 151, "name": "charlerodriguez3", "count": 11, "languages": 1 }, { - "order": 151, + "order": 152, "name": "oleojake", "count": 11, "languages": 1 }, { - "order": 152, + "order": 153, "name": "7r0n1x", "count": 11, "languages": 1 }, { - "order": 153, + "order": 154, "name": "alainmartz", "count": 11, "languages": 1 }, { - "order": 154, + "order": 155, "name": "warclimb", "count": 11, "languages": 1 }, { - "order": 155, + "order": 156, "name": "mirandayuber", "count": 11, "languages": 1 }, { - "order": 156, + "order": 157, "name": "m1l0j05", "count": 11, "languages": 1 }, { - "order": 157, + "order": 158, "name": "59822", "count": 11, "languages": 1 }, { - "order": 158, + "order": 159, "name": "mvidalb", "count": 11, "languages": 1 }, { - "order": 159, + "order": 160, "name": "majinka10", "count": 11, "languages": 1 }, { - "order": 160, + "order": 161, "name": "jeigar2", "count": 11, "languages": 1 }, { - "order": 161, + "order": 162, "name": "abelade", "count": 11, "languages": 1 }, { - "order": 162, + "order": 163, "name": "gustavogomez19", "count": 11, "languages": 1 }, { - "order": 163, + "order": 164, "name": "evanz2608", "count": 11, "languages": 1 }, { - "order": 164, + "order": 165, "name": "bertomp", "count": 10, "languages": 5 }, - { - "order": 165, - "name": "redom69", - "count": 10, - "languages": 4 - }, { "order": 166, "name": "othamae", @@ -7275,108 +7275,114 @@ }, { "order": 1133, - "name": "greenalpak", + "name": "alecraft8", "count": 1, "languages": 1 }, { "order": 1134, - "name": "juampaweb", + "name": "greenalpak", "count": 1, "languages": 1 }, { "order": 1135, - "name": "girngoma", + "name": "juampaweb", "count": 1, "languages": 1 }, { "order": 1136, - "name": "jjaljuria", + "name": "girngoma", "count": 1, "languages": 1 }, { "order": 1137, - "name": "ddaniel27", + "name": "jjaljuria", "count": 1, "languages": 1 }, { "order": 1138, - "name": "dfc201692", + "name": "ddaniel27", "count": 1, "languages": 1 }, { "order": 1139, - "name": "angelramirez02", + "name": "dfc201692", "count": 1, "languages": 1 }, { "order": 1140, - "name": "lesclaz", + "name": "angelramirez02", "count": 1, "languages": 1 }, { "order": 1141, - "name": "giovannipeirone", + "name": "lesclaz", "count": 1, "languages": 1 }, { "order": 1142, - "name": "whiterbb", + "name": "giovannipeirone", "count": 1, "languages": 1 }, { "order": 1143, - "name": "adridiazz", + "name": "whiterbb", "count": 1, "languages": 1 }, { "order": 1144, - "name": "jesus2421", + "name": "adridiazz", "count": 1, "languages": 1 }, { "order": 1145, - "name": "euu92", + "name": "jesus2421", "count": 1, "languages": 1 }, { "order": 1146, - "name": "santyjl44", + "name": "euu92", "count": 1, "languages": 1 }, { "order": 1147, - "name": "luism95", + "name": "santyjl44", "count": 1, "languages": 1 }, { "order": 1148, - "name": "ouendinga", + "name": "luism95", "count": 1, "languages": 1 }, { "order": 1149, - "name": "melonconyogurt", + "name": "ouendinga", "count": 1, "languages": 1 }, { "order": 1150, + "name": "melonconyogurt", + "count": 1, + "languages": 1 + }, + { + "order": 1151, "name": "mantaras96", "count": 1, "languages": 1 From c919236035693bf245b1944ab3156bc2e54f8661 Mon Sep 17 00:00:00 2001 From: Cesar Carmona Date: Sun, 8 Sep 2024 18:24:53 -0600 Subject: [PATCH 061/539] #07 - JavaScript --- .../javascript/CesarCarmona30.js | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 Roadmap/07 - PILAS Y COLAS/javascript/CesarCarmona30.js diff --git a/Roadmap/07 - PILAS Y COLAS/javascript/CesarCarmona30.js b/Roadmap/07 - PILAS Y COLAS/javascript/CesarCarmona30.js new file mode 100644 index 0000000000..1521879a8f --- /dev/null +++ b/Roadmap/07 - PILAS Y COLAS/javascript/CesarCarmona30.js @@ -0,0 +1,106 @@ +/** + * EJERCICIO + */ + +// PILA +let stack = []; + +// Push +stack.push('Cucumber'); +stack.push('Radish'); +stack.push('Tomato'); +stack.push('Orange'); +stack.push('Apple'); + +console.table(stack); + +// Pop +stack.pop() +console.table(stack); +stack.pop() +console.table(stack); + +// COLA +let queue = []; + +// Enqueue +queue.push('Banana'); +queue.push('Melon'); +queue.push('Strawberry'); +queue.push('Onion'); +queue.push('Garlic'); +console.table(queue); + +// Dequeue +queue.shift(); +console.table(queue); +queue.shift(); +console.table(queue); + +//PILA - Navegador +//COLA - Impresora + +class WebBrowser { + constructor() { + this.pages = []; + this.index = null + this.currentPage = null; + } + + addPage(page) { + this.pages.push(page); + this.index = this.pages.length - 1; + this.currentPage = this.pages[this.index]; + } + + goForward() { + this.currentPage = this.pages[this.index++]; + if (this.currentPage != undefined) { + return this.currentPage; + } + this.index--; + console.error('Sin referencia de página adelante'); + return '-'; + } + + goBackward() { + try { + this.currentPage = this.pages[this.index--]; + return this.currentPage; + } catch (error) { + this.index++; + console.error('Sin páginas en el historial'); + return '-'; + } + } +} + +function browserHistory(browser, input) { + let page; + console.log(`>_${input}`); + switch (input) { + case 'adelante': + page = browser.goForward(); + console.log(`Página actual: ${page}`); + break; + case 'atras': + page = browser.goBackward(); + console.log(`Página actual: ${page}`); + break; + case 'salir': + break; + default: + let new_page = input; + browser.addPage(new_page); + console.log(`Nueva página: ${new_page}`); + break; + } +} + +const edge = new WebBrowser(); +browserHistory(edge, 'Wikipedia'); +browserHistory(edge, 'YouTube'); +browserHistory(edge, 'Amazon'); +browserHistory(edge, 'atras'); +browserHistory(edge, 'atras'); +browserHistory(edge, 'adelante'); \ No newline at end of file From 864a68fd1c79ac644e57903031ec63f626d344ab Mon Sep 17 00:00:00 2001 From: Jesus Montoya Date: Sun, 8 Sep 2024 20:54:45 -0500 Subject: [PATCH 062/539] #00 - Python --- .../python/jmontoyac.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jmontoyac.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jmontoyac.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jmontoyac.py new file mode 100644 index 0000000000..b37835dfaa --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jmontoyac.py @@ -0,0 +1,21 @@ +# https://www.python.org/ + +# Python solo tiene comentarios de una linea +# Para agregar comentarion multi lineas, se agregan +# mas comentarios de una linea + +# Variable en Python +primera_variable = 0 + +# Constante en Python +DURACION_MILISEGUNDOS = 300 + +# Tipos de datos primitivos +variable_string_comillas_simples = 'String de comillas simples' +Variable_string_comillas_dobles = "String de comillas dobles" +variable_int = 3600 +variable_float = 5.5 +variable_boolean = True +variable_nula = None + +print("¡Hola Python!") \ No newline at end of file From 0bbff7fe4373870e9e0881d716ef42758b99a817 Mon Sep 17 00:00:00 2001 From: GordoMaster Date: Sun, 8 Sep 2024 21:59:11 -0400 Subject: [PATCH 063/539] #16-Python --- .../python/Gordo-Master.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Roadmap/16 - EXPRESIONES REGULARES/python/Gordo-Master.py diff --git a/Roadmap/16 - EXPRESIONES REGULARES/python/Gordo-Master.py b/Roadmap/16 - EXPRESIONES REGULARES/python/Gordo-Master.py new file mode 100644 index 0000000000..999328b80c --- /dev/null +++ b/Roadmap/16 - EXPRESIONES REGULARES/python/Gordo-Master.py @@ -0,0 +1,34 @@ +# 16 Expresiones Regulares. + +import re + +text = """This regular expression example was made on September 8, 2024 +and never revised. +Aunque yo empece este proyecto de retos de programación hace mas de +5 meses""" + +pattern = r"[\d]+" + +print(re.findall(pattern,text)) + +""" +Ejercicio Extra +""" + +def valid_mail(mail: str) -> bool: + pattern = r"^[a-zA-Z][\w\.+-]{6,30}@[a-zA-Z]+\.[a-zA-Z]+(\.[a-zA-Z]{2})?$" + return bool(re.match(pattern,mail)) + +print(f"El correo es valido: {valid_mail("GordoMaster@yahoo.net")}") + +def valid_num(num: str) -> bool: + pattern = r"^\+\d{1,3}\s?9\d{2}\s?\d{3}\s?\d{3,4}$" + return bool(re.match(pattern,num)) + +print(f"El numero es valido: {valid_num("+595 912 345 678")}") + +def valid_url(url: str) -> bool: + pattern = r"^http[s]?://(www\.|blog\.|store\.)?[a-zA-Z]\w*\.[a-zA-Z]+(\.[a-zA-Z]{2})?(/\w+)*(\?\w+=\w+)?(#\w+)?$" + return bool(re.match(pattern,url)) + +print(f"La URL es valido: {valid_url("https://www.example.com.es/ruta/ruta2?parametro=true#prueba")}") From ff4bfbf8984b95220216b868403aacd80144fc29 Mon Sep 17 00:00:00 2001 From: Jesus Montoya Date: Sun, 8 Sep 2024 21:07:29 -0500 Subject: [PATCH 064/539] #00 - Python --- .../python/jmontoyac.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jmontoyac.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jmontoyac.py index b37835dfaa..9549398af8 100644 --- a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jmontoyac.py +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/jmontoyac.py @@ -1,8 +1,11 @@ # https://www.python.org/ -# Python solo tiene comentarios de una linea -# Para agregar comentarion multi lineas, se agregan -# mas comentarios de una linea +# Comentario de una linea + +''' +# Comentario multi lineas +# Segunda linea de comentario +''' # Variable en Python primera_variable = 0 From 520f53a1cf61b987bc255f9ecdf5866bc7688db8 Mon Sep 17 00:00:00 2001 From: Jesus Montoya Date: Sun, 8 Sep 2024 22:04:48 -0500 Subject: [PATCH 065/539] #01 - Python --- .../python/jmontoyac.py | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/jmontoyac.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/jmontoyac.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/jmontoyac.py new file mode 100644 index 0000000000..9442249238 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/jmontoyac.py @@ -0,0 +1,69 @@ +# Ejemplo de operadores aritmeticos + +a = 5 +b = 2 + +print(f'Valor de variable a: {a}') +print(f'Valor de variable b: {b}') + +print(f'a + b: {a+b}') +print(f'a - b: {a-b}') +print(f'a * b: {a*b}') +print(f'a / b: {a/b}') +print(f'a % b: {a%b}') + +# Ejemplo de operadores logicos + +# Operador and +print('## Operador and ##') +print(f'True and True: {True and True}') +print(f'True and False: {True and False}') +print(f'False and True: {False and True}') +print(f'False and False: {False and False}') + +# Operador or +print('## Operador or ##') +print(f'True or True: {True or True}') +print(f'True or False: {True or False}') +print(f'False or True: {False or True}') +print(f'False or False: {False or False}') + +# Operador not +print('## Operador not ##') +print(f'not True: {not True}') +print(f'not False: {not False}') + +# Operadores de comparacion + +print('## Operadores de comparacion ##') +print(f'{a} == {b}: {a==b}') +print(f'{a} != {b}: {a!=b}') +print(f'{a} < {b}: {a {b}: {a>b}') +print(f'{a} <= {b}: {a<=b}') +print(f'{a} >= {b}: {a>=b}') + +# Operadores de asignacion + +print('## Operadores de asignacion ##') +x = "Hola" +y = 256 +z = 128 +print(f'x = "Hola", valor de variable x: {x}') +print(f'y = 265, valor de variable y: {y}') +y += z +print(f'y += z, resultado: {y}') +y -= z +print(f'y -= z, resultado: {y}') +y *= z +print(f'y *= z, resultado: {y}') +y /= z +print(f'y /= z, resultado: {y}') +y %= z +print(f'y %= z, resultado: {y}') +y = 2 +z = 6 +y **= z +print(f'y **= z, resultado: {y}') +y //= z +print(f'y //= z, resultado: {y}') \ No newline at end of file From e2cd72fb502c0995fb9eb6f4b1efdbdfecac3656 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Sun, 8 Sep 2024 23:41:36 -0400 Subject: [PATCH 066/539] 36 - JavaScript --- .../36 - EL SOMBRERO SELECCIONADOR/javascript/RicJDev.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RicJDev.js b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RicJDev.js index 71fb663b37..c32acc46e6 100644 --- a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RicJDev.js +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RicJDev.js @@ -14,7 +14,13 @@ class Question { addOption(letter, option) { if (Object.keys(this.options).includes(letter.toUpperCase())) { - if (this.options[letter] !== option) this.options[letter] = option + if (this.options[letter] === option) { + throw new Error('You cannot repeat options.') + } + + this.options[letter] = option + } else { + throw new Error(`Options avalaible: A, B, C or D. Cannot set '${letter}' option.`) } } } From 08eb6e172ab13b62c2e0ffa3f205f0167c439cf2 Mon Sep 17 00:00:00 2001 From: Cesar Carmona Date: Sun, 8 Sep 2024 22:11:55 -0600 Subject: [PATCH 067/539] #36 - Python --- .../python/CesarCarmona30.py | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/CesarCarmona30.py diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/CesarCarmona30.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/CesarCarmona30.py new file mode 100644 index 0000000000..647b80f92b --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/CesarCarmona30.py @@ -0,0 +1,138 @@ +''' + EJERCICIO +''' + +import random, time + +houses = { + "a": ["Frontend", 0], + "b": ["Backend", 0], + "c": ["Desarrollo de videojuegos", 0], + "d": ["Ciberseguridad", 0] +} + +pets = { + "Frontend": "𖤍", + "Backend": "𓅓", + "Desarrollo de videojuegos": "𓅛", + "Ciberseguridad": "𓃠" +} + +print(f"""Bienvenido a la escuela de la programación de Hogwarts para magos y brujas del código. +A continuación el sombrero te guiará a través de preguntas para encontrar tu camino hacia tu casa ideal. +Cuál de estás casas será la que te consolide...\n""") + +for house, animal in pets.items(): + print(f'{animal} {house} {animal}') + +name = input("\nEmpecemos... ¿Cuál es tu nombre?: ") + +questions = [ + { 1: "¿Qué parte de un proyecto te resulta más interesante?", + "options": { + "a": "Crear una interfaz de usuario atractiva y fácil de usar.", + "b": "Desarrollar la lógica de negocio y gestionar bases de datos.", + "c": "Diseñar mecánicas y físicas de inmersivas.", + "d": "Asegurar la protección de los datos y prevenir ataques." + }}, + { 2: "¿Qué herramienta preferirías utilizar?", + "options": { + "a": "Figma o Sketch.", + "b": "Docker o Kubernetes.", + "c": "Unity o Unreal Engine.", + "d": "Wireshark o Burp Suite." + }}, + { 3: "¿Qué tipo de errores disfrutas resolver?", + "options": { + "a": "Fallos de estilo o funcionalidad en una página web.", + "b": "Bugs en la lógica del servidor o en una base de datos.", + "c": "Problemas de comportamiento o física en un juego.", + "d": "Vulnerabilidades en el sistema o posibles puntos de ataque." + }}, + { 4: "Lenguaje de programación (o tecnología) favorito:", + "options": { + "a": "JavaScript o TypeScript.", + "b": "Python, Java o Node.js.", + "c": "C++ o C#.", + "d": "C, Python o Bash." + }}, + { 5: "¿Qué prefieres optimizar en un proyecto?", + "options": { + "a": "La experiencia de usuario y la velocidad de carga de la interfaz.", + "b": "El rendimiento del servidor y las consultas de la base de datos.", + "c": "Los gráficos y la jugabilidad en tiempo real.", + "d": "La seguridad de los datos y la prevención de intrusiones." + }}, + { 6: "¿Qué tipo de desafíos te emocionan más?", + "options": { + "a": "Crear animaciones fluidas y transiciones en la interfaz.", + "b": "Diseñar una API robusta y eficiente.", + "c": "Implementar inteligencia artificial para NPCs en un videojuego.", + "d": "Descubrir y mitigar una nueva vulnerabilidad de seguridad." + }}, + { 7: "¿Qué tecnología te gustaría dominar?", + "options": { + "a": "React, Vue o Angular", + "b": "Express, Django o Flask", + "c": "Unreal Engine o Unity", + "d": "Metasploit o herramientas de análisis forense digital." + }}, + { 8: "¿En qué área preferirías trabajar a largo plazo?", + "options": { + "a": "Creación de interfaces y experiencias de usuario visuales.", + "b": "Diseño de la lógica interna y los servicios de backend.", + "c": "Desarrollo de mundos y mecánicas en videojuegos.", + "d": "Auditoría de seguridad y pentesting." + }}, + { 9: "¿Qué proyecto te resulta más atractivo?", + "options": { + "a": "Desarrollar una aplicación web interactiva y dinámica.", + "b": "Crear una API que sirva datos a múltiples plataformas.", + "c": "Desarrollar un videojuego inmersivo en 3D.", + "d": "Desarrollar un sistema de protección contra ataques DDoS." + }}, + { 10: "¿Qué prefieres como objetivo principal en tu trabajo?", + "options": { + "a": "Hacer que la aplicación sea visualmente atractiva y fácil de usar.", + "b": "Asegurarte de que la aplicación funcione sin problemas en el servidor.", + "c": "Crear una experiencia de juego envolvente y divertida.", + "d": "Garantizar que los sistemas estén seguros contra ataques." + }} +] + + +for id, question in enumerate(questions): + print(f"\nPregunta {id + 1}: {question[id + 1]}") + for option, answer in question["options"].items(): + print(f"{option}) {answer}") + + reply = input("Elige una opción:\n>_ ").lower() + + while reply not in question["options"]: + reply = input("Opción no válida. Por favor intenta de nuevo. a) b) c) o d): ").lower() + + houses[reply][1] += 1 + +max_score = max(house[1] for house in houses.values()) +winning_houses = [house_name for house_name, house in houses.items() if house[1] == max_score] + +chosen_house = None + +print(f"¡Felicidades {name.capitalize()}!") + +if len(winning_houses) > 1: + chosen_house_key = random.choice(winning_houses) + chosen_house = houses[chosen_house_key][0] + print(f"¡La decisión ha sido complicada! Pero finalmente, el sombrero te ha asignado a la casa...") +else: + chosen_house = houses[winning_houses[0]][0] + print(f"El sombrero te ha asignado a la casa...") + +for sec in range(1, 4): + time.sleep(1) + print('.' * sec) + +time.sleep(1) +print(f'{pets[chosen_house]}' * 20, end='') +print(f"\n──⊹¡{chosen_house.upper()}!⊹──") +print(f'{pets[chosen_house]}' * 20, end='') \ No newline at end of file From 45f4e4f59b310065a26e905320da80bd3fe6cc54 Mon Sep 17 00:00:00 2001 From: drvito1977 Date: Mon, 9 Sep 2024 09:06:15 +0200 Subject: [PATCH 068/539] =?UTF-8?q?A=C3=B1ade=20ejemplos=20de=20estructura?= =?UTF-8?q?s=20de=20datos=20en=20Bash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drvito1977_03.sh | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/drvito1977_03.sh diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/drvito1977_03.sh b/Roadmap/03 - ESTRUCTURAS DE DATOS/drvito1977_03.sh new file mode 100644 index 0000000000..775646c0c3 --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/drvito1977_03.sh @@ -0,0 +1,164 @@ +#!/bin/bash + +# Ejemplos de estructuras en Bash + +# Arrays +# Definición de un array con elementos iniciales +array=(1 2 3 4 5) +# Imprimir todos los elementos del array +echo "Array original: ${array[@]}" +# Añadir un nuevo elemento al final del array +array+=(6) # Inserción +# Imprimir el array después de la inserción +echo "Array después de inserción: ${array[@]}" +# Eliminar el tercer elemento del array (índice 2) +unset array[2] # Borrado +# Imprimir el array después del borrado +echo "Array después de borrado: ${array[@]}" +# Actualizar el segundo elemento del array (índice 1) a 10 +array[1]=10 # Actualización +# Imprimir el array después de la actualización +echo "Array después de actualización: ${array[@]}" +# Ordenar el array y guardarlo en una nueva variable +sorted_array=($(for i in "${array[@]}"; do echo $i; done | sort)) # Ordenación +# Imprimir el array ordenado +echo "Array ordenado: ${sorted_array[@]}" + +# Arrays asociativos +# Declarar un array asociativo +declare -A assoc_array +# Inicializar el array asociativo con pares clave-valor +assoc_array=([key1]=value1 [key2]=value2) +# Imprimir todos los valores del array asociativo +echo "Array asociativo original: ${assoc_array[@]}" +# Añadir un nuevo par clave-valor al array asociativo +assoc_array[key3]=value3 # Inserción +# Imprimir el array asociativo después de la inserción +echo "Array asociativo después de inserción: ${assoc_array[@]}" +# Eliminar un par clave-valor del array asociativo usando la clave +unset assoc_array[key1] # Borrado +# Imprimir el array asociativo después del borrado +echo "Array asociativo después de borrado: ${assoc_array[@]}" +# Actualizar el valor asociado a una clave existente +assoc_array[key2]=new_value # Actualización +# Imprimir el array asociativo después de la actualización +echo "Array asociativo después de actualización: ${assoc_array[@]}" + +# Strings (cadenas de texto) +# Definir una cadena de texto +string="Hola Mundo" +# Imprimir la cadena original +echo "String original: $string" +# Añadir un carácter al final de la cadena +string+="!" # Inserción +# Imprimir la cadena después de la inserción +echo "String después de inserción: $string" +# Eliminar parte de la cadena (mantener solo los primeros 5 caracteres) +string=${string:0:5} # Borrado +# Imprimir la cadena después del borrado +echo "String después de borrado: $string" +# Actualizar la cadena completa +string="Hola Bash" # Actualización +# Imprimir la cadena después de la actualización +echo "String después de actualización: $string" + +# Numbers (números) +# Definir un número +num=5 +# Imprimir el número original +echo "Número original: $num" +# Incrementar el número en 5 +((num+=5)) # Inserción (suma) +# Imprimir el número después de la inserción +echo "Número después de inserción: $num" +# Decrementar el número en 3 +((num-=3)) # Borrado (resta) +# Imprimir el número después del borrado +echo "Número después de borrado: $num" +# Actualizar el número a 10 +num=10 # Actualización +# Imprimir el número después de la actualización +echo "Número después de actualización: $num" + +# Agenda de contactos +declare -A agenda + +# Función para insertar un contacto +function insertar_contacto { + read -p "Nombre: " nombre + read -p "Número de teléfono: " telefono + # Validar que el número de teléfono sea numérico y tenga hasta 11 dígitos + if [[ ! $telefono =~ ^[0-9]{1,11}$ ]]; then + echo "Número de teléfono inválido." + return + fi + # Añadir el contacto a la agenda + agenda[$nombre]=$telefono + echo "Contacto añadido." +} + +# Función para buscar un contacto +function buscar_contacto { + read -p "Nombre: " nombre + # Verificar si el contacto existe en la agenda + if [[ -z ${agenda[$nombre]} ]]; then + echo "Contacto no encontrado." + else + echo "Teléfono de $nombre: ${agenda[$nombre]}" + fi +} + +# Función para actualizar un contacto +function actualizar_contacto { + read -p "Nombre: " nombre + # Verificar si el contacto existe en la agenda + if [[ -z ${agenda[$nombre]} ]]; then + echo "Contacto no encontrado." + return + fi + read -p "Nuevo número de teléfono: " telefono + # Validar que el nuevo número de teléfono sea numérico y tenga hasta 11 dígitos + if [[ ! $telefono =~ ^[0-9]{1,11}$ ]]; then + echo "Número de teléfono inválido." + return + fi + # Actualizar el contacto en la agenda + agenda[$nombre]=$telefono + echo "Contacto actualizado." +} + +# Función para eliminar un contacto +function eliminar_contacto { + read -p "Nombre: " nombre + # Verificar si el contacto existe en la agenda + if [[ -z ${agenda[$nombre]} ]]; entonces + echo "Contacto no encontrado." + return + fi + # Eliminar el contacto de la agenda + unset agenda[$nombre] + echo "Contacto eliminado." +} + +# Función para mostrar el menú de opciones +function mostrar_menu { + echo "1. Insertar contacto" + echo "2. Buscar contacto" + echo "3. Actualizar contacto" + echo "4. Eliminar contacto" + echo "5. Salir" +} + +# Bucle principal para mostrar el menú y ejecutar las opciones seleccionadas +while true; do + mostrar_menu + read -p "Seleccione una opción: " opcion + case $opcion in + 1) insertar_contacto ;; + 2) buscar_contacto ;; + 3) actualizar_contacto ;; + 4) eliminar_contacto ;; + 5) break ;; + *) echo "Opción inválida." ;; + esac +done \ No newline at end of file From 7998b4594bf85a108a24a8eff123f09caf33b30c Mon Sep 17 00:00:00 2001 From: miguelex Date: Mon, 9 Sep 2024 09:37:59 +0200 Subject: [PATCH 069/539] #36 - php --- .../java/miguelex.java | 289 ++++++++++++++++++ .../javascript/miguelex.js | 251 +++++++++++++++ .../php/miguelex.php | 245 +++++++++++++++ .../python/miguelex.py | 228 ++++++++++++++ .../typescript/miguelex.ts | 266 ++++++++++++++++ 5 files changed, 1279 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/java/miguelex.java create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/miguelex.js create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/php/miguelex.php create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/miguelex.py create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/typescript/miguelex.ts diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/java/miguelex.java b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/java/miguelex.java new file mode 100644 index 0000000000..cdf8e2b615 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/java/miguelex.java @@ -0,0 +1,289 @@ +import java.util.*; + +class Casa { + private String nombre; + private int puntos; + + public Casa(String nombre) { + this.nombre = nombre; + this.puntos = 0; + } + + public String getNombre() { + return nombre; + } + + public void agregarPuntos(int puntos) { + this.puntos += puntos; + } + + public int getPuntos() { + return puntos; + } +} + +class Alumno { + private String nombre; + + public Alumno(String nombre) { + this.nombre = nombre; + } + + public String getNombre() { + return nombre; + } +} + +class Pregunta { + private String pregunta; + private List opciones; + + public Pregunta(String pregunta, List opciones) { + this.pregunta = pregunta; + this.opciones = opciones; + } + + public void mostrarPregunta() { + System.out.println(pregunta); + for (int i = 0; i < opciones.size(); i++) { + System.out.println((i + 1) + ": " + opciones.get(i).getTexto()); + } + } + + public String obtenerCasaSegunRespuesta(int respuesta) { + return opciones.get(respuesta - 1).getCasa(); + } +} + +class Opcion { + private String texto; + private String casa; + + public Opcion(String texto, String casa) { + this.texto = texto; + this.casa = casa; + } + + public String getTexto() { + return texto; + } + + public String getCasa() { + return casa; + } +} + +class SombreroSeleccionador { + private Map casas; + private List preguntas; + + public SombreroSeleccionador(Map casas, List preguntas) { + this.casas = casas; + this.preguntas = preguntas; + } + + public void asignarCasa(Alumno alumno) { + List preguntasSeleccionadas = seleccionarPreguntas(); + Scanner scanner = new Scanner(System.in); + + for (Pregunta pregunta : preguntasSeleccionadas) { + pregunta.mostrarPregunta(); + int respuesta = leerRespuesta(scanner); + String casa = pregunta.obtenerCasaSegunRespuesta(respuesta); + casas.get(casa).agregarPuntos(1); + } + + mostrarResultado(alumno); + scanner.close(); + } + + private List seleccionarPreguntas() { + List preguntasSeleccionadas = new ArrayList<>(); + Set indicesSeleccionados = new HashSet<>(); + Random random = new Random(); + + while (preguntasSeleccionadas.size() < 10) { + int indice = random.nextInt(preguntas.size()); + if (!indicesSeleccionados.contains(indice)) { + indicesSeleccionados.add(indice); + preguntasSeleccionadas.add(preguntas.get(indice)); + } + } + + return preguntasSeleccionadas; + } + + private int leerRespuesta(Scanner scanner) { + int respuesta = 0; + while (respuesta < 1 || respuesta > 4) { + System.out.print("Selecciona una opción (1-4): "); + respuesta = scanner.nextInt(); + } + return respuesta; + } + + private void mostrarResultado(Alumno alumno) { + List casasOrdenadas = new ArrayList<>(casas.values()); + casasOrdenadas.sort(Comparator.comparingInt(Casa::getPuntos).reversed()); + + int maxPuntos = casasOrdenadas.get(0).getPuntos(); + List ganadoras = new ArrayList<>(); + for (Casa casa : casasOrdenadas) { + if (casa.getPuntos() == maxPuntos) { + ganadoras.add(casa); + } + } + + Casa ganadora; + if (ganadoras.size() > 1) { + System.out.println("\n\nLa decisión fue difícil..."); + Random random = new Random(); + ganadora = ganadoras.get(random.nextInt(ganadoras.size())); + } else { + ganadora = ganadoras.get(0); + } + + System.out.println("\n\n" + alumno.getNombre() + ", el sombrero seleccionador te ha asignado a la casa " + ganadora.getNombre().toUpperCase() + "!!!!\n"); + } +} + +public class miguelex { + public static void main(String[] args) { + Map casas = new HashMap<>(); + casas.put("frontend", new Casa("Frontend")); + casas.put("backend", new Casa("Backend")); + casas.put("mobile", new Casa("Mobile")); + casas.put("data", new Casa("Data")); + + List preguntas = Arrays.asList( + new Pregunta("¿Qué prefieres?", Arrays.asList( + new Opcion("Diseñar interfaces", "frontend"), + new Opcion("Crear APIs", "backend"), + new Opcion("Desarrollar apps móviles", "mobile"), + new Opcion("Analizar datos", "data") + )), + new Pregunta("¿Cuál es tu lenguaje de programación favorito?", Arrays.asList( + new Opcion("JavaScript", "frontend"), + new Opcion("Python", "backend"), + new Opcion("Kotlin", "mobile"), + new Opcion("R", "data") + )), + new Pregunta("¿Qué herramienta utilizas más a menudo?", Arrays.asList( + new Opcion("Figma o Sketch", "frontend"), + new Opcion("Docker o Kubernetes", "backend"), + new Opcion("Android Studio o Xcode", "mobile"), + new Opcion("Jupyter Notebooks o Excel", "data") + )), + new Pregunta("¿Qué te interesa más aprender?", Arrays.asList( + new Opcion("HTML/CSS y JavaScript avanzado", "frontend"), + new Opcion("Patrones de diseño y arquitectura de software", "backend"), + new Opcion("Programación nativa para dispositivos móviles", "mobile"), + new Opcion("Estadística y Machine Learning", "data") + )), + new Pregunta("¿Qué tipo de proyecto te gustaría liderar?", Arrays.asList( + new Opcion("Un sitio web interactivo y atractivo", "frontend"), + new Opcion("Una plataforma escalable con microservicios", "backend"), + new Opcion("Una app móvil innovadora", "mobile"), + new Opcion("Un sistema de recomendación basado en datos", "data") + )), + new Pregunta("¿Qué es lo más importante para ti en un proyecto?", Arrays.asList( + new Opcion("La experiencia de usuario", "frontend"), + new Opcion("El rendimiento y la escalabilidad", "backend"), + new Opcion("La adaptabilidad a diferentes dispositivos", "mobile"), + new Opcion("La precisión de los análisis", "data") + )), + new Pregunta("¿Qué prefieres trabajar?", Arrays.asList( + new Opcion("En un entorno donde el diseño visual es clave", "frontend"), + new Opcion("En la lógica del negocio y la arquitectura", "backend"), + new Opcion("En apps móviles con buen rendimiento", "mobile"), + new Opcion("En el análisis y visualización de datos", "data") + )), + new Pregunta("¿Qué framework te parece más interesante?", Arrays.asList( + new Opcion("React o Angular", "frontend"), + new Opcion("Spring o Django", "backend"), + new Opcion("Flutter o React Native", "mobile"), + new Opcion("TensorFlow o Pandas", "data") + )), + new Pregunta("¿Qué tipo de reto disfrutas más?", Arrays.asList( + new Opcion("Hacer que un sitio web sea accesible y rápido", "frontend"), + new Opcion("Optimizar la comunicación entre servicios", "backend"), + new Opcion("Mejorar la experiencia del usuario en móviles", "mobile"), + new Opcion("Encontrar patrones ocultos en los datos", "data") + )), + new Pregunta("¿Qué prefieres resolver?", Arrays.asList( + new Opcion("Problemas de diseño y maquetación", "frontend"), + new Opcion("Problemas de concurrencia y escalabilidad", "backend"), + new Opcion("Problemas de rendimiento en aplicaciones móviles", "mobile"), + new Opcion("Problemas de predicción y análisis de datos", "data") + )), + new Pregunta("¿Qué es lo que más te emociona en tecnología?", Arrays.asList( + new Opcion("La evolución de las interfaces de usuario", "frontend"), + new Opcion("La innovación en la arquitectura de software", "backend"), + new Opcion("Las nuevas capacidades de los dispositivos móviles", "mobile"), + new Opcion("Los avances en inteligencia artificial y análisis de datos", "data") + )), + new Pregunta("¿Qué te gusta hacer en tu tiempo libre?", Arrays.asList( + new Opcion("Diseñar sitios web personales o interfaces", "frontend"), + new Opcion("Hacer proyectos con servidores y APIs", "backend"), + new Opcion("Crear apps móviles para resolver problemas cotidianos", "mobile"), + new Opcion("Hacer análisis de datos para tomar decisiones mejor informadas", "data") + )), + new Pregunta("¿Qué te gustaría dominar?", Arrays.asList( + new Opcion("Animaciones y transiciones en la web", "frontend"), + new Opcion("Arquitectura de microservicios", "backend"), + new Opcion("Optimización de aplicaciones móviles", "mobile"), + new Opcion("Modelos predictivos y análisis de datos", "data") + )), + new Pregunta("¿Qué tipo de problema prefieres resolver en un hackathon?", Arrays.asList( + new Opcion("Mejorar la interfaz de usuario de una aplicación", "frontend"), + new Opcion("Optimizar el rendimiento de una API", "backend"), + new Opcion("Crear una aplicación móvil desde cero", "mobile"), + new Opcion("Generar insights a partir de grandes conjuntos de datos", "data") + )), + new Pregunta("¿Qué prefieres al trabajar en equipo?", Arrays.asList( + new Opcion("Encargarte de la parte visual y de interacción del usuario", "frontend"), + new Opcion("Asegurarte de que la lógica y los datos fluyan correctamente", "backend"), + new Opcion("Hacer que la app funcione bien en diferentes dispositivos", "mobile"), + new Opcion("Proveer métricas y análisis para tomar mejores decisiones", "data") + )), + new Pregunta("¿Cuál es tu prioridad al optimizar código?", Arrays.asList( + new Opcion("Que la interfaz cargue rápido y sea amigable", "frontend"), + new Opcion("Que los servicios backend sean escalables y eficientes", "backend"), + new Opcion("Que la app móvil consuma pocos recursos y sea fluida", "mobile"), + new Opcion("Que el procesamiento de datos sea rápido y preciso", "data") + )), + new Pregunta("¿Qué prefieres al probar una aplicación?", Arrays.asList( + new Opcion("Verificar que el diseño y la usabilidad sean impecables", "frontend"), + new Opcion("Asegurar que las funcionalidades y la lógica sean correctas", "backend"), + new Opcion("Revisar que la app funcione correctamente en múltiples dispositivos", "mobile"), + new Opcion("Validar que los resultados de los análisis sean exactos", "data") + )), + new Pregunta("¿Qué tipo de proyectos sigues en la industria?", Arrays.asList( + new Opcion("Proyectos de diseño web innovador y UX", "frontend"), + new Opcion("Nuevas tecnologías de servidores y backends", "backend"), + new Opcion("Aplicaciones móviles disruptivas y eficientes", "mobile"), + new Opcion("Proyectos de inteligencia artificial y ciencia de datos", "data") + )), + new Pregunta("¿Qué harías para mejorar una plataforma existente?", Arrays.asList( + new Opcion("Mejorar la apariencia y usabilidad de la interfaz", "frontend"), + new Opcion("Optimizar el rendimiento de las consultas y los servidores", "backend"), + new Opcion("Hacer que la plataforma sea accesible desde dispositivos móviles", "mobile"), + new Opcion("Incluir más análisis de datos para obtener mejor información", "data") + )), + new Pregunta("¿Qué aspecto del desarrollo de software te parece más retador?", Arrays.asList( + new Opcion("Hacer que una aplicación web sea visualmente atractiva", "frontend"), + new Opcion("Crear sistemas backend que manejen millones de usuarios", "backend"), + new Opcion("Optimizar la app móvil para diferentes sistemas operativos", "mobile"), + new Opcion("Gestionar grandes volúmenes de datos y extraer conclusiones útiles", "data") + )) + ); + + Scanner scanner = new Scanner(System.in); + System.out.print("Por favor, introduce tu nombre: "); + String nombreAlumno = scanner.nextLine(); + Alumno alumno = new Alumno(nombreAlumno); + + SombreroSeleccionador sombrero = new SombreroSeleccionador(casas, preguntas); + sombrero.asignarCasa(alumno); + } +} diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/miguelex.js b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/miguelex.js new file mode 100644 index 0000000000..8a59254143 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/miguelex.js @@ -0,0 +1,251 @@ +const readline = require('readline'); + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +class Casa { + constructor(nombre) { + this.nombre = nombre; + this.puntos = 0; + } + + getNombre() { + return this.nombre; + } + + agregarPuntos(puntos) { + this.puntos += puntos; + } + + getPuntos() { + return this.puntos; + } +} + +class Alumno { + constructor(nombre) { + this.nombre = nombre; + } + + getNombre() { + return this.nombre; + } +} + +class Pregunta { + constructor(pregunta, opciones) { + this.pregunta = pregunta; + this.opciones = opciones; + } + + mostrarPregunta() { + console.log(this.pregunta); + this.opciones.forEach((opcion, index) => { + console.log(`${index + 1}: ${opcion.texto}`); + }); + } + + obtenerCasaSegunRespuesta(respuesta) { + return this.opciones[respuesta - 1].casa; + } +} + +class SombreroSeleccionador { + constructor(casas, preguntas) { + this.casas = casas; + this.preguntas = preguntas; + } + + async asignarCasa(alumno) { + const preguntasSeleccionadas = this.seleccionarPreguntas(); + for (let pregunta of preguntasSeleccionadas) { + pregunta.mostrarPregunta(); + let respuesta = await this.leerRespuesta(); + let casa = pregunta.obtenerCasaSegunRespuesta(respuesta); + this.casas[casa].agregarPuntos(1); + } + + this.mostrarResultado(alumno); + rl.close(); + } + + seleccionarPreguntas() { + const preguntasSeleccionadas = []; + const indicesSeleccionados = new Set(); + + while (preguntasSeleccionadas.length < 10) { + let indice = Math.floor(Math.random() * this.preguntas.length); + if (!indicesSeleccionados.has(indice)) { + indicesSeleccionados.add(indice); + preguntasSeleccionadas.push(this.preguntas[indice]); + } + } + + return preguntasSeleccionadas; + } + + async leerRespuesta() { + return new Promise((resolve) => { + rl.question("Selecciona una opción (1-4): ", (respuesta) => { + resolve(parseInt(respuesta)); + }); + }); + } + + mostrarResultado(alumno) { + const casasOrdenadas = Object.values(this.casas).sort((a, b) => b.getPuntos() - a.getPuntos()); + + const maxPuntos = casasOrdenadas[0].getPuntos(); + const ganadoras = casasOrdenadas.filter(casa => casa.getPuntos() === maxPuntos); + + let ganadora; + if (ganadoras.length > 1) { + console.log("\n\nLa decisión fue difícil..."); + ganadora = ganadoras[Math.floor(Math.random() * ganadoras.length)]; + } else { + ganadora = ganadoras[0]; + } + + console.log(`\n\n ${alumno.getNombre()}, el sombrero seleccionador te ha asignado a la casa ${ganadora.getNombre().toUpperCase()}!!!!\n`); + } +} + + +const casas = { + 'frontend': new Casa('Frontend'), + 'backend': new Casa('Backend'), + 'mobile': new Casa('Mobile'), + 'data': new Casa('Data') +}; + +const preguntas = [ + new Pregunta("¿Qué prefieres?", [ + { texto: 'Diseñar interfaces', casa: 'frontend' }, + { texto: 'Crear APIs', casa: 'backend' }, + { texto: 'Desarrollar apps móviles', casa: 'mobile' }, + { texto: 'Analizar datos', casa: 'data' } + ]), + new Pregunta("¿Cuál es tu lenguaje de programación favorito?", [ + { texto: 'JavaScript', casa: 'frontend' }, + { texto: 'Python', casa: 'backend' }, + { texto: 'Kotlin', casa: 'mobile' }, + { texto: 'R', casa: 'data' } + ]), + new Pregunta("¿Qué herramienta utilizas más a menudo?", [ + { texto: 'Figma o Sketch', casa: 'frontend' }, + { texto: 'Docker o Kubernetes', casa: 'backend' }, + { texto: 'Android Studio o Xcode', casa: 'mobile' }, + { texto: 'Jupyter Notebooks o Excel', casa: 'data' } + ]), + new Pregunta("¿Qué te interesa más aprender?", [ + { texto: 'HTML/CSS y JavaScript avanzado', casa: 'frontend' }, + { texto: 'Patrones de diseño y arquitectura de software', casa: 'backend' }, + { texto: 'Programación nativa para dispositivos móviles', casa: 'mobile' }, + { texto: 'Estadística y Machine Learning', casa: 'data' } + ]), + new Pregunta("¿Qué tipo de proyecto te gustaría liderar?", [ + { texto: 'Un sitio web interactivo y atractivo', casa: 'frontend' }, + { texto: 'Una plataforma escalable con microservicios', casa: 'backend' }, + { texto: 'Una app móvil innovadora', casa: 'mobile' }, + { texto: 'Un sistema de recomendación basado en datos', casa: 'data' } + ]), + new Pregunta("¿Qué es lo más importante para ti en un proyecto?", [ + { texto: 'La experiencia de usuario', casa: 'frontend' }, + { texto: 'El rendimiento y la escalabilidad', casa: 'backend' }, + { texto: 'La adaptabilidad a diferentes dispositivos', casa: 'mobile' }, + { texto: 'La precisión de los análisis', casa: 'data' } + ]), + new Pregunta("¿Qué prefieres trabajar?", [ + {texto : 'En un entorno donde el diseño visual es clave', casa :'frontend'}, + {texto : 'En la lógica del negocio y la arquitectura', casa :'backend'}, + {texto : 'En apps móviles con buen rendimiento', casa :'mobile'}, + {texto : 'En el análisis y visualización de datos', casa :'data'} + ]), + new Pregunta("¿Qué framework te parece más interesante?", [ + {texto: 'React o Angular', casa :'frontend'}, + {texto : 'Spring o Django', casa :'backend'}, + {texto : 'Flutter o React Native', casa :'mobile'}, + {texto : 'TensorFlow o Pandas', casa :'data'} + ]), + new Pregunta("¿Qué tipo de reto disfrutas más?", [ + {texto : 'Hacer que un sitio web sea accesible y rápido', casa :'frontend'}, + {texto : 'Optimizar la comunicación entre servicios', casa :'backend'}, + {texto : 'Mejorar la experiencia del usuario en móviles', casa :'mobile'}, + {texto : 'Encontrar patrones ocultos en los datos', casa :'data'} + ]), + new Pregunta("¿Qué prefieres resolver?", [ + {texto : 'Problemas de diseño y maquetación', casa :'frontend'}, + {texto : 'Problemas de concurrencia y escalabilidad', casa :'backend'}, + {texto : 'Problemas de rendimiento en aplicaciones móviles', casa :'mobile'}, + {texto : 'Problemas de predicción y análisis de datos', casa :'data'} + ]), + new Pregunta("¿Qué es lo que más te emociona en tecnología?", [ + {texto : 'La evolución de las interfaces de usuario', casa :'frontend'}, + {texto : 'La innovación en la arquitectura de software', casa :'backend'}, + {texto : 'Las nuevas capacidades de los dispositivos móviles', casa :'mobile'}, + {texto : 'Los avances en inteligencia artificial y análisis de datos', casa : 'data'} + ]), + new Pregunta("¿Qué te gusta hacer en tu tiempo libre?", [ + {texto : 'Diseñar sitios web personales o interfaces', casa: 'frontend'}, + {texto : 'Hacer proyectos con servidores y APIs', casa: 'backend'}, + {texto : 'Crear apps móviles para resolver problemas cotidianos', casa: 'mobile'}, + {texto : 'Hacer análisis de datos para tomar decisiones mejor informadas', casa: 'data'} + ]), + new Pregunta("¿Qué te gustaría dominar?", [ + {texto : 'Animaciones y transiciones en la web', casa: 'frontend'}, + {texto : 'Arquitectura de microservicios', casa: 'backend'}, + {texto : 'Optimización de aplicaciones móviles', casa: 'mobile'}, + {texto : 'Modelos predictivos y análisis de datos', casa: 'data'} + ]), + new Pregunta("¿Qué tipo de problema prefieres resolver en un hackathon?", [ + {texto : 'Mejorar la interfaz de usuario de una aplicación', casa: 'frontend'}, + {texto : 'Optimizar el rendimiento de una API', casa: 'backend'}, + {texto : 'Crear una aplicación móvil desde cero', casa: 'mobile'}, + {texto : 'Generar insights a partir de grandes conjuntos de datos', casa: 'data'} + ]), + new Pregunta("¿Qué prefieres al trabajar en equipo?", [ + {texto : 'Encargarte de la parte visual y de interacción del usuario', casa: 'frontend'}, + {texto : 'Asegurarte de que la lógica y los datos fluyan correctamente', casa: 'backend'}, + {texto : 'Hacer que la app funcione bien en diferentes dispositivos', casa: 'mobile'}, + {texto : 'Proveer métricas y análisis para tomar mejores decisiones', casa: 'data'} + ]), + new Pregunta("¿Cuál es tu prioridad al optimizar código?", [ + {texto : 'Que la interfaz cargue rápido y sea amigable', casa: 'frontend'}, + {texto : 'Que los servicios backend sean escalables y eficientes', casa: 'backend'}, + {texto : 'Que la app móvil consuma pocos recursos y sea fluida', casa: 'mobile'}, + {texto : 'Que el procesamiento de datos sea rápido y preciso', casa: 'data'} + ]), + new Pregunta("¿Qué prefieres al probar una aplicación?", [ + {texto : 'Verificar que el diseño y la usabilidad sean impecables', casa: 'frontend'}, + {texto : 'Asegurar que las funcionalidades y la lógica sean correctas', casa :'backend'}, + {texto : 'Revisar que la app funcione correctamente en múltiples dispositivos', casa : 'mobile'}, + {texto : 'Validar que los resultados de los análisis sean exactos', casa : 'data'} + ]), + new Pregunta("¿Qué tipo de proyectos sigues en la industria?", [ + {texto : 'Proyectos de diseño web innovador y UX', casa : 'frontend'}, + {texto : 'Nuevas tecnologías de servidores y backends', casa : 'backend'}, + {texto : 'Aplicaciones móviles disruptivas y eficientes', casa : 'mobile'}, + {texto : 'Proyectos de inteligencia artificial y ciencia de datos', casa : 'data'} + ]), + new Pregunta("¿Qué harías para mejorar una plataforma existente?", [ + {texto : 'Mejorar la apariencia y usabilidad de la interfaz', casa : 'frontend'}, + {texto : 'Optimizar el rendimiento de las consultas y los servidores', casa : 'backend'}, + {texto : 'Hacer que la plataforma sea accesible desde dispositivos móviles', casa : 'mobile'}, + {texto : 'Incluir más análisis de datos para obtener mejor información', casa : 'data'} + ]), + new Pregunta("¿Qué aspecto del desarrollo de software te parece más retador?", [ + {texto : 'Hacer que una aplicación web sea visualmente atractiva', casa : 'frontend'}, + {texto : 'Crear sistemas backend que manejen millones de usuarios', casa : 'backend'}, + {texto : 'Optimizar la app móvil para diferentes sistemas operativos', casa : 'mobile'}, + {texto : 'Gestionar grandes volúmenes de datos y extraer conclusiones útiles', casa : 'data'} + ]), +]; + +rl.question("Por favor, introduce tu nombre: ", (nombreAlumno) => { + const alumno = new Alumno(nombreAlumno); + + const sombrero = new SombreroSeleccionador(casas, preguntas); + sombrero.asignarCasa(alumno); +}); diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/php/miguelex.php b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/php/miguelex.php new file mode 100644 index 0000000000..264d6dc23d --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/php/miguelex.php @@ -0,0 +1,245 @@ +nombre = $nombre; + } + + public function getNombre(): string { + return $this->nombre; + } + + public function agregarPuntos(int $puntos): void { + $this->puntos += $puntos; + } + + public function getPuntos(): int { + return $this->puntos; + } +} + +class Alumno { + private string $nombre; + + public function __construct(string $nombre) { + $this->nombre = $nombre; + } + + public function getNombre(): string { + return $this->nombre; + } +} + +class Pregunta { + private string $pregunta; + private array $opciones; // ['opción' => 'Casa'] + + public function __construct(string $pregunta, array $opciones) { + $this->pregunta = $pregunta; + $this->opciones = $opciones; + } + + public function mostrarPregunta(): void { + echo $this->pregunta . PHP_EOL; + foreach ($this->opciones as $index => $opcion) { + echo ($index + 1) . ": " . $opcion['texto'] . PHP_EOL; + } + } + + public function obtenerCasaSegunRespuesta(int $respuesta): string { + return $this->opciones[$respuesta - 1]['casa']; + } +} + +class SombreroSeleccionador { + private array $casas; + private array $preguntas; + + public function __construct(array $casas, array $preguntas) { + $this->casas = $casas; + $this->preguntas = $preguntas; + } + + public function asignarCasa(Alumno $alumno): void { + $preguntasSeleccionadas = $this->seleccionarPreguntas(); + foreach ($preguntasSeleccionadas as $pregunta) { + $pregunta->mostrarPregunta(); + $respuesta = (int)readline("Selecciona una opción (1-4): "); + $casa = $pregunta->obtenerCasaSegunRespuesta($respuesta); + $this->casas[$casa]->agregarPuntos(1); + } + + $this->mostrarResultado($alumno); + } + + private function seleccionarPreguntas(): array { + $preguntasSeleccionadas = array_rand($this->preguntas, 10); + return array_map(fn($indice) => $this->preguntas[$indice], $preguntasSeleccionadas); + } + + private function mostrarResultado(Alumno $alumno): void { + usort($this->casas, fn($casa1, $casa2) => $casa2->getPuntos() <=> $casa1->getPuntos()); + + $maxPuntos = $this->casas[0]->getPuntos(); + $ganadoras = array_filter($this->casas, fn($casa) => $casa->getPuntos() === $maxPuntos); + + if (count($ganadoras) > 1) { + echo "\n\nLa decisión fue difícil...\n"; + $ganadora = $ganadoras[array_rand($ganadoras)]; + } else { + $ganadora = $ganadoras[0]; + } + + echo "\n\n ".$alumno->getNombre() . ", el sombrero seleccionador te ha asignado a la casa " . strtoupper($ganadora->getNombre()) . "!!!!\n" . PHP_EOL; + } +} + +$casas = [ + 'frontend' => new BaseCasa('Frontend'), + 'backend' => new BaseCasa('Backend'), + 'mobile' => new BaseCasa('Mobile'), + 'data' => new BaseCasa('Data') +]; + +$preguntas = [ + new Pregunta("¿Qué prefieres?", [ + ['texto' => 'Diseñar interfaces', 'casa' => 'frontend'], + ['texto' => 'Crear APIs', 'casa' => 'backend'], + ['texto' => 'Desarrollar apps móviles', 'casa' => 'mobile'], + ['texto' => 'Analizar datos', 'casa' => 'data'] + ]), + new Pregunta("¿Cuál es tu lenguaje de programación favorito?", [ + ['texto' => 'JavaScript', 'casa' => 'frontend'], + ['texto' => 'Python', 'casa' => 'backend'], + ['texto' => 'Kotlin', 'casa' => 'mobile'], + ['texto' => 'R', 'casa' => 'data'] + ]), + new Pregunta("¿Qué herramienta utilizas más a menudo?", [ + ['texto' => 'Figma o Sketch', 'casa' => 'frontend'], + ['texto' => 'Docker o Kubernetes', 'casa' => 'backend'], + ['texto' => 'Android Studio o Xcode', 'casa' => 'mobile'], + ['texto' => 'Jupyter Notebooks o Excel', 'casa' => 'data'] + ]), + new Pregunta("¿Qué te interesa más aprender?", [ + ['texto' => 'HTML/CSS y JavaScript avanzado', 'casa' => 'frontend'], + ['texto' => 'Patrones de diseño y arquitectura de software', 'casa' => 'backend'], + ['texto' => 'Programación nativa para dispositivos móviles', 'casa' => 'mobile'], + ['texto' => 'Estadística y Machine Learning', 'casa' => 'data'] + ]), + new Pregunta("¿Qué tipo de proyecto te gustaría liderar?", [ + ['texto' => 'Un sitio web interactivo y atractivo', 'casa' => 'frontend'], + ['texto' => 'Una plataforma escalable con microservicios', 'casa' => 'backend'], + ['texto' => 'Una app móvil innovadora', 'casa' => 'mobile'], + ['texto' => 'Un sistema de recomendación basado en datos', 'casa' => 'data'] + ]), + new Pregunta("¿Qué es lo más importante para ti en un proyecto?", [ + ['texto' => 'La experiencia de usuario', 'casa' => 'frontend'], + ['texto' => 'El rendimiento y la escalabilidad', 'casa' => 'backend'], + ['texto' => 'La adaptabilidad a diferentes dispositivos', 'casa' => 'mobile'], + ['texto' => 'La precisión de los análisis', 'casa' => 'data'] + ]), + new Pregunta("¿Qué prefieres trabajar?", [ + ['texto' => 'En un entorno donde el diseño visual es clave', 'casa' => 'frontend'], + ['texto' => 'En la lógica del negocio y la arquitectura', 'casa' => 'backend'], + ['texto' => 'En apps móviles con buen rendimiento', 'casa' => 'mobile'], + ['texto' => 'En el análisis y visualización de datos', 'casa' => 'data'] + ]), + new Pregunta("¿Qué framework te parece más interesante?", [ + ['texto' => 'React o Angular', 'casa' => 'frontend'], + ['texto' => 'Spring o Django', 'casa' => 'backend'], + ['texto' => 'Flutter o React Native', 'casa' => 'mobile'], + ['texto' => 'TensorFlow o Pandas', 'casa' => 'data'] + ]), + new Pregunta("¿Qué tipo de reto disfrutas más?", [ + ['texto' => 'Hacer que un sitio web sea accesible y rápido', 'casa' => 'frontend'], + ['texto' => 'Optimizar la comunicación entre servicios', 'casa' => 'backend'], + ['texto' => 'Mejorar la experiencia del usuario en móviles', 'casa' => 'mobile'], + ['texto' => 'Encontrar patrones ocultos en los datos', 'casa' => 'data'] + ]), + new Pregunta("¿Qué prefieres resolver?", [ + ['texto' => 'Problemas de diseño y maquetación', 'casa' => 'frontend'], + ['texto' => 'Problemas de concurrencia y escalabilidad', 'casa' => 'backend'], + ['texto' => 'Problemas de rendimiento en aplicaciones móviles', 'casa' => 'mobile'], + ['texto' => 'Problemas de predicción y análisis de datos', 'casa' => 'data'] + ]), + new Pregunta("¿Qué es lo que más te emociona en tecnología?", [ + ['texto' => 'La evolución de las interfaces de usuario', 'casa' => 'frontend'], + ['texto' => 'La innovación en la arquitectura de software', 'casa' => 'backend'], + ['texto' => 'Las nuevas capacidades de los dispositivos móviles', 'casa' => 'mobile'], + ['texto' => 'Los avances en inteligencia artificial y análisis de datos', 'casa' => 'data'] + ]), + new Pregunta("¿Qué te gusta hacer en tu tiempo libre?", [ + ['texto' => 'Diseñar sitios web personales o interfaces', 'casa' => 'frontend'], + ['texto' => 'Hacer proyectos con servidores y APIs', 'casa' => 'backend'], + ['texto' => 'Crear apps móviles para resolver problemas cotidianos', 'casa' => 'mobile'], + ['texto' => 'Hacer análisis de datos para tomar decisiones mejor informadas', 'casa' => 'data'] + ]), + new Pregunta("¿Qué te gustaría dominar?", [ + ['texto' => 'Animaciones y transiciones en la web', 'casa' => 'frontend'], + ['texto' => 'Arquitectura de microservicios', 'casa' => 'backend'], + ['texto' => 'Optimización de aplicaciones móviles', 'casa' => 'mobile'], + ['texto' => 'Modelos predictivos y análisis de datos', 'casa' => 'data'] + ]), + new Pregunta("¿Qué tipo de problema prefieres resolver en un hackathon?", [ + ['texto' => 'Mejorar la interfaz de usuario de una aplicación', 'casa' => 'frontend'], + ['texto' => 'Optimizar el rendimiento de una API', 'casa' => 'backend'], + ['texto' => 'Crear una aplicación móvil desde cero', 'casa' => 'mobile'], + ['texto' => 'Generar insights a partir de grandes conjuntos de datos', 'casa' => 'data'] + ]), + new Pregunta("¿Qué prefieres al trabajar en equipo?", [ + ['texto' => 'Encargarte de la parte visual y de interacción del usuario', 'casa' => 'frontend'], + ['texto' => 'Asegurarte de que la lógica y los datos fluyan correctamente', 'casa' => 'backend'], + ['texto' => 'Hacer que la app funcione bien en diferentes dispositivos', 'casa' => 'mobile'], + ['texto' => 'Proveer métricas y análisis para tomar mejores decisiones', 'casa' => 'data'] + ]), + new Pregunta("¿Cuál es tu prioridad al optimizar código?", [ + ['texto' => 'Que la interfaz cargue rápido y sea amigable', 'casa' => 'frontend'], + ['texto' => 'Que los servicios backend sean escalables y eficientes', 'casa' => 'backend'], + ['texto' => 'Que la app móvil consuma pocos recursos y sea fluida', 'casa' => 'mobile'], + ['texto' => 'Que el procesamiento de datos sea rápido y preciso', 'casa' => 'data'] + ]), + new Pregunta("¿Qué prefieres al probar una aplicación?", [ + ['texto' => 'Verificar que el diseño y la usabilidad sean impecables', 'casa' => 'frontend'], + ['texto' => 'Asegurar que las funcionalidades y la lógica sean correctas', 'casa' => 'backend'], + ['texto' => 'Revisar que la app funcione correctamente en múltiples dispositivos', 'casa' => 'mobile'], + ['texto' => 'Validar que los resultados de los análisis sean exactos', 'casa' => 'data'] + ]), + new Pregunta("¿Qué tipo de proyectos sigues en la industria?", [ + ['texto' => 'Proyectos de diseño web innovador y UX', 'casa' => 'frontend'], + ['texto' => 'Nuevas tecnologías de servidores y backends', 'casa' => 'backend'], + ['texto' => 'Aplicaciones móviles disruptivas y eficientes', 'casa' => 'mobile'], + ['texto' => 'Proyectos de inteligencia artificial y ciencia de datos', 'casa' => 'data'] + ]), + new Pregunta("¿Qué harías para mejorar una plataforma existente?", [ + ['texto' => 'Mejorar la apariencia y usabilidad de la interfaz', 'casa' => 'frontend'], + ['texto' => 'Optimizar el rendimiento de las consultas y los servidores', 'casa' => 'backend'], + ['texto' => 'Hacer que la plataforma sea accesible desde dispositivos móviles', 'casa' => 'mobile'], + ['texto' => 'Incluir más análisis de datos para obtener mejor información', 'casa' => 'data'] + ]), + new Pregunta("¿Qué aspecto del desarrollo de software te parece más retador?", [ + ['texto' => 'Hacer que una aplicación web sea visualmente atractiva', 'casa' => 'frontend'], + ['texto' => 'Crear sistemas backend que manejen millones de usuarios', 'casa' => 'backend'], + ['texto' => 'Optimizar la app móvil para diferentes sistemas operativos', 'casa' => 'mobile'], + ['texto' => 'Gestionar grandes volúmenes de datos y extraer conclusiones útiles', 'casa' => 'data'] + ]), + +]; + + +echo "Bienvenido al sombrero seleccionador de Hogwarts de programación.\n"; +$nombreAlumno = readline("Por favor, introduce tu nombre: "); +$alumno = new Alumno($nombreAlumno); + +$sombrero = new SombreroSeleccionador($casas, $preguntas); +$sombrero->asignarCasa($alumno); + + diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/miguelex.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/miguelex.py new file mode 100644 index 0000000000..f18b4d0e66 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/miguelex.py @@ -0,0 +1,228 @@ +import random + +class Casa: + def __init__(self, nombre): + self.nombre = nombre + self.puntos = 0 + + def get_nombre(self): + return self.nombre + + def agregar_puntos(self, puntos): + self.puntos += puntos + + def get_puntos(self): + return self.puntos + +class Alumno: + def __init__(self, nombre): + self.nombre = nombre + + def get_nombre(self): + return self.nombre + +class Pregunta: + def __init__(self, pregunta, opciones): + self.pregunta = pregunta + self.opciones = opciones + + def mostrar_pregunta(self): + print(self.pregunta) + for idx, opcion in enumerate(self.opciones): + print(f"{idx + 1}: {opcion['texto']}") + + def obtener_casa_segun_respuesta(self, respuesta): + return self.opciones[respuesta - 1]['casa'] + +class SombreroSeleccionador: + def __init__(self, casas, preguntas): + self.casas = casas + self.preguntas = preguntas + + def asignar_casa(self, alumno): + preguntas_seleccionadas = self.seleccionar_preguntas() + for pregunta in preguntas_seleccionadas: + pregunta.mostrar_pregunta() + respuesta = self.leer_respuesta() + casa = pregunta.obtener_casa_segun_respuesta(respuesta) + self.casas[casa].agregar_puntos(1) + + self.mostrar_resultado(alumno) + + def seleccionar_preguntas(self): + preguntas_seleccionadas = [] + indices_seleccionados = set() + + while len(preguntas_seleccionadas) < 10: + indice = random.randint(0, len(self.preguntas) - 1) + if indice not in indices_seleccionados: + indices_seleccionados.add(indice) + preguntas_seleccionadas.append(self.preguntas[indice]) + + return preguntas_seleccionadas + + def leer_respuesta(self): + while True: + try: + respuesta = int(input("Selecciona una opción (1-4): ")) + if 1 <= respuesta <= 4: + return respuesta + else: + print("Por favor, elige un número entre 1 y 4.") + except ValueError: + print("Por favor, introduce un número válido.") + + def mostrar_resultado(self, alumno): + casas_ordenadas = sorted(self.casas.values(), key=lambda casa: casa.get_puntos(), reverse=True) + + max_puntos = casas_ordenadas[0].get_puntos() + ganadoras = [casa for casa in casas_ordenadas if casa.get_puntos() == max_puntos] + + if len(ganadoras) > 1: + print("\n\nLa decisión fue difícil...") + ganadora = random.choice(ganadoras) + else: + ganadora = ganadoras[0] + + print(f"\n\n{alumno.get_nombre()}, el sombrero seleccionador te ha asignado a la casa {ganadora.get_nombre().upper()}!!!!\n") + + +# Definir las casas +casas = { + 'frontend': Casa('Frontend'), + 'backend': Casa('Backend'), + 'mobile': Casa('Mobile'), + 'data': Casa('Data') +} + +# Definir las preguntas +preguntas = [ + Pregunta("¿Qué prefieres?", [ + {'texto': 'Diseñar interfaces', 'casa': 'frontend'}, + {'texto': 'Crear APIs', 'casa': 'backend'}, + {'texto': 'Desarrollar apps móviles', 'casa': 'mobile'}, + {'texto': 'Analizar datos', 'casa': 'data'} + ]), + Pregunta("¿Cuál es tu lenguaje de programación favorito?", [ + {'texto': 'JavaScript', 'casa': 'frontend'}, + {'texto': 'Python', 'casa': 'backend'}, + {'texto': 'Kotlin', 'casa': 'mobile'}, + {'texto': 'R', 'casa': 'data'} + ]), + Pregunta("¿Qué herramienta utilizas más a menudo?", [ + {'texto': 'Figma o Sketch', 'casa': 'frontend'}, + {'texto': 'Docker o Kubernetes', 'casa': 'backend'}, + {'texto': 'Android Studio o Xcode', 'casa': 'mobile'}, + {'texto': 'Jupyter Notebooks o Excel', 'casa': 'data'} + ]), + Pregunta("¿Qué te interesa más aprender?", [ + { 'texto': 'HTML/CSS y JavaScript avanzado', 'casa': 'frontend' }, + { 'texto': 'Patrones de diseño y arquitectura de software', 'casa': 'backend' }, + { 'texto': 'Programación nativa para dispositivos móviles', 'casa': 'mobile' }, + { 'texto': 'Estadística y Machine Learning', 'casa': 'data' } + ]), + Pregunta("¿Qué tipo de proyecto te gustaría liderar?", [ + { 'texto': 'Un sitio web interactivo y atractivo', 'casa': 'frontend' }, + { 'texto': 'Una plataforma escalable con microservicios', 'casa': 'backend' }, + { 'texto': 'Una app móvil innovadora', 'casa': 'mobile' }, + { 'texto': 'Un sistema de recomendación basado en datos', 'casa': 'data' } + ]), + Pregunta("¿Qué es lo más importante para ti en un proyecto?", [ + { 'texto': 'La experiencia de usuario', 'casa': 'frontend' }, + { 'texto': 'El rendimiento y la escalabilidad', 'casa': 'backend' }, + { 'texto': 'La adaptabilidad a diferentes dispositivos', 'casa': 'mobile' }, + { 'texto': 'La precisión de los análisis', 'casa': 'data' } + ]), + Pregunta("¿Qué prefieres trabajar?", [ + {'texto' : 'En un entorno donde el diseño visual es clave', 'casa' :'frontend'}, + {'texto' : 'En la lógica del negocio y la arquitectura', 'casa' :'backend'}, + {'texto' : 'En apps móviles con buen rendimiento', 'casa' :'mobile'}, + {'texto' : 'En el análisis y visualización de datos', 'casa' :'data'} + ]), + Pregunta("¿Qué framework te parece más interesante?", [ + {'texto' : 'React o Angular', 'casa' :'frontend'}, + {'texto' : 'Spring o Django', 'casa' :'backend'}, + {'texto' : 'Flutter o React Native', 'casa' :'mobile'}, + {'texto' : 'TensorFlow o Pandas', 'casa' :'data'} + ]), + Pregunta("¿Qué tipo de reto disfrutas más?", [ + {'texto' : 'Hacer que un sitio web sea accesible y rápido', 'casa' :'frontend'}, + {'texto' : 'Optimizar la comunicación entre servicios', 'casa' :'backend'}, + {'texto' : 'Mejorar la experiencia del usuario en móviles', 'casa' :'mobile'}, + {'texto' : 'Encontrar patrones ocultos en los datos', 'casa' :'data'} + ]), + Pregunta("¿Qué prefieres resolver?", [ + {'texto' : 'Problemas de diseño y maquetación', 'casa' :'frontend'}, + {'texto' : 'Problemas de concurrencia y escalabilidad', 'casa' :'backend'}, + {'texto' : 'Problemas de rendimiento en aplicaciones móviles', 'casa' :'mobile'}, + {'texto' : 'Problemas de predicción y análisis de datos', 'casa' :'data'} + ]), + Pregunta("¿Qué es lo que más te emociona en tecnología?", [ + {'texto' : 'La evolución de las interfaces de usuario', 'casa' :'frontend'}, + {'texto' : 'La innovación en la arquitectura de software', 'casa' :'backend'}, + {'texto' : 'Las nuevas capacidades de los dispositivos móviles', 'casa' :'mobile'}, + {'texto' : 'Los avances en inteligencia artificial y análisis de datos', 'casa' : 'data'} + ]), + Pregunta("¿Qué te gusta hacer en tu tiempo libre?", [ + {'texto' : 'Diseñar sitios web personales o interfaces', 'casa': 'frontend'}, + {'texto' : 'Hacer proyectos con servidores y APIs', 'casa': 'backend'}, + {'texto' : 'Crear apps móviles para resolver problemas cotidianos', 'casa': 'mobile'}, + {'texto' : 'Hacer análisis de datos para tomar decisiones mejor informadas', 'casa': 'data'} + ]), + Pregunta("¿Qué te gustaría dominar?", [ + {'texto' : 'Animaciones y transiciones en la web', 'casa': 'frontend'}, + {'texto' : 'Arquitectura de microservicios', 'casa': 'backend'}, + {'texto' : 'Optimización de aplicaciones móviles', 'casa': 'mobile'}, + {'texto' : 'Modelos predictivos y análisis de datos', 'casa': 'data'} + ]), + Pregunta("¿Qué tipo de problema prefieres resolver en un hackathon?", [ + {'texto' : 'Mejorar la interfaz de usuario de una aplicación', 'casa': 'frontend'}, + {'texto' : 'Optimizar el rendimiento de una API', 'casa': 'backend'}, + {'texto' : 'Crear una aplicación móvil desde cero', 'casa': 'mobile'}, + {'texto' : 'Generar insights a partir de grandes conjuntos de datos', 'casa': 'data'} + ]), + Pregunta("¿Qué prefieres al trabajar en equipo?", [ + {'texto' : 'Encargarte de la parte visual y de interacción del usuario', 'casa': 'frontend'}, + {'texto' : 'Asegurarte de que la lógica y los datos fluyan correctamente', 'casa': 'backend'}, + {'texto' : 'Hacer que la app funcione bien en diferentes dispositivos', 'casa': 'mobile'}, + {'texto' : 'Proveer métricas y análisis para tomar mejores decisiones', 'casa': 'data'} + ]), + Pregunta("¿Cuál es tu prioridad al optimizar código?", [ + {'texto' : 'Que la interfaz cargue rápido y sea amigable', 'casa': 'frontend'}, + {'texto' : 'Que los servicios backend sean escalables y eficientes', 'casa': 'backend'}, + {'texto' : 'Que la app móvil consuma pocos recursos y sea fluida', 'casa': 'mobile'}, + {'texto' : 'Que el procesamiento de datos sea rápido y preciso', 'casa': 'data'} + ]), + Pregunta("¿Qué prefieres al probar una aplicación?", [ + {'texto' : 'Verificar que el diseño y la usabilidad sean impecables', 'casa': 'frontend'}, + {'texto' : 'Asegurar que las funcionalidades y la lógica sean correctas', 'casa' :'backend'}, + {'texto' : 'Revisar que la app funcione correctamente en múltiples dispositivos', 'casa' : 'mobile'}, + {'texto' : 'Validar que los resultados de los análisis sean exactos', 'casa' : 'data'} + ]), + Pregunta("¿Qué tipo de proyectos sigues en la industria?", [ + {'texto' : 'Proyectos de diseño web innovador y UX', 'casa' : 'frontend'}, + {'texto' : 'Nuevas tecnologías de servidores y backends', 'casa' : 'backend'}, + {'texto' : 'Aplicaciones móviles disruptivas y eficientes', 'casa' : 'mobile'}, + {'texto' : 'Proyectos de inteligencia artificial y ciencia de datos', 'casa' : 'data'} + ]), + Pregunta("¿Qué harías para mejorar una plataforma existente?", [ + {'texto' : 'Mejorar la apariencia y usabilidad de la interfaz', 'casa' : 'frontend'}, + {'texto' : 'Optimizar el rendimiento de las consultas y los servidores', 'casa' : 'backend'}, + {'texto' : 'Hacer que la plataforma sea accesible desde dispositivos móviles', 'casa' : 'mobile'}, + {'texto' : 'Incluir más análisis de datos para obtener mejor información', 'casa' : 'data'} + ]), + Pregunta("¿Qué aspecto del desarrollo de software te parece más retador?", [ + {'texto' : 'Hacer que una aplicación web sea visualmente atractiva', 'casa' : 'frontend'}, + {'texto' : 'Crear sistemas backend que manejen millones de usuarios', 'casa' : 'backend'}, + {'texto' : 'Optimizar la app móvil para diferentes sistemas operativos', 'casa' : 'mobile'}, + {'texto' : 'Gestionar grandes volúmenes de datos y extraer conclusiones útiles', 'casa' : 'data'} + ]), +] + +# Solicitar nombre del alumno +nombre_alumno = input("Por favor, introduce tu nombre: ") +alumno = Alumno(nombre_alumno) + +# Crear instancia del sombrero seleccionador y asignar casa +sombrero = SombreroSeleccionador(casas, preguntas) +sombrero.asignar_casa(alumno) diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/typescript/miguelex.ts b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/typescript/miguelex.ts new file mode 100644 index 0000000000..fa2c728090 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/typescript/miguelex.ts @@ -0,0 +1,266 @@ +import * as readline from 'readline'; + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +class Casa { + private nombre: string; + private puntos: number; + + constructor(nombre: string) { + this.nombre = nombre; + this.puntos = 0; + } + + public getNombre(): string { + return this.nombre; + } + + public agregarPuntos(puntos: number): void { + this.puntos += puntos; + } + + public getPuntos(): number { + return this.puntos; + } +} + +class Alumno { + private nombre: string; + + constructor(nombre: string) { + this.nombre = nombre; + } + + public getNombre(): string { + return this.nombre; + } +} + +interface Opcion { + texto: string; + casa: string; +} + +class Pregunta { + private pregunta: string; + private opciones: Opcion[]; + + constructor(pregunta: string, opciones: Opcion[]) { + this.pregunta = pregunta; + this.opciones = opciones; + } + + public mostrarPregunta(): void { + console.log(this.pregunta); + this.opciones.forEach((opcion, index) => { + console.log(`${index + 1}: ${opcion.texto}`); + }); + } + + public obtenerCasaSegunRespuesta(respuesta: number): string { + return this.opciones[respuesta - 1].casa; + } +} + +class SombreroSeleccionador { + private casas: Record; + private preguntas: Pregunta[]; + + constructor(casas: Record, preguntas: Pregunta[]) { + this.casas = casas; + this.preguntas = preguntas; + } + + public async asignarCasa(alumno: Alumno): Promise { + const preguntasSeleccionadas = this.seleccionarPreguntas(); + for (const pregunta of preguntasSeleccionadas) { + pregunta.mostrarPregunta(); + const respuesta = await this.leerRespuesta(); + const casa = pregunta.obtenerCasaSegunRespuesta(respuesta); + this.casas[casa].agregarPuntos(1); + } + + this.mostrarResultado(alumno); + rl.close(); + } + + private seleccionarPreguntas(): Pregunta[] { + const preguntasSeleccionadas: Pregunta[] = []; + const indicesSeleccionados = new Set(); + + while (preguntasSeleccionadas.length < 10) { + const indice = Math.floor(Math.random() * this.preguntas.length); + if (!indicesSeleccionados.has(indice)) { + indicesSeleccionados.add(indice); + preguntasSeleccionadas.push(this.preguntas[indice]); + } + } + + return preguntasSeleccionadas; + } + + private leerRespuesta(): Promise { + return new Promise((resolve) => { + rl.question("Selecciona una opción (1-4): ", (respuesta) => { + resolve(parseInt(respuesta)); + }); + }); + } + + private mostrarResultado(alumno: Alumno): void { + const casasOrdenadas = Object.values(this.casas).sort((a, b) => b.getPuntos() - a.getPuntos()); + + const maxPuntos = casasOrdenadas[0].getPuntos(); + const ganadoras = casasOrdenadas.filter(casa => casa.getPuntos() === maxPuntos); + + let ganadora: Casa; + if (ganadoras.length > 1) { + console.log("\n\nLa decisión fue difícil..."); + ganadora = ganadoras[Math.floor(Math.random() * ganadoras.length)]; + } else { + ganadora = ganadoras[0]; + } + + console.log(`\n\n ${alumno.getNombre()}, el sombrero seleccionador te ha asignado a la casa ${ganadora.getNombre().toUpperCase()}!!!!\n`); + } +} + +const casas: Record = { + 'frontend': new Casa('Frontend'), + 'backend': new Casa('Backend'), + 'mobile': new Casa('Mobile'), + 'data': new Casa('Data') +}; + +const preguntas = [ + new Pregunta("¿Qué prefieres?", [ + { texto: 'Diseñar interfaces', casa: 'frontend' }, + { texto: 'Crear APIs', casa: 'backend' }, + { texto: 'Desarrollar apps móviles', casa: 'mobile' }, + { texto: 'Analizar datos', casa: 'data' } + ]), + new Pregunta("¿Cuál es tu lenguaje de programación favorito?", [ + { texto: 'JavaScript', casa: 'frontend' }, + { texto: 'Python', casa: 'backend' }, + { texto: 'Kotlin', casa: 'mobile' }, + { texto: 'R', casa: 'data' } + ]), + new Pregunta("¿Qué herramienta utilizas más a menudo?", [ + { texto: 'Figma o Sketch', casa: 'frontend' }, + { texto: 'Docker o Kubernetes', casa: 'backend' }, + { texto: 'Android Studio o Xcode', casa: 'mobile' }, + { texto: 'Jupyter Notebooks o Excel', casa: 'data' } + ]), + new Pregunta("¿Qué te interesa más aprender?", [ + { texto: 'HTML/CSS y JavaScript avanzado', casa: 'frontend' }, + { texto: 'Patrones de diseño y arquitectura de software', casa: 'backend' }, + { texto: 'Programación nativa para dispositivos móviles', casa: 'mobile' }, + { texto: 'Estadística y Machine Learning', casa: 'data' } + ]), + new Pregunta("¿Qué tipo de proyecto te gustaría liderar?", [ + { texto: 'Un sitio web interactivo y atractivo', casa: 'frontend' }, + { texto: 'Una plataforma escalable con microservicios', casa: 'backend' }, + { texto: 'Una app móvil innovadora', casa: 'mobile' }, + { texto: 'Un sistema de recomendación basado en datos', casa: 'data' } + ]), + new Pregunta("¿Qué es lo más importante para ti en un proyecto?", [ + { texto: 'La experiencia de usuario', casa: 'frontend' }, + { texto: 'El rendimiento y la escalabilidad', casa: 'backend' }, + { texto: 'La adaptabilidad a diferentes dispositivos', casa: 'mobile' }, + { texto: 'La precisión de los análisis', casa: 'data' } + ]), + new Pregunta("¿Qué prefieres trabajar?", [ + {texto : 'En un entorno donde el diseño visual es clave', casa :'frontend'}, + {texto : 'En la lógica del negocio y la arquitectura', casa :'backend'}, + {texto : 'En apps móviles con buen rendimiento', casa :'mobile'}, + {texto : 'En el análisis y visualización de datos', casa :'data'} + ]), + new Pregunta("¿Qué framework te parece más interesante?", [ + {texto: 'React o Angular', casa :'frontend'}, + {texto : 'Spring o Django', casa :'backend'}, + {texto : 'Flutter o React Native', casa :'mobile'}, + {texto : 'TensorFlow o Pandas', casa :'data'} + ]), + new Pregunta("¿Qué tipo de reto disfrutas más?", [ + {texto : 'Hacer que un sitio web sea accesible y rápido', casa :'frontend'}, + {texto : 'Optimizar la comunicación entre servicios', casa :'backend'}, + {texto : 'Mejorar la experiencia del usuario en móviles', casa :'mobile'}, + {texto : 'Encontrar patrones ocultos en los datos', casa :'data'} + ]), + new Pregunta("¿Qué prefieres resolver?", [ + {texto : 'Problemas de diseño y maquetación', casa :'frontend'}, + {texto : 'Problemas de concurrencia y escalabilidad', casa :'backend'}, + {texto : 'Problemas de rendimiento en aplicaciones móviles', casa :'mobile'}, + {texto : 'Problemas de predicción y análisis de datos', casa :'data'} + ]), + new Pregunta("¿Qué es lo que más te emociona en tecnología?", [ + {texto : 'La evolución de las interfaces de usuario', casa :'frontend'}, + {texto : 'La innovación en la arquitectura de software', casa :'backend'}, + {texto : 'Las nuevas capacidades de los dispositivos móviles', casa :'mobile'}, + {texto : 'Los avances en inteligencia artificial y análisis de datos', casa : 'data'} + ]), + new Pregunta("¿Qué te gusta hacer en tu tiempo libre?", [ + {texto : 'Diseñar sitios web personales o interfaces', casa: 'frontend'}, + {texto : 'Hacer proyectos con servidores y APIs', casa: 'backend'}, + {texto : 'Crear apps móviles para resolver problemas cotidianos', casa: 'mobile'}, + {texto : 'Hacer análisis de datos para tomar decisiones mejor informadas', casa: 'data'} + ]), + new Pregunta("¿Qué te gustaría dominar?", [ + {texto : 'Animaciones y transiciones en la web', casa: 'frontend'}, + {texto : 'Arquitectura de microservicios', casa: 'backend'}, + {texto : 'Optimización de aplicaciones móviles', casa: 'mobile'}, + {texto : 'Modelos predictivos y análisis de datos', casa: 'data'} + ]), + new Pregunta("¿Qué tipo de problema prefieres resolver en un hackathon?", [ + {texto : 'Mejorar la interfaz de usuario de una aplicación', casa: 'frontend'}, + {texto : 'Optimizar el rendimiento de una API', casa: 'backend'}, + {texto : 'Crear una aplicación móvil desde cero', casa: 'mobile'}, + {texto : 'Generar insights a partir de grandes conjuntos de datos', casa: 'data'} + ]), + new Pregunta("¿Qué prefieres al trabajar en equipo?", [ + {texto : 'Encargarte de la parte visual y de interacción del usuario', casa: 'frontend'}, + {texto : 'Asegurarte de que la lógica y los datos fluyan correctamente', casa: 'backend'}, + {texto : 'Hacer que la app funcione bien en diferentes dispositivos', casa: 'mobile'}, + {texto : 'Proveer métricas y análisis para tomar mejores decisiones', casa: 'data'} + ]), + new Pregunta("¿Cuál es tu prioridad al optimizar código?", [ + {texto : 'Que la interfaz cargue rápido y sea amigable', casa: 'frontend'}, + {texto : 'Que los servicios backend sean escalables y eficientes', casa: 'backend'}, + {texto : 'Que la app móvil consuma pocos recursos y sea fluida', casa: 'mobile'}, + {texto : 'Que el procesamiento de datos sea rápido y preciso', casa: 'data'} + ]), + new Pregunta("¿Qué prefieres al probar una aplicación?", [ + {texto : 'Verificar que el diseño y la usabilidad sean impecables', casa: 'frontend'}, + {texto : 'Asegurar que las funcionalidades y la lógica sean correctas', casa :'backend'}, + {texto : 'Revisar que la app funcione correctamente en múltiples dispositivos', casa : 'mobile'}, + {texto : 'Validar que los resultados de los análisis sean exactos', casa : 'data'} + ]), + new Pregunta("¿Qué tipo de proyectos sigues en la industria?", [ + {texto : 'Proyectos de diseño web innovador y UX', casa : 'frontend'}, + {texto : 'Nuevas tecnologías de servidores y backends', casa : 'backend'}, + {texto : 'Aplicaciones móviles disruptivas y eficientes', casa : 'mobile'}, + {texto : 'Proyectos de inteligencia artificial y ciencia de datos', casa : 'data'} + ]), + new Pregunta("¿Qué harías para mejorar una plataforma existente?", [ + {texto : 'Mejorar la apariencia y usabilidad de la interfaz', casa : 'frontend'}, + {texto : 'Optimizar el rendimiento de las consultas y los servidores', casa : 'backend'}, + {texto : 'Hacer que la plataforma sea accesible desde dispositivos móviles', casa : 'mobile'}, + {texto : 'Incluir más análisis de datos para obtener mejor información', casa : 'data'} + ]), + new Pregunta("¿Qué aspecto del desarrollo de software te parece más retador?", [ + {texto : 'Hacer que una aplicación web sea visualmente atractiva', casa : 'frontend'}, + {texto : 'Crear sistemas backend que manejen millones de usuarios', casa : 'backend'}, + {texto : 'Optimizar la app móvil para diferentes sistemas operativos', casa : 'mobile'}, + {texto : 'Gestionar grandes volúmenes de datos y extraer conclusiones útiles', casa : 'data'} + ]), +]; + + +rl.question("Por favor, introduce tu nombre: ", (nombreAlumno) => { + const alumno = new Alumno(nombreAlumno); + const sombrero = new SombreroSeleccionador(casas, preguntas); + sombrero.asignarCasa(alumno); +}); From a2b53df222f9baa2c841bf4cd2490dd733adf5fd Mon Sep 17 00:00:00 2001 From: drvito1977 Date: Mon, 9 Sep 2024 09:39:08 +0200 Subject: [PATCH 070/539] =?UTF-8?q?a=C3=B1adir=20ejemplos=20en=20de=20estr?= =?UTF-8?q?ucturas=20de=20control=20(arrays)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Roadmap/03 - ESTRUCTURAS DE DATOS/drvito1977_03.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/drvito1977_03.sh b/Roadmap/03 - ESTRUCTURAS DE DATOS/drvito1977_03.sh index 775646c0c3..a568f86bff 100644 --- a/Roadmap/03 - ESTRUCTURAS DE DATOS/drvito1977_03.sh +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/drvito1977_03.sh @@ -131,7 +131,7 @@ function actualizar_contacto { function eliminar_contacto { read -p "Nombre: " nombre # Verificar si el contacto existe en la agenda - if [[ -z ${agenda[$nombre]} ]]; entonces + if [[ -z ${agenda[$nombre]} ]]; then echo "Contacto no encontrado." return fi From 590a0a996d8d017de0ffd0287231b269bbc1b94f Mon Sep 17 00:00:00 2001 From: drvito1977 Date: Mon, 9 Sep 2024 10:01:17 +0200 Subject: [PATCH 071/539] movido archivo a repo privado --- .../{drvito1977_03.sh => bash/drvito1977.sh} | 42 ++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) rename Roadmap/03 - ESTRUCTURAS DE DATOS/{drvito1977_03.sh => bash/drvito1977.sh} (72%) diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/drvito1977_03.sh b/Roadmap/03 - ESTRUCTURAS DE DATOS/bash/drvito1977.sh similarity index 72% rename from Roadmap/03 - ESTRUCTURAS DE DATOS/drvito1977_03.sh rename to Roadmap/03 - ESTRUCTURAS DE DATOS/bash/drvito1977.sh index a568f86bff..8fffd9d060 100644 --- a/Roadmap/03 - ESTRUCTURAS DE DATOS/drvito1977_03.sh +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/bash/drvito1977.sh @@ -53,8 +53,8 @@ echo "String original: $string" string+="!" # Inserción # Imprimir la cadena después de la inserción echo "String después de inserción: $string" -# Eliminar parte de la cadena (mantener solo los primeros 5 caracteres) -string=${string:0:5} # Borrado +# Eliminar parte de la cadena (mantener solo los primeros 4 caracteres) +string=${string:0:4} # Borrado # Imprimir la cadena después del borrado echo "String después de borrado: $string" # Actualizar la cadena completa @@ -83,65 +83,84 @@ echo "Número después de actualización: $num" # Agenda de contactos declare -A agenda +# Declarar un array asociativo para la agenda de contactos +declare -A agenda + # Función para insertar un contacto function insertar_contacto { + # Pedir al usuario que ingrese el nombre del contacto read -p "Nombre: " nombre + # Pedir al usuario que ingrese el número de teléfono del contacto read -p "Número de teléfono: " telefono # Validar que el número de teléfono sea numérico y tenga hasta 11 dígitos - if [[ ! $telefono =~ ^[0-9]{1,11}$ ]]; then + if ! echo "$telefono" | grep -qE "^[0-9]{1,11}$"; then + # Si el número no es válido, mostrar un mensaje y salir de la función echo "Número de teléfono inválido." return fi # Añadir el contacto a la agenda agenda[$nombre]=$telefono + # Confirmar que el contacto ha sido añadido echo "Contacto añadido." } # Función para buscar un contacto function buscar_contacto { + # Pedir al usuario que ingrese el nombre del contacto a buscar read -p "Nombre: " nombre # Verificar si el contacto existe en la agenda if [[ -z ${agenda[$nombre]} ]]; then + # Si no existe, mostrar un mensaje echo "Contacto no encontrado." else + # Si existe, mostrar el número de teléfono del contacto echo "Teléfono de $nombre: ${agenda[$nombre]}" fi } # Función para actualizar un contacto function actualizar_contacto { + # Pedir al usuario que ingrese el nombre del contacto a actualizar read -p "Nombre: " nombre # Verificar si el contacto existe en la agenda if [[ -z ${agenda[$nombre]} ]]; then + # Si no existe, mostrar un mensaje y salir de la función echo "Contacto no encontrado." return fi + # Pedir al usuario que ingrese el nuevo número de teléfono read -p "Nuevo número de teléfono: " telefono # Validar que el nuevo número de teléfono sea numérico y tenga hasta 11 dígitos - if [[ ! $telefono =~ ^[0-9]{1,11}$ ]]; then + if ! echo "$telefono" | grep -qE "^[0-9]{1,11}$"; then + # Si el número no es válido, mostrar un mensaje y salir de la función echo "Número de teléfono inválido." return fi # Actualizar el contacto en la agenda agenda[$nombre]=$telefono + # Confirmar que el contacto ha sido actualizado echo "Contacto actualizado." } # Función para eliminar un contacto function eliminar_contacto { + # Pedir al usuario que ingrese el nombre del contacto a eliminar read -p "Nombre: " nombre # Verificar si el contacto existe en la agenda if [[ -z ${agenda[$nombre]} ]]; then + # Si no existe, mostrar un mensaje y salir de la función echo "Contacto no encontrado." return fi # Eliminar el contacto de la agenda unset agenda[$nombre] + # Confirmar que el contacto ha sido eliminado echo "Contacto eliminado." } # Función para mostrar el menú de opciones function mostrar_menu { + # Mostrar las opciones disponibles al usuario echo "1. Insertar contacto" echo "2. Buscar contacto" echo "3. Actualizar contacto" @@ -151,14 +170,17 @@ function mostrar_menu { # Bucle principal para mostrar el menú y ejecutar las opciones seleccionadas while true; do + # Mostrar el menú de opciones mostrar_menu + # Pedir al usuario que seleccione una opción read -p "Seleccione una opción: " opcion + # Ejecutar la acción correspondiente a la opción seleccionada case $opcion in - 1) insertar_contacto ;; - 2) buscar_contacto ;; - 3) actualizar_contacto ;; - 4) eliminar_contacto ;; - 5) break ;; - *) echo "Opción inválida." ;; + 1) insertar_contacto ;; # Llamar a la función para insertar un contacto + 2) buscar_contacto ;; # Llamar a la función para buscar un contacto + 3) actualizar_contacto ;; # Llamar a la función para actualizar un contacto + 4) eliminar_contacto ;; # Llamar a la función para eliminar un contacto + 5) break ;; # Salir del bucle y terminar el programa + *) echo "Opción inválida." ;; # Mostrar un mensaje si la opción no es válida esac done \ No newline at end of file From fab001fa009bab17697bc38258fb4082ab0515f0 Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Mon, 9 Sep 2024 11:01:20 +0200 Subject: [PATCH 072/539] #8 - Java --- Roadmap/08 - CLASES/java/C1.java | 71 ++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Roadmap/08 - CLASES/java/C1.java diff --git a/Roadmap/08 - CLASES/java/C1.java b/Roadmap/08 - CLASES/java/C1.java new file mode 100644 index 0000000000..9d99163537 --- /dev/null +++ b/Roadmap/08 - CLASES/java/C1.java @@ -0,0 +1,71 @@ +class Qv1ko { + + public static void main(String[] args) { + + C1 example1 = new C1(); + System.out.println(example1.toString()); + example1.setC1String("Example 1"); + System.out.println(example1.getC1String()); + + C2 example2 = new C2(); + System.out.println(example2.toString()); + example2.setC2String("Example 2"); + System.out.println(example2.getC2String()); + + } + +} + +class C1 { + + String c1String; + + C1() { + this.c1String = "example"; + } + + C1(String value) { + this.c1String = value; + } + + public String getC1String() { + return c1String; + } + + public void setC1String(String c1String) { + this.c1String = c1String; + } + + @Override + public String toString() { + return "Class 1 value: " + c1String; + } + +} + +class C2 { + + String c2String; + + C2() { + this.c2String = "example"; + } + + C2(String value) { + this.c2String = value; + } + + public String getC2String() { + return c2String; + } + + public void setC2String(String c2String) { + this.c2String = c2String; + } + + @Override + public String toString() { + return "Class 2 value: " + c2String; + } + +} From ae002c20d11cb7a3636cd06de2e567bebe96de61 Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Mon, 9 Sep 2024 11:01:46 +0200 Subject: [PATCH 073/539] #8 - Java --- Roadmap/08 - CLASES/java/{C1.java => Qv1ko.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/08 - CLASES/java/{C1.java => Qv1ko.java} (100%) diff --git a/Roadmap/08 - CLASES/java/C1.java b/Roadmap/08 - CLASES/java/Qv1ko.java similarity index 100% rename from Roadmap/08 - CLASES/java/C1.java rename to Roadmap/08 - CLASES/java/Qv1ko.java From 5d3c73be459fda1c63ec78c32c03a2506b6c0e3f Mon Sep 17 00:00:00 2001 From: Jymtr Date: Mon, 9 Sep 2024 11:02:27 +0200 Subject: [PATCH 074/539] #18 - Python --- Roadmap/17 - ITERACIONES/python/JuanDAW37.py | 74 ++++++++++++++++++++ Roadmap/18 - CONJUNTOS/python/JuanDAW37.py | 59 ++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 Roadmap/17 - ITERACIONES/python/JuanDAW37.py create mode 100644 Roadmap/18 - CONJUNTOS/python/JuanDAW37.py diff --git a/Roadmap/17 - ITERACIONES/python/JuanDAW37.py b/Roadmap/17 - ITERACIONES/python/JuanDAW37.py new file mode 100644 index 0000000000..78bee852d1 --- /dev/null +++ b/Roadmap/17 - ITERACIONES/python/JuanDAW37.py @@ -0,0 +1,74 @@ +""" +* EJERCICIO: + * Utilizando tu lenguaje, emplea 3 mecanismos diferentes para imprimir + * números del 1 al 10 mediante iteración. + * + * DIFICULTAD EXTRA (opcional): + * Escribe el mayor número de mecanismos que posea tu lenguaje + * para iterar valores. ¿Eres capaz de utilizar 5? ¿Y 10? +""" +# Bucle while +print('*******Bucle While*******') +i = 1 +while i <= 10: + print(i) + i += 1 + +# Simulando Do...While +print('*******Bucle Simulando Do...While*******') +i = 1 +while True: + if i <= 10: + print(i) + i += 1 + else: + break + +# Bucle for +print('*******Bucle For con listas(lists)*******') +numeros = [1,2,3,4,5,6,7,8,9,10] + +for i in numeros: + print(i) + +print('*******Bucle For con conjuntos(sets)*******') +for i in {1,2,3,4,5,6,7,8,9,10}: + print(i) + +print('*******Bucle For con mapas(maps)*******') +for i in {1:'a',2:'b',3:'c',4:'d',5:'e',6:'f',7:'g',8:'h',9:'i',10:'j'}: + print(i) + +print('*******Bucle For con tuplas(tuples)*******') +for i in (1,2,3,4,5,6,7,8,9,10): + print(i) + +print('*******Bucle For con función range()*******') +for i in range(1, 11): + print(i) + +# Función recursiva: +print('*******Función Recursiva*******') +def imprimir_numeros(n:int = 1): + if n <= 10: + print(n) + imprimir_numeros(n + 1) + +imprimir_numeros() + +# EXTRA, de las 10 solicitadas podemos contar con las anteriores +print('*******Bucle For con Generadores Conprehesion List*******') +print(*[x for x in range(1, 11)], sep='\n') #El * indica que es un conprehesion list y usando sep indicamos que el separador, en este caso, será un retorno de carro + +print('*******Cadena de texto*******') +lenguaje = 'Python' +for letra in lenguaje: + print(letra) + +print('*******Cadena de texto al revés*******') +for letra in reversed(lenguaje): + print(letra) + +print('*******Cadena de texto ordenada, usando enumerate para saber su índice*******') +for i, letra in enumerate(sorted(lenguaje)): + print(f'Índice {i}, letra {letra}') \ No newline at end of file diff --git a/Roadmap/18 - CONJUNTOS/python/JuanDAW37.py b/Roadmap/18 - CONJUNTOS/python/JuanDAW37.py new file mode 100644 index 0000000000..408188a4fb --- /dev/null +++ b/Roadmap/18 - CONJUNTOS/python/JuanDAW37.py @@ -0,0 +1,59 @@ +"""* EJERCICIO: + * Utilizando tu lenguaje crea un conjunto de datos y realiza las siguientes + * operaciones (debes utilizar una estructura que las soporte): + * - Añade un elemento al final. + * - Añade un elemento al principio. + * - Añade varios elementos en bloque al final. + * - Añade varios elementos en bloque en una posición concreta. + * - Elimina un elemento en una posición concreta. + * - Actualiza el valor de un elemento en una posición concreta. + * - Comprueba si un elemento está en un conjunto. + * - Elimina todo el contenido del conjunto. + * + * DIFICULTAD EXTRA (opcional): + * Muestra ejemplos de las siguientes operaciones con conjuntos: + * - Unión. + * - Intersección. + * - Diferencia. + * - Diferencia simétrica.""" + +conjunto = ['a', 'b', 'c', 'd'] +print(f'Mi conjunto es {conjunto}') +# Añade un elemento al final. +conjunto.append('e') +print(f'Mi conjunto es {conjunto}') +# Añade un elemento al principio. +conjunto.insert(0,'a') +print(f'Mi conjunto es {conjunto}') +# Añade varios elementos en bloque al final. +conjunto.extend(['y', 'z']) +print(f'Mi conjunto es {conjunto}') +# Añade varios elementos en bloque en una posición concreta. +conjunto[2:2] = ['d', 'h', 'r'] +print(f'Mi conjunto es {conjunto}') +# Elimina un elemento en una posición concreta. +del conjunto[2] +print(f'Mi conjunto es {conjunto}') +# Actualiza el valor de un elemento en una posición concreta. +conjunto[3] = 'ñ' +print(f'Mi conjunto es {conjunto}') +# Comprueba si un elemento está en un conjunto. +print(f'¿El elemento está en el conjunto? {'t' in conjunto}') +# Elimina todo el contenido del conjunto. +conjunto.clear() +print(f'Mi conjunto es {conjunto}') + +# EXTRA +conjunto1 = {'a', 'b', 'c'} +conjunto2 = {'b', 'c', 'd'} +# - Unión. +print(conjunto1.union(conjunto2)) + +# - Intersección +print(conjunto1.intersection(conjunto2)) + +# - Diferencia +print(conjunto1.difference(conjunto2)) + +# - Diferencia simétrica: +print(conjunto1.symmetric_difference(conjunto2)) \ No newline at end of file From c7956db8cf16779fcffeb55881e551e9cdf3b5d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Gallego?= <75795616+kontroldev@users.noreply.github.com> Date: Mon, 9 Sep 2024 11:14:11 +0200 Subject: [PATCH 075/539] Rename L4nce.c to 1ceL4nc3.c --- .../c/{L4nce.c => 1ceL4nc3.c} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/{L4nce.c => 1ceL4nc3.c} (100%) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/L4nce.c b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/1ceL4nc3.c similarity index 100% rename from Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/L4nce.c rename to Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/1ceL4nc3.c From fe1939dd99a67fad5fb98a1f17c9e466a4248aca Mon Sep 17 00:00:00 2001 From: Jesus Antonio Escamilla Date: Mon, 9 Sep 2024 03:29:51 -0600 Subject: [PATCH 076/539] #36 - JavaScript --- .../javascript/JesusAntonioEEscamilla.js | 170 ++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/JesusAntonioEEscamilla.js diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/JesusAntonioEEscamilla.js b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/JesusAntonioEEscamilla.js new file mode 100644 index 0000000000..6295cb82ae --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/JesusAntonioEEscamilla.js @@ -0,0 +1,170 @@ +/** #36 - JavaScript -> Jesus Antonio Escamilla */ + +/** + * EL SOMBRERO SELECCIONADOR. + * Utilizando la Terminal para pedir datos y agregarlos. + */ + +const readline = require('readline'); + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +// Casas y sus puntos iniciales +const house = { + Frontend: 0, + Backend: 0, + Mobile: 0, + Data: 0 +} + +// Preguntas y sus opciones con puntos asignados a cada casa +const questions = [ + { + question: '1-¿Que te apasiona más al programador?', + options: { + a: {text: 'Crear interfaces de usuario', points: { Frontend: 2 }}, + b: {text: 'Desarrollador lógica de negocio', points: { Backend: 2 }}, + c: {text: 'Aplicaciones móviles', points: { Mobile: 2 }}, + d: {text: 'Trabajar con datos y descubrir patrones para mejorar decisiones', points: { Data: 2 }}, + }, + }, + { + question: '2-¿Cuál es tu herramienta favorita?', + options: { + a: { text: 'React o Angular', points: { Frontend: 2 } }, + b: { text: 'Node.js', points: { Backend: 2 } }, + c: { text: 'Swift o Kotlin', points: { Mobile: 2 } }, + d: { text: 'Python y Pandas', points: { Data: 2 } }, + }, + }, + { + question: '3-¿Cuál de estas tareas te resulta más satisfactoria?', + options: { + a: { text: 'Diseñar y estilizar componentes visuales', points: { Frontend: 2 } }, + b: { text: 'Crear APIs y gestionar bases de datos', points: { Backend: 2 } }, + c: { text: 'Optimizar aplicaciones para diferentes dispositivos móviles', points: { Mobile: 2 } }, + d: { text: 'Trabajar con grandes volúmenes de datos y modelos analíticos', points: { Data: 2 } }, + }, + }, + { + question: '4-¿Con cuál de estas tecnologías te sientes más cómodo trabajando?', + options: { + a: { text: 'HTML, CSS, JavaScript', points: { Frontend: 2 } }, + b: { text: 'Python, Java, SQL', points: { Backend: 2 } }, + c: { text: 'Flutter, React Native', points: { Mobile: 2 } }, + d: { text: 'R, SQL, Hadoop', points: { Data: 2 } }, + }, + }, + { + question: '5-¿Qué herramienta o lenguaje prefieres usar para resolver problemas?', + options: { + a: { text: 'Herramientas y frameworks para diseño de interfaces (e.g., Figma, React)', points: { Frontend: 2 } }, + b: { text: 'Lenguajes y frameworks para backend (e.g., Node.js, Django, Spring Boot)', points: { Backend: 2 } }, + c: { text: 'Herramientas de desarrollo móvil (e.g., Xcode, Android Studio)', points: { Mobile: 2 } }, + d: { text: 'Herramientas de análisis de dato (e.g., Jupyter, Tableau, Power BI)', points: { Data: 2 } }, + }, + }, + { + question: '6-¿Cuál de estas actividades disfrutas más?', + options: { + a: { text: 'Crear experiencias de usuario interactivas y responsivas', points: { Frontend: 2 } }, + b: { text: 'Resolver problemas complejos de lógica y optimización de procesos', points: { Backend: 2 } }, + c: { text: 'Construir y probar aplicaciones que funcionen en múltiples dispositivos móviles', points: { Mobile: 2 } }, + d: { text: 'Analizar y visualizar datos para extraer información relevante', points: { Data: 2 } }, + }, + }, + { + question: '7-¿Qué prefieres en un proyecto?', + options: { + a: { text: 'Trabajar en el diseño y la interacción con los usuarios', points: { Frontend: 2 } }, + b: { text: 'Enfocarte en la lógica de negocio y la eficiencia del sistema', points: { Backend: 2 } }, + c: { text: 'Desarrollar para plataformas móviles y trabajar con sus características únicas', points: { Mobile: 2 } }, + d: { text: 'Investigar y analizar datos para proporcionar insights', points: { Data: 2 } }, + }, + }, + { + question: '8-¿Cuál es tu tipo de proyecto ideal?', + options: { + a: { text: 'Un sitio web interactivo y visualmente atractivo', points: { Frontend: 2 } }, + b: { text: 'Un sistema robusto que gestione datos y lógica de negocio', points: { Backend: 2 } }, + c: { text: 'Una aplicación móvil con una experiencia de usuario fluida', points: { Mobile: 2 } }, + d: { text: 'Un dashboard o modelo predictivo que ofrezca información clave', points: { Data: 2 } }, + }, + }, + { + question: '9-¿Qué te da más satisfacción al finalizar un proyecto?', + options: { + a: { text: 'Ver a los usuarios interactuar de manera positiva con tu interfaz', points: { Frontend: 2 } }, + b: { text: 'Saber que tu código maneja de manera eficiente grandes volúmenes de datos', points: { Backend: 2 } }, + c: { text: 'Ver tu aplicación móvil en funcionamiento en diferentes dispositivos', points: { Mobile: 2 } }, + d: { text: 'Proveer información valiosa basada en datos a la empresa', points: { Data: 2 } }, + }, + }, + { + question: '10-¿Qué consideras un reto divertido en el desarrollo?', + options: { + a: { text: 'Mejorar la usabilidad y la estética de una aplicación', points: { Frontend: 2 } }, + b: { text: 'Optimizar la seguridad y el rendimiento de un backend', points: { Backend: 2 } }, + c: { text: 'Resolver problemas de compatibilidad entre diferentes plataformas móviles', points: { Mobile: 2 } }, + d: { text: 'Desarrollar modelos predictivos y manejar bases de datos complejas', points: { Data: 2 } }, + }, + }, +]; + +let currentQuestion = 0; +let studentName = ''; + +// Función para hacer preguntas +function askQuestion() { + if (currentQuestion < questions.length) { + const q = questions[currentQuestion]; + console.log(`\n${q.question}`); + console.log(`a) ${q.options.a.text}`); + console.log(`b) ${q.options.b.text}`); + console.log(`c) ${q.options.c.text}`); + console.log(`d) ${q.options.d.text}`); + + rl.question('Selección una opción (a, b, c, d): ', (answer) => { + const option = q.options[answer.toLowerCase()]; + + if (option) { + Object.keys(option.points).forEach((house) => { + house[house] += option.points[house]; + }); + + currentQuestion++; + askQuestion(); + } else { + console.log('Opción no válida. Intenta de nuevo.'); + askQuestion(); + } + }); + } else { + sortStudent(); + } +} + +// Función para determinar la casa del estudiante +function sortStudent() { + const sortedHouses = Object.entries(house).sort(([, a], [, b]) => b - a); + const topHouse = sortedHouses[0]; + const tiedHouse = sortedHouses.filter(([, points]) => points === topHouse[1]); + + if (tiedHouse.length > 1) { + const chosenHouse = tiedHouse[Math.floor(Math.random() * tiedHouse.length)]; + console.log(`\n¡Vaya, ${studentName}! Fue una decisión complicada, pero te he colocado en ${chosenHouse[0]}!`); + } else { + console.log(`\n${studentName}, te he colocado en ${topHouse[0]}!`); + } + + rl.close(); +} + +// Inicio del programa +rl.question('¿Cuál es tu nombre? ', (name) => { + studentName = name; + askQuestion(); +}); \ No newline at end of file From bbcb690aefdc13269e6eb471ad172dc949ed6ba6 Mon Sep 17 00:00:00 2001 From: odin3 Date: Mon, 9 Sep 2024 13:19:17 +0200 Subject: [PATCH 077/539] Sol #34 - Python --- .../python/oriaj3.py" | 258 ++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 "Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/oriaj3.py" diff --git "a/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/oriaj3.py" "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/oriaj3.py" new file mode 100644 index 0000000000..436ba8351e --- /dev/null +++ "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/oriaj3.py" @@ -0,0 +1,258 @@ +""" +/* + * EJERCICIO: + * ¡La Casa del Dragón ha finalizado y no volverá hasta 2026! + * ¿Alguien se entera de todas las relaciones de parentesco + * entre personajes que aparecen en la saga? + * Desarrolla un árbol genealógico para relacionarlos (o invéntalo). + * Requisitos: + * 1. Estará formado por personas con las siguientes propiedades: + * - Identificador único (obligatorio) + * - Nombre (obligatorio) + * - Pareja (opcional) + * - Hijos (opcional) + * 2. Una persona sólo puede tener una pareja (para simplificarlo). + * 3. Las relaciones deben validarse dentro de lo posible. + * Ejemplo: Un hijo no puede tener tres padres. + * Acciones: + * 1. Crea un programa que permita crear y modificar el árbol. + * - Añadir y eliminar personas + * - Modificar pareja e hijos + * 2. Podrás imprimir el árbol (de la manera que consideres). + * + * NOTA: Ten en cuenta que la complejidad puede ser alta si + * se implementan todas las posibles relaciones. Intenta marcar + * tus propias reglas y límites para que te resulte asumible. + */ + """ +import uuid +from graphviz import Digraph + + +class Persona: + def __init__(self, nombre, apellido): + self.id = str(uuid.uuid4()) # Generación automática de ID único + self.nombre = nombre + self.apellido = apellido + self.parejas = [] # Lista de parejas + self.hijos = {} # Diccionario de listas de hijos por pareja + + def __str__(self): + # Devuelve el nombre de la persona, su id, el nombre de sus parejas y sus hijos, sólo si tiene pareja o hijos + nombre_parejas = ", ".join([persona.nombre for persona in self.parejas]) + hijos_str = {pareja.nombre: ", ".join([hijo.nombre for hijo in hijos]) for pareja, hijos in self.hijos.items()} + nombre_hijos = "\n".join([f"{pareja}: {hijos}" for pareja, hijos in hijos_str.items()]) if hijos_str else "Ninguno" + if self.parejas and self.hijos: + return f"{self.nombre} {self.apellido}\n [Hijos=> {nombre_hijos}]\n" + else: + return " " + + +class ArbolGenealogico: + def __init__(self): + self.personas = {} + + def crear_persona(self, nombre, apellido): + persona = Persona(nombre, apellido) + self.personas[persona.id] = persona + return persona.id + + def buscar_persona(self, id): + return self.personas.get(id, None) + + def agregar_pareja(self, id_persona, id_pareja): + if id_persona == id_pareja: + print("Una persona no puede ser su propia pareja.") + return + + persona = self.buscar_persona(id_persona) + pareja = self.buscar_persona(id_pareja) + + if persona and pareja: + if id_pareja in persona.parejas or id_persona in pareja.parejas: + print("Estas personas ya están vinculadas como pareja.") + return + + persona.parejas.append(pareja) + pareja.parejas.append(persona) + # Inicializa la lista de hijos para esta pareja + persona.hijos[pareja] = [] + pareja.hijos[persona] = [] + else: + print("Persona no encontrada") + + def agregar_hijo(self, id_padre, id_madre, id_hijo): + padre = self.buscar_persona(id_padre) + madre = self.buscar_persona(id_madre) + hijo = self.buscar_persona(id_hijo) + + if padre and madre and hijo: + if madre in padre.hijos: + padre.hijos[madre].append(hijo) + if padre in madre.hijos: + madre.hijos[padre].append(hijo) + else: + print("Padre, madre o hijo no encontrado") + + def imprimir_arbol(self): + for persona in self.personas.values(): + print(persona) + + def buscar_por_nombre(self, nombre): + return [persona for persona in self.personas.values() if persona.nombre.lower() == nombre.lower()] + + + def eliminar_persona(self, id): + persona = self.buscar_persona(id) + if persona: + # Desvincula las parejas + for pareja in persona.parejas: + pareja.parejas.remove(persona) + if persona in pareja.hijos: + del pareja.hijos[persona] + + # Elimina a la persona de los hijos de cualquier padre + for padre in self.personas.values(): + for pareja, hijos in padre.hijos.items(): + if persona in hijos: + hijos.remove(persona) + + # Elimina a la persona + del self.personas[id] + print(f"Persona {id} eliminada.") + else: + print("Persona no encontrada") + + def generar_arbol_grafico(self): + dot = Digraph(comment='Árbol Genealógico') + + # Añadir nodos + for persona in self.personas.values(): + dot.node(persona.id, f'{persona.nombre} {persona.apellido}') + + # Añadir conexiones (flechas) entre padres e hijos + for persona in self.personas.values(): + for pareja, hijos in persona.hijos.items(): + for hijo in hijos: + dot.edge(persona.id, hijo.id, color='blue') # Conectar padre con hijo + + dot.render('arbol_genealogico_hijos', format='png', cleanup=True) + print("Árbol genealógico generado como 'arbol_genealogico_hijos.png'.") + + # Añadir flecha para cada pareja + ya_conectado = set() + for persona in self.personas.values(): + for pareja in persona.parejas: + if (persona.id, pareja.id) not in ya_conectado and (pareja.id, persona.id) not in ya_conectado: + dot.edge(persona.id, pareja.id, color='red', style='dashed') # Conectar parejas + ya_conectado.add((persona.id, pareja.id)) + + dot.render('arbol_genealogico_relaciones', format='png', cleanup=True) + print("Árbol genealógico generado como 'arbol_genealogico_relaciones.png'.") +#Crear arbol genealogico +arbol = ArbolGenealogico() + + +# Crear personas + +#Baratheon - Targaryan +jocelyn = arbol.crear_persona("Jocelyn", "Baratheon") +aemon = arbol.crear_persona("Aemon", "Targaryan") + +#Targaryaen - Velaryon +corlys = arbol.crear_persona("Corlys", "Velaryon") +rhaenys = arbol.crear_persona("Rhaenys", "Targaryen") + +arbol.agregar_pareja(jocelyn, aemon) +arbol.agregar_hijo(jocelyn, aemon, rhaenys) +arbol.agregar_pareja(corlys, rhaenys) + +laena = arbol.crear_persona("Laena", "Velaryon") +laenor = arbol.crear_persona("Laenor", "Velaryon") + +arbol.agregar_hijo(corlys, rhaenys, laena) +arbol.agregar_hijo(corlys, rhaenys, laenor) + +#Targaryen - Arryn +daella = arbol.crear_persona("Daella", "Targaryen") +rodrik = arbol.crear_persona("Rodrik", "Arryn") + +#Targaryen - Targaryen +baelon = arbol.crear_persona("Baelon I", "Targaryen") +alyssa = arbol.crear_persona("Alyssa", "Targaryen") + +#Targaryen - Hihgtower +aemma = arbol.crear_persona("Aemma", "Arryn") +viserys_i = arbol.crear_persona("Viserys I", "Targaryen") +alicent = arbol.crear_persona("Alicent", "Hightower") + +arbol.agregar_pareja(daella, rodrik) +arbol.agregar_hijo(daella, rodrik, aemma) +arbol.agregar_pareja(baelon, alyssa) +arbol.agregar_hijo(baelon, alyssa, viserys_i) + +arbol.agregar_pareja(viserys_i, aemma) +rhaenyra = arbol.crear_persona("Rhaenyra", "Targaryen") + +arbol.agregar_hijo(viserys_i, aemma, rhaenyra) + + +arbol.agregar_pareja(viserys_i, alicent) +aegon_ii = arbol.crear_persona("Aegon II", "Targaryen") +helaena = arbol.crear_persona("Helaena", "Targaryen") +aemond = arbol.crear_persona("Aemond", "Targaryen") +daeron = arbol.crear_persona("Daeron", "Targaryen") + +arbol.agregar_hijo(viserys_i, alicent, aegon_ii) +arbol.agregar_hijo(viserys_i, alicent, helaena) +arbol.agregar_hijo(viserys_i, alicent, aemond) +arbol.agregar_hijo(viserys_i, alicent, daeron) + +#Daemon +daemon = arbol.crear_persona("Daemon", "Targaryen") +arbol.agregar_pareja(daemon, laena) + +baela = arbol.crear_persona("Baela", "Targaryen") +rhaena = arbol.crear_persona("Rhaena", "Targaryen") + +arbol.agregar_hijo(daemon, laena, baela) +arbol.agregar_hijo(daemon, laena, rhaena) + +#Rhaenyra +arbol.agregar_pareja(rhaenyra, laenor) + +jacaerys = arbol.crear_persona("Jacaerys", "Velaryon") +lucerys = arbol.crear_persona("Lucerys", "Velaryon") +joffrey = arbol.crear_persona("Joffrey", "Velaryon") + +arbol.agregar_hijo(rhaenyra, laenor, jacaerys) +arbol.agregar_hijo(rhaenyra, laenor, lucerys) +arbol.agregar_hijo(rhaenyra, laenor, joffrey) + +#Rhaenyra - Daemon +arbol.agregar_pareja(rhaenyra, daemon) + +viserys_ii = arbol.crear_persona("Viserys II", "Targaryen") +visenya = arbol.crear_persona("Visenya", "Targaryen") +aegon_iii = arbol.crear_persona("Aegon III", "Targaryen") + +arbol.agregar_hijo(rhaenyra, daemon, viserys_ii) +arbol.agregar_hijo(rhaenyra, daemon, visenya) +arbol.agregar_hijo(rhaenyra, daemon, aegon_iii) + +#Aegon II - Helaena +arbol.agregar_pareja(aegon_ii, helaena) + +jaehaera = arbol.crear_persona("Jaehaera", "Targaryen") +jaehaerys = arbol.crear_persona("Jaehaerys", "Targaryen") +maelor = arbol.crear_persona("Maelor", "Targaryen") + +arbol.agregar_hijo(aegon_ii, helaena, jaehaera) +arbol.agregar_hijo(aegon_ii, helaena, jaehaerys) +arbol.agregar_hijo(aegon_ii, helaena, maelor) + +#Muestra el arbol +arbol.imprimir_arbol() + +#Imprime el arbol en png +arbol.generar_arbol_grafico() From 791c5343d07896c45e085b32708b8b9977b8ad40 Mon Sep 17 00:00:00 2001 From: David Sabater Date: Mon, 9 Sep 2024 14:12:16 +0200 Subject: [PATCH 078/539] 02 - C++ --- .../02 - FUNCIONES Y ALCANCE/c++/oixild.cpp | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/c++/oixild.cpp diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/c++/oixild.cpp b/Roadmap/02 - FUNCIONES Y ALCANCE/c++/oixild.cpp new file mode 100644 index 0000000000..5527cc263f --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/c++/oixild.cpp @@ -0,0 +1,76 @@ +// En C++, no se pueden crear funciones dentro de otras funciones. + +#include + +// VARIABLE GLOBAL +char globalVar[] = "global"; + + +// FUNCION SIN PARAMETROS NI RETORNO +void voidFunc() +{ + +} +int intFunc() +{ + return 1; +} +char charFunc(const char *str) +{ + std::cout << "Tu caracter seleccionado: " << str << std::endl; + return *str; +} + +void ft_fizzbuzz(char *str1, char *str2) +{ + int i = 1; + while (i < 101) + { + if (i % 3 == 0 && i % 5 == 0) + { + std::cout << str1 << str2 << std::endl; + } + if (i % 3 == 0 && i % 5 != 0) + { + std::cout << str1 << std::endl; + } + if (i % 5 == 0 && i % 3 != 0) + { + std::cout << str2 << std::endl; + } + if (i % 3 != 0 && i % 5 != 0) + { + std::cout << i << std::endl; + } + i++; + } +} + +int main() +{ + std::cout << "IMPRIMIR UN CARACTER DESDE OTRA FUNCION ENVIANDOLE UN PARAMETRO" << std::endl; + char a[1]; + std::cin >> a; + charFunc(a); + + std::cout << "\nUtiliza algn ejemplo de funciones ya creadas en el lenguaje." << std::endl; + char z = 'z'; + char y = toupper(z); // Uso de la funcion toupper() para convertir el caracter de minuscula a mayuscula + std::cout << y << std::endl; + + std::cout << "\nPon a prueba el concepto de variable LOCAL y GLOBAL." << std::endl; + char localVar[] = "local"; + std::cout << localVar << std::endl; + std::cout << globalVar << std::endl; + + std::cout << "\nDIFICULTAD EXTRA(opcional) :" << std::endl; + char str1[20]; + char str2[20]; + std::cout << "Selecciona una palabra que no supere los 19 caracteres:" << std::endl; + std::cin >> str1; + std::cout << "Selecciona otra palabra que no supere los 19 caracteres:" << std::endl; + std::cin >> str2; + ft_fizzbuzz(str1, str2); + + return 0; +} \ No newline at end of file From 405e404b8d29d17378f8597950b5ef2269051d39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20D=C3=B3ezon?= Date: Mon, 9 Sep 2024 06:40:21 -0600 Subject: [PATCH 079/539] #36 - JavaScript --- .../javascript/RaulDoezon.js | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RaulDoezon.js diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RaulDoezon.js b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RaulDoezon.js new file mode 100644 index 0000000000..1678938c41 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RaulDoezon.js @@ -0,0 +1,90 @@ +/* + EJERCICIO: + Cada 1 de septiembre, el Hogwarts Express parte hacia la escuela + de programación de Hogwarts para magos y brujas del código. + En ella, su famoso sombrero seleccionador ayuda a los programadores + a encontrar su camino... + Desarrolla un programa que simule el comportamiento del sombrero. + Requisitos: + 1. El sombrero realizará 10 preguntas para determinar la casa del alumno. + 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data. + (Puedes elegir las que quieras) + Acciones: + 1. Crea un programa que solicite el nombre del alumno y realice 10 + preguntas, con cuatro posibles respuestas cada una. + 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección). + 3. Una vez finalizado, el sombrero indica el nombre del alumno + y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria, + pero indicándole al alumno que la decisión ha sido complicada). +*/ + +let userName = ""; +let frontEndHouse = 0; +let backEndHouse = 0; +let mobileHouse = 0; +let dataScienceHouse = 0; +const questions = [ + "1. ¿Qué prefieres jugar?: \na) Super Metroid \nb) Ajedrez \nc) Pokémon Go \nd) Sudoku", + "2. ¿Con qué actividad te identificas más?: \na) Dibujar \nb) Doblar la ropa \nc) Editar fotos en el teléfono \nd) Acomodar la despensa", + "3. ¿Dónde te gusta más escuchar música?: \na) Audífonos \nb) Mini componente \nc) Bocina portatil \nd) Donde sea pero Hi-Res", + "4. ¿Qué superhéroe es tu favorito?: \na) Spider-Man \nb) Superman \nc) Flash \nd) Doctor Strange", + "5. Si volvieras a cursar una materia, ¿cuál sería?: \na) Biología \nb) Cálculo diferencial e integral \nc) Física \nd) Probabilidad y estadística", + "6. Si te regalaran un dispositivo electrónico, ¿cuál elegirías?: \na) MacBook \nb) PC \nc) Smartphone \nd) Raspberry Pi", + "7. ¿Qué recurso utilizarías para administrar tus finanzas?: \na) Aplicación de escritorio \nb) Papel y lápiz \nc) Aplicación móvil \nd) Hoja de cálculo", + "8. ¿Qué te llama más la atención en un sitio web?: \na) La apariencia \nb) Las validaciones en un formulario \nc) La adaptación a medidas pequeñas \nd) La información que muestra", + "9. ¿Qué lenguaje de programación es tu favorito?: \na) JavaScript \nb) Python \nc) Swift \nd) SQL", + "10. ¿Con qué persona te sientes más identificado?: \na) Miguel Durán \nb) Héctor de León \nc) Brais Moure \nd) Rafa Gonzalez Gouveia", +]; + +userName = prompt("Por favor, ingresa tu nombre:"); + +for (let index = 0; index < questions.length; index++) { + let quiz = prompt(questions[index]); + + switch (quiz.toLowerCase()) { + case "a": + frontEndHouse += 4; + break; + + case "b": + backEndHouse += 4; + break; + + case "c": + mobileHouse += 4; + break; + + case "d": + dataScienceHouse += 4; + break; + + default: + alert("Por favor, selecciona una opción válida."); + + index--; + break; + } +} + +let allHouses = { + "Front-end": frontEndHouse, + "Back-end": backEndHouse, + "Mobile": mobileHouse, + "Data Science": dataScienceHouse, +}; +let houseNames = Object.keys(allHouses); +let higherScore = Math.max.apply(null, houseNames.map((houseScore) => allHouses[houseScore])); +let chosenHouse = houseNames.reduce((house, score) => { + if (allHouses[score] === higherScore) { + house.push(score); + } + + return house; +}, []); +let randomSelection = Math.round(Math.random() * (chosenHouse.length - 1) + 1) - 1; + +if (chosenHouse.length > 1) { + console.log(`${userName}, la decisión ha sido complicada, pero pertenecerás a la casa de ${chosenHouse[randomSelection]}.`); +} else { + console.log(`${userName}, pertenecerás a la casa de ${chosenHouse[0]}.`); +} From 79fa835fda000e6266b2b3fef81a3c25aa908e25 Mon Sep 17 00:00:00 2001 From: Juan Pablo Patino Lopez Date: Mon, 9 Sep 2024 15:02:08 +0200 Subject: [PATCH 080/539] Juanppdev - Reto #36 - Python --- .../python/juanppdev.py | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/juanppdev.py diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/juanppdev.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/juanppdev.py new file mode 100644 index 0000000000..c907db37c6 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/juanppdev.py @@ -0,0 +1,75 @@ +""" + * EJERCICIO: + * Cada 1 de septiembre, el Hogwarts Express parte hacia la escuela + * de programación de Hogwarts para magos y brujas del código. + * En ella, su famoso sombrero seleccionador ayuda a los programadores + * a encontrar su camino... + * Desarrolla un programa que simule el comportamiento del sombrero. + * Requisitos: + * 1. El sombrero realizará 10 preguntas para determinar la casa del alumno. + * 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data. + * (Puedes elegir las que quieras) + * Acciones: + * 1. Crea un programa que solicite el nombre del alumno y realice 10 + * preguntas random, con cuatro posibles respuestas cada una. + * 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección). + * 3. Una vez finalizado, el sombrero indica el nombre del alumno + * y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria, + * pero indicándole al alumno que la decisión ha sido complicada). +""" + +import random + +# Definimos las casas +casas = ["Frontend", "Backend", "Mobile", "Data"] + +# Definimos las preguntas y las respuestas +preguntas = [ + ("¿Qué prefieres hacer en tu tiempo libre?", ["Leer documentación", "Desarrollar una app", "Analizar datos", "Diseñar interfaces"]), + ("¿Qué lenguaje de programación te gusta más?", ["JavaScript", "Python", "Swift", "SQL"]), + ("¿Qué tipo de proyectos te interesan más?", ["Web", "Backend", "Móvil", "Big Data"]), + ("¿Qué herramienta prefieres usar?", ["React", "Django", "Flutter", "Pandas"]), + ("¿Qué tipo de problemas te gusta resolver?", ["Interfaz de usuario", "Lógica de negocio", "Optimización de rendimiento", "Análisis de datos"]), + ("¿Qué tipo de empresa te gustaría trabajar?", ["Startup", "Corporación", "Freelance", "Investigación"]), + ("¿Qué tipo de tareas disfrutas más?", ["Diseño", "Programación", "Pruebas", "Análisis"]), + ("¿Qué prefieres aprender?", ["CSS", "Docker", "Kotlin", "Machine Learning"]), + ("¿Qué tipo de equipo prefieres?", ["Diseñadores", "Desarrolladores", "Ingenieros de software", "Científicos de datos"]), + ("¿Qué tipo de retos te motivan?", ["Creativos", "Técnicos", "Innovadores", "Analíticos"]) +] + +# Función para asignar puntos a las casas +def asignar_puntos(respuesta): + if respuesta == 0: + return [1, 0, 0, 0] + elif respuesta == 1: + return [0, 1, 0, 0] + elif respuesta == 2: + return [0, 0, 1, 0] + elif respuesta == 3: + return [0, 0, 0, 1] + +# Función principal +def sombrero_seleccionador(): + nombre = input("¿Cuál es tu nombre? ") + puntos = [0, 0, 0, 0] + + for i in range(10): + pregunta, respuestas = random.choice(preguntas) + print(f"\nPregunta {i+1}: {pregunta}") + for j, respuesta in enumerate(respuestas): + print(f"{j+1}. {respuesta}") + eleccion = int(input("Elige una opción (1-4): ")) - 1 + puntos = [x + y for x, y in zip(puntos, asignar_puntos(eleccion))] + + max_puntos = max(puntos) + posibles_casas = [casas[i] for i, p in enumerate(puntos) if p == max_puntos] + + if len(posibles_casas) > 1: + casa_final = random.choice(posibles_casas) + print(f"\n{nombre}, la decisión ha sido complicada, pero finalmente perteneces a la casa {casa_final}!") + else: + casa_final = posibles_casas[0] + print(f"\n{nombre}, perteneces a la casa {casa_final}!") + +# Ejecutar el programa +sombrero_seleccionador() From 88554e2a3955a27266002dd3b08d6eff4aebf85b Mon Sep 17 00:00:00 2001 From: Rafa Canosa Date: Mon, 9 Sep 2024 15:35:03 +0200 Subject: [PATCH 081/539] Created Rafacv23.js --- Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js new file mode 100644 index 0000000000..e69de29bb2 From 232fb8a47482908bada4dfe44aeb893bbafa050b Mon Sep 17 00:00:00 2001 From: Rafa Canosa Date: Mon, 9 Sep 2024 15:37:32 +0200 Subject: [PATCH 082/539] added questions for the exercise and answers --- .../javascript/Rafacv23.js | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js index e69de29bb2..4c2aa040bd 100644 --- a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js @@ -0,0 +1,87 @@ +const preguntas = [ + { + pregunta: "¿Qué parte de un proyecto disfrutas más?", + respuestas: [ + "A) Crear interfaces interactivas y atractivas", + "B) Diseñar la estructura de datos y las bases de datos", + "C) Desarrollar aplicaciones móviles", + "D) Analizar grandes volúmenes de datos", + ], + }, + { + pregunta: "¿Cuál es tu lenguaje de programación favorito?", + respuestas: ["A) JavaScript", "B) Python", "C) Swift", "D) R"], + }, + { + pregunta: "¿Qué herramienta te resulta más útil en tu trabajo diario?", + respuestas: [ + "A) React o Vue", + "B) Node.js", + "C) Flutter", + "D) Jupyter Notebooks", + ], + }, + { + pregunta: "¿Cómo prefieres gestionar tus proyectos?", + respuestas: [ + "A) A través de metodologías ágiles (Scrum, Kanban)", + "B) Con enfoque en arquitectura de microservicios", + "C) Aplicando patrones de diseño para aplicaciones móviles", + "D) Mediante análisis y reportes de datos", + ], + }, + { + pregunta: "¿Qué parte de la depuración de código disfrutas más?", + respuestas: [ + "A) Encontrar errores visuales en las interfaces", + "B) Corregir problemas de rendimiento en el servidor", + "C) Arreglar fallos en la experiencia de usuario móvil", + "D) Optimizar algoritmos de procesamiento de datos", + ], + }, + { + pregunta: "¿Cuál sería tu rol ideal en un equipo de desarrollo?", + respuestas: [ + "A) Diseñador/Desarrollador Frontend", + "B) Arquitecto de Soluciones Backend", + "C) Desarrollador de Aplicaciones Móviles", + "D) Científico de Datos", + ], + }, + { + pregunta: "¿Cómo prefieres aprender nuevas tecnologías?", + respuestas: [ + "A) Experimentando con nuevas librerías y frameworks de frontend", + "B) Trabajando con nuevas tecnologías de servidores y bases de datos", + "C) Explorando nuevas plataformas de desarrollo móvil", + "D) Analizando nuevos algoritmos y técnicas de procesamiento de datos", + ], + }, + { + pregunta: "¿Qué tipo de proyectos te motivan más?", + respuestas: [ + "A) Aplicaciones web interactivas y atractivas", + "B) Sistemas robustos y escalables en la nube", + "C) Aplicaciones móviles con excelente experiencia de usuario", + "D) Proyectos de análisis y visualización de datos", + ], + }, + { + pregunta: "¿Qué tecnología te gustaría dominar en el futuro?", + respuestas: [ + "A) WebAssembly y animaciones avanzadas en la web", + "B) Inteligencia Artificial y Machine Learning en servidores", + "C) Realidad aumentada en aplicaciones móviles", + "D) Big Data y análisis de grandes volúmenes de información", + ], + }, + { + pregunta: "¿Cómo te gusta colaborar en un equipo?", + respuestas: [ + "A) Diseñando y mejorando la experiencia de usuario", + "B) Integrando servicios y APIs en el backend", + "C) Asegurando la mejor experiencia en aplicaciones móviles", + "D) Proporcionando análisis detallados a partir de los datos", + ], + }, +] From e1d50e06ccea654ce81f6faccd2f01e23bc7d85f Mon Sep 17 00:00:00 2001 From: Rafa Canosa Date: Mon, 9 Sep 2024 15:38:56 +0200 Subject: [PATCH 083/539] added houses --- .../javascript/Rafacv23.js | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js index 4c2aa040bd..c995054d5d 100644 --- a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js @@ -85,3 +85,34 @@ const preguntas = [ ], }, ] + +const casas = [ + { + casa: "Frontend", + color: "#f2f2f2", + icono: + "https://www.iconfinder.com/icons/464586/code_icon_flat_web_development_programming_icon/size_64/png", + tema: "Diseño y desarrollo de interfaces web", + }, + { + casa: "Backend", + color: "#e3e3e3", + icono: + "https://www.iconfinder.com/icons/1438014/server_icon_flat/size_64/png", + tema: "Desarrollo de sistemas backend", + }, + { + casa: "Mobile", + color: "#cccccc", + icono: + "https://www.iconfinder.com/icons/1832874/mobile_app_icon_flat/size_64/png", + tema: "Desarrollo de aplicaciones móviles", + }, + { + casa: "Data", + color: "#ffffff", + icono: + "https://www.iconfinder.com/icons/2518380/database_icon_flat/size_64/png", + tema: "Análisis y visualización de datos", + }, +] From 78c71cffa15d4e501e0be047dff4d5223c06e4eb Mon Sep 17 00:00:00 2001 From: Rafa Canosa Date: Mon, 9 Sep 2024 16:13:56 +0200 Subject: [PATCH 084/539] add readline to receive inputs and pointsPerHouse --- .../javascript/Rafacv23.js | 268 +++++++++++++----- 1 file changed, 192 insertions(+), 76 deletions(-) diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js index c995054d5d..d014f84435 100644 --- a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js @@ -1,118 +1,234 @@ +const readline = require("readline") + const preguntas = [ { pregunta: "¿Qué parte de un proyecto disfrutas más?", - respuestas: [ - "A) Crear interfaces interactivas y atractivas", - "B) Diseñar la estructura de datos y las bases de datos", - "C) Desarrollar aplicaciones móviles", - "D) Analizar grandes volúmenes de datos", + opciones: [ + { + respuesta: "Crear interfaces interactivas y atractivas", + casa: "Frontend", + }, + { + respuesta: "Diseñar la estructura de datos y las bases de datos", + casa: "Backend", + }, + { + respuesta: "Desarrollar aplicaciones móviles", + casa: "Mobile", + }, + { + respuesta: "Implementar sistemas de seguridad y control de acceso", + casa: "Data", + }, ], }, { pregunta: "¿Cuál es tu lenguaje de programación favorito?", - respuestas: ["A) JavaScript", "B) Python", "C) Swift", "D) R"], + opciones: [ + { + respuesta: "JavaScript", + casa: "Frontend", + }, + { + respuesta: "Python", + casa: "Backend", + }, + { + respuesta: "Swift", + casa: "Mobile", + }, + { + respuesta: "R", + casa: "Data", + }, + ], }, { pregunta: "¿Qué herramienta te resulta más útil en tu trabajo diario?", - respuestas: [ - "A) React o Vue", - "B) Node.js", - "C) Flutter", - "D) Jupyter Notebooks", + opciones: [ + { + respuesta: "Visual Studio Code", + casa: "Frontend", + }, + { + respuesta: "Git y GitHub", + casa: "Backend", + }, + { + respuesta: "Docker y Kubernetes", + casa: "Mobile", + }, + { + respuesta: "Jupyter Notebooks", + casa: "Data", + }, ], }, { pregunta: "¿Cómo prefieres gestionar tus proyectos?", - respuestas: [ - "A) A través de metodologías ágiles (Scrum, Kanban)", - "B) Con enfoque en arquitectura de microservicios", - "C) Aplicando patrones de diseño para aplicaciones móviles", - "D) Mediante análisis y reportes de datos", + opciones: [ + { + respuesta: "Utilizando versiones de control", + casa: "Frontend", + }, + { + respuesta: "Utilizando un herramienta de planeamiento", + casa: "Backend", + }, + { + respuesta: "Utilizando un herramienta de gestión de proyectos", + casa: "Mobile", + }, + { + respuesta: "Utilizando un herramienta de planificación", + casa: "Data", + }, ], }, { pregunta: "¿Qué parte de la depuración de código disfrutas más?", - respuestas: [ - "A) Encontrar errores visuales en las interfaces", - "B) Corregir problemas de rendimiento en el servidor", - "C) Arreglar fallos en la experiencia de usuario móvil", - "D) Optimizar algoritmos de procesamiento de datos", + opciones: [ + { + respuesta: "Encontrar errores visuales en las interfaces", + casa: "Frontend", + }, + { + respuesta: "Corregir problemas de rendimiento en el servidor", + casa: "Backend", + }, + { + respuesta: "Desarrollar nuevas características y funciones", + casa: "Mobile", + }, + { + respuesta: "Optimizar algoritmos de procesamiento de datos", + casa: "Data", + }, ], }, { pregunta: "¿Cuál sería tu rol ideal en un equipo de desarrollo?", - respuestas: [ - "A) Diseñador/Desarrollador Frontend", - "B) Arquitecto de Soluciones Backend", - "C) Desarrollador de Aplicaciones Móviles", - "D) Científico de Datos", + opciones: [ + { + respuesta: "Desarrollador/Diseñador Frontend", + casa: "Frontend", + }, + { + respuesta: "Arquitecto de Soluciones Backend", + casa: "Backend", + }, + { + respuesta: "Desarrollador de Aplicaciones Móviles", + casa: "Mobile", + }, + { + respuesta: "Científico de Datos", + casa: "Data", + }, ], }, { pregunta: "¿Cómo prefieres aprender nuevas tecnologías?", - respuestas: [ - "A) Experimentando con nuevas librerías y frameworks de frontend", - "B) Trabajando con nuevas tecnologías de servidores y bases de datos", - "C) Explorando nuevas plataformas de desarrollo móvil", - "D) Analizando nuevos algoritmos y técnicas de procesamiento de datos", + opciones: [ + { + respuesta: + "Experimentando con nuevas librerías y frameworks de frontend", + casa: "Frontend", + }, + { + respuesta: + "Trabajando con nuevas tecnologías de servidores y bases de datos", + casa: "Backend", + }, + { + respuesta: "Explorando nuevas plataformas de desarrollo móvil", + casa: "Mobile", + }, + { + respuesta: + "Analizando nuevos algoritmos y técnicas de procesamiento de datos", + casa: "Data", + }, ], }, { pregunta: "¿Qué tipo de proyectos te motivan más?", - respuestas: [ - "A) Aplicaciones web interactivas y atractivas", - "B) Sistemas robustos y escalables en la nube", - "C) Aplicaciones móviles con excelente experiencia de usuario", - "D) Proyectos de análisis y visualización de datos", + opciones: [ + { + respuesta: "Crear interfaces web interactivas y atractivas", + casa: "Frontend", + }, + { + respuesta: "Desarrollar sistemas robustos y escalables en la nube", + casa: "Backend", + }, + { + respuesta: + "Desarrollar aplicaciones móviles con excelente experiencia de usuario", + casa: "Mobile", + }, + { + respuesta: "Proyectos de análisis y visualización de datos", + casa: "Data", + }, ], }, { pregunta: "¿Qué tecnología te gustaría dominar en el futuro?", - respuestas: [ - "A) WebAssembly y animaciones avanzadas en la web", - "B) Inteligencia Artificial y Machine Learning en servidores", - "C) Realidad aumentada en aplicaciones móviles", - "D) Big Data y análisis de grandes volúmenes de información", + opciones: [ + { + respuesta: "WebAssembly y animaciones avanzadas en la web", + casa: "Frontend", + }, + { + respuesta: "Inteligencia Artificial y Machine Learning en servidores", + casa: "Backend", + }, + { + respuesta: "Realidad aumentada en aplicaciones móviles", + casa: "Mobile", + }, + { + respuesta: "Big Data y análisis de grandes volúmenes de información", + casa: "Data", + }, ], }, { pregunta: "¿Cómo te gusta colaborar en un equipo?", - respuestas: [ - "A) Diseñando y mejorando la experiencia de usuario", - "B) Integrando servicios y APIs en el backend", - "C) Asegurando la mejor experiencia en aplicaciones móviles", - "D) Proporcionando análisis detallados a partir de los datos", + opciones: [ + { + respuesta: "Diseñando y mejorando la experiencia de usuario", + casa: "Frontend", + }, + { + respuesta: "Integrando servicios y APIs en el backend", + casa: "Backend", + }, + { + respuesta: "Asegurando la mejor experiencia en aplicaciones móviles", + casa: "Mobile", + }, + { + respuesta: "Proporcionando análisis detallados a partir de los datos", + casa: "Data", + }, ], }, ] -const casas = [ - { - casa: "Frontend", - color: "#f2f2f2", - icono: - "https://www.iconfinder.com/icons/464586/code_icon_flat_web_development_programming_icon/size_64/png", - tema: "Diseño y desarrollo de interfaces web", - }, - { - casa: "Backend", - color: "#e3e3e3", - icono: - "https://www.iconfinder.com/icons/1438014/server_icon_flat/size_64/png", - tema: "Desarrollo de sistemas backend", - }, - { - casa: "Mobile", - color: "#cccccc", - icono: - "https://www.iconfinder.com/icons/1832874/mobile_app_icon_flat/size_64/png", - tema: "Desarrollo de aplicaciones móviles", - }, - { - casa: "Data", - color: "#ffffff", - icono: - "https://www.iconfinder.com/icons/2518380/database_icon_flat/size_64/png", - tema: "Análisis y visualización de datos", - }, -] +const puntosCasas = { + Frontend: 0, + Backend: 0, + Mobile: 0, + Data: 0, +} + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}) +const prompt = (query) => new Promise((resolve) => rl.question(query, resolve)) + +// When done reading prompt, exit program +rl.on("close", () => process.exit(0)) From 9802c7b3af15cf1b7c11e65a3421376ca915b18f Mon Sep 17 00:00:00 2001 From: Rafa Canosa Date: Mon, 9 Sep 2024 16:14:30 +0200 Subject: [PATCH 085/539] async function to execute the program. --- .../javascript/Rafacv23.js | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js index d014f84435..e29c144395 100644 --- a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/Rafacv23.js @@ -230,5 +230,61 @@ const rl = readline.createInterface({ }) const prompt = (query) => new Promise((resolve) => rl.question(query, resolve)) +;(async () => { + try { + console.log( + "Bienvenido a Hogwarts, la escuela de Programación para magos y brujas del código." + ) + + for (let i = 0; i < preguntas.length; i++) { + const pregunta = preguntas[i] + + console.log(`\n${pregunta.pregunta}`) + pregunta.opciones.forEach((opcion, index) => { + console.log(`${index + 1}) ${opcion.respuesta}`) + }) + + let respuesta = await prompt("Selecciona una opción (1-4): ") + respuesta = parseInt(respuesta) - 1 + + // Validar que la respuesta esté en el rango adecuado + if (respuesta >= 0 && respuesta < pregunta.opciones.length) { + const casaSeleccionada = pregunta.opciones[respuesta].casa + puntosCasas[casaSeleccionada]++ + } else { + console.log( + "Opción inválida, por favor selecciona un número entre 1 y 4." + ) + i-- // Volver a preguntar si la opción es inválida + } + } + + // Encontrar el puntaje más alto + const maxPuntos = Math.max(...Object.values(puntosCasas)) + + // Encontrar todas las casas que tienen el puntaje más alto + const casasEmpatadas = Object.keys(puntosCasas).filter( + (casa) => puntosCasas[casa] === maxPuntos + ) + + let casaGanadora + + if (casasEmpatadas.length > 1) { + // Si hay empate, selecciona una casa al azar + console.log("\nEl sombrero ha tenido dificultades para decidir...") + const indiceAleatorio = Math.floor(Math.random() * casasEmpatadas.length) + casaGanadora = casasEmpatadas[indiceAleatorio] + } else { + // Si no hay empate, simplemente selecciona la casa ganadora + casaGanadora = casasEmpatadas[0] + } + + console.log(`\n¡Felicidades! Perteneces a la casa ${casaGanadora}.`) + rl.close() + } catch (e) { + console.error("Error en la selección", e) + } +})() + // When done reading prompt, exit program rl.on("close", () => process.exit(0)) From be694deabf5fc8949acb3b7214bdbc1d271de062 Mon Sep 17 00:00:00 2001 From: password1989 <103333457+password1989@users.noreply.github.com> Date: Mon, 9 Sep 2024 16:21:04 +0200 Subject: [PATCH 086/539] #00 - Java --- .../java/Password1989.java | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Password1989.java diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Password1989.java b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Password1989.java new file mode 100644 index 0000000000..84ddad01ea --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Password1989.java @@ -0,0 +1,96 @@ +package org.roadmap.java; + +public class Password1989 { + + public static void main(String[] args) { + /* + * ¿Preparad@ para aprender o repasar el lenguaje de programación que tú quieras? + * - Recuerda que todas las instrucciones de participación están en el + * repositorio de GitHub. + * + * Lo primero... ¿Ya has elegido un lenguaje? + * - No todos son iguales, pero sus fundamentos suelen ser comunes. + * - Este primer reto te servirá para familiarizarte con la forma de participar + * enviando tus propias soluciones. + * + * EJERCICIO: + * - Crea un comentario en el código y coloca la URL del sitio web oficial del + * lenguaje de programación que has seleccionado. + * - Representa las diferentes sintaxis que existen de crear comentarios + * en el lenguaje (en una línea, varias...). + * - Crea una variable (y una constante si el lenguaje lo soporta). + * - Crea variables representando todos los tipos de datos primitivos + * del lenguaje (cadenas de texto, enteros, booleanos...). + * - Imprime por terminal el texto: "¡Hola, [y el nombre de tu lenguaje]!" + * + * ¿Fácil? No te preocupes, recuerda que esta es una ruta de estudio y + * debemos comenzar por el principio. + */ + + /* URL del sitio web oficial de JAVA: + * https://www.java.com/es/ + */ + + /* + * Comentario de varias lineas + */ + + //Comentario de una linea + + /* + * Ejercicio crea una variable: + */ + String variableJava = "Java"; + + /* + * Ejercicio crea una constante: + */ + + final String constanteJava = "Java"; + + /* + * Datos primitivos en JAVA: + * El lenguaje Java da de base una serie de tipos de datos primitivos. + * + * byte: Representa un tipo de dato de 8 bits con signo. De tal manera que puede almacenar los valores numéricos de -128 a 127 (ambos inclusive) + * short: Representa un tipo de dato de 16 bits con signo. De esta manera almacena valores numéricos de -32.768 a 32.767. + * int: Es un tipo de dato de 32 bits con signo para almacenar valores numéricos. Cuyo valor mínimo es -231 y el valor máximo 231-1. + * long: Es un tipo de dato de 64 bits con signo que almacena valores numéricos entre -2 elevado 63 a 2 elevado a 63-1 + * float: Es un tipo dato para almacenar números en coma flotante con precisión simple de 32 bits. + * double: Es un tipo de dato para almacenar números en coma flotante con doble precisión de 64 bits. + * char: Es un tipo de datos que representa a un carácter Unicode sencillo de 16 bits. + * boolean: Sirve para definir tipos de datos booleanos. Es decir, aquellos que tienen un valor de true o false. Ocupa 1 bit de información. + * + * Primitivos + * Lista de tipos de datos primitivos en JAVA + * Tipo Tamaño Valor mínimo Valor máximo + * byte 8 bits -128 127 + * short 16 bits -32768 32767 + * int 32 bits -2147483648 2147483647 + * long 64 bits -9223372036854775808 9223372036854775807 + * float 32 bits -3.402823e38 3.402823e38 + * double 64 bits -1.79769313486232e308 1.79769313486232e308 + * char 16 bits u000 ufff + */ + byte b = -128; + short s = -32768; + int i = -2147483648; + long l = -9223372036854775808l; + float f = -3.402823e38f; + double d = -1.79769313486232e307d; + char c; + boolean bl = true; + + //Facil: System.out.println("¡Hola, " + variableJava + "!"); + System.out.println(String.format("¡Hola, %s!", variableJava)); + + /* + * El título de la Pull Request también debe seguir este formato: "#[número] - [lenguaje_utilizado]". + * En el ejemplo anterior sería "#00 - Python". + * + * En mi caso seria: "#00 - Java" + */ + + } + +} From dc184a8ca6d3eb59a008df119e021ff6d82b225b Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Mon, 9 Sep 2024 18:52:58 +0200 Subject: [PATCH 087/539] #28 Kotlin y #29 Kotlin --- Roadmap/28 - SOLID LSP/kotlin/eulogioep.kt | 91 +++++++++++++++++++ Roadmap/29 - SOLID ISP/kotlin/eulogioep.kt | 101 +++++++++++++++++++++ 2 files changed, 192 insertions(+) create mode 100644 Roadmap/28 - SOLID LSP/kotlin/eulogioep.kt create mode 100644 Roadmap/29 - SOLID ISP/kotlin/eulogioep.kt diff --git a/Roadmap/28 - SOLID LSP/kotlin/eulogioep.kt b/Roadmap/28 - SOLID LSP/kotlin/eulogioep.kt new file mode 100644 index 0000000000..766ff8aff1 --- /dev/null +++ b/Roadmap/28 - SOLID LSP/kotlin/eulogioep.kt @@ -0,0 +1,91 @@ +/* + * Principio de Sustitución de Liskov (LSP): + * + * El LSP establece que los objetos de una superclase deben poder ser reemplazados + * por objetos de sus subclases sin afectar la corrección del programa. En otras palabras, + * las subclases deben ser completamente sustituibles por sus clases base. + * + * Este principio asegura que una subclase puede asumir el lugar de su superclase + * sin causar errores o comportamientos inesperados en el programa. + */ + +// Clase base Vehiculo +abstract class Vehiculo { + abstract fun acelerar(incrementoVelocidad: Int) + abstract fun frenar(decrementoVelocidad: Int) + abstract fun obtenerVelocidadActual(): Int +} + +// Subclase Coche +class Coche : Vehiculo() { + private var velocidad = 0 + + override fun acelerar(incrementoVelocidad: Int) { + velocidad += incrementoVelocidad + println("Coche acelerando. Velocidad actual: $velocidad km/h") + } + + override fun frenar(decrementoVelocidad: Int) { + velocidad = maxOf(0, velocidad - decrementoVelocidad) + println("Coche frenando. Velocidad actual: $velocidad km/h") + } + + override fun obtenerVelocidadActual(): Int = velocidad +} + +// Subclase Motocicleta +class Motocicleta : Vehiculo() { + private var velocidad = 0 + + override fun acelerar(incrementoVelocidad: Int) { + velocidad += incrementoVelocidad + println("Motocicleta acelerando. Velocidad actual: $velocidad km/h") + } + + override fun frenar(decrementoVelocidad: Int) { + velocidad = maxOf(0, velocidad - decrementoVelocidad) + println("Motocicleta frenando. Velocidad actual: $velocidad km/h") + } + + override fun obtenerVelocidadActual(): Int = velocidad +} + +// Subclase Bicicleta +class Bicicleta : Vehiculo() { + private var velocidad = 0 + + override fun acelerar(incrementoVelocidad: Int) { + velocidad += incrementoVelocidad + println("Bicicleta acelerando. Velocidad actual: $velocidad km/h") + } + + override fun frenar(decrementoVelocidad: Int) { + velocidad = maxOf(0, velocidad - decrementoVelocidad) + println("Bicicleta frenando. Velocidad actual: $velocidad km/h") + } + + override fun obtenerVelocidadActual(): Int = velocidad +} + +// Función para probar el LSP +fun probarLSP(vehiculo: Vehiculo) { + vehiculo.acelerar(20) + vehiculo.frenar(10) + println("Velocidad final: ${vehiculo.obtenerVelocidadActual()} km/h") + println() +} + +fun main() { + val coche = Coche() + val motocicleta = Motocicleta() + val bicicleta = Bicicleta() + + println("Probando Coche:") + probarLSP(coche) + + println("Probando Motocicleta:") + probarLSP(motocicleta) + + println("Probando Bicicleta:") + probarLSP(bicicleta) +} \ No newline at end of file diff --git a/Roadmap/29 - SOLID ISP/kotlin/eulogioep.kt b/Roadmap/29 - SOLID ISP/kotlin/eulogioep.kt new file mode 100644 index 0000000000..325a8ac80f --- /dev/null +++ b/Roadmap/29 - SOLID ISP/kotlin/eulogioep.kt @@ -0,0 +1,101 @@ +/* + * Principio de Segregación de Interfaces (ISP) + * + * El ISP establece que ningún cliente debe ser forzado a depender de métodos + * que no utiliza. Sugiere dividir interfaces grandes en otras más pequeñas + * y específicas para que los clientes solo tengan que conocer los métodos + * que realmente necesitan. + */ + +// Interfaces segregadas +interface Impresora { + fun imprimir(documento: String) +} + +interface ImpresoraColor : Impresora { + fun imprimirColor(documento: String) +} + +interface Escaner { + fun escanear(documento: String): String +} + +interface Fax { + fun enviarFax(documento: String) +} + +// Implementaciones +class ImpresoraBasica : Impresora { + override fun imprimir(documento: String) { + println("Imprimiendo en blanco y negro: $documento") + } +} + +class ImpresoraAColor : ImpresoraColor { + override fun imprimir(documento: String) { + println("Imprimiendo en blanco y negro: $documento") + } + + override fun imprimirColor(documento: String) { + println("Imprimiendo en color: $documento") + } +} + +class ImpresoraMultifuncion : ImpresoraColor, Escaner, Fax { + override fun imprimir(documento: String) { + println("Imprimiendo en blanco y negro: $documento") + } + + override fun imprimirColor(documento: String) { + println("Imprimiendo en color: $documento") + } + + override fun escanear(documento: String): String { + println("Escaneando: $documento") + return "Documento escaneado: $documento" + } + + override fun enviarFax(documento: String) { + println("Enviando fax: $documento") + } +} + +// Gestor de impresoras +class GestorImpresoras { + fun imprimirDocumento(impresora: Impresora, documento: String) { + impresora.imprimir(documento) + } + + fun imprimirDocumentoColor(impresora: ImpresoraColor, documento: String) { + impresora.imprimirColor(documento) + } + + fun escanearDocumento(escaner: Escaner, documento: String): String { + return escaner.escanear(documento) + } + + fun enviarFax(fax: Fax, documento: String) { + fax.enviarFax(documento) + } +} + +// Función principal para probar el sistema +fun main() { + val gestorImpresoras = GestorImpresoras() + val impresoraBasica = ImpresoraBasica() + val impresoraColor = ImpresoraAColor() + val multifuncion = ImpresoraMultifuncion() + + println("Prueba de Impresora Básica:") + gestorImpresoras.imprimirDocumento(impresoraBasica, "Documento en blanco y negro") + + println("\nPrueba de Impresora a Color:") + gestorImpresoras.imprimirDocumento(impresoraColor, "Documento en blanco y negro") + gestorImpresoras.imprimirDocumentoColor(impresoraColor, "Documento en color") + + println("\nPrueba de Impresora Multifunción:") + gestorImpresoras.imprimirDocumento(multifuncion, "Documento en blanco y negro") + gestorImpresoras.imprimirDocumentoColor(multifuncion, "Documento en color") + gestorImpresoras.escanearDocumento(multifuncion, "Documento para escanear") + gestorImpresoras.enviarFax(multifuncion, "Documento para enviar por fax") +} \ No newline at end of file From cc0f3ee40a0fa65dd4372e2e2d0f65948a8a2d3d Mon Sep 17 00:00:00 2001 From: mvidalb Date: Mon, 9 Sep 2024 19:17:31 +0200 Subject: [PATCH 088/539] #36 - Python --- .../python/mvidalb.py | 210 ++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/mvidalb.py diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/mvidalb.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/mvidalb.py new file mode 100644 index 0000000000..b0a5fdc25c --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/mvidalb.py @@ -0,0 +1,210 @@ +''' +Ejercicio mvidalb +''' + +import random +import pprint + +# Inicializo las distinas casas +houses = { + "Frontend": 0, + "Backend": 0, + "Mobile": 0, + "Data" : 0 + } + +# Preguntas con sus respuestas y soluciones +questions = [ + { + "pregunta": "¿Cuál de los siguientes lenguajes es más comúnmente utilizado para el desarrollo frontend?", + "respuestas": { + "a)": "Java", + "b)": "Python", + "c)": "JavaScript", + "d)": "Kotlin" + }, + "soluciones": { + "a)": "Backend", + "b)": "Data", + "c)": "Frontend", + "d)": "Mobile" + } + }, + { + "pregunta": "En el contexto del desarrollo backend, ¿cuál es un framework popular para Node.js?", + "respuestas": { + "a)": "React", + "b)": "Laravel", + "c)": "Django", + "d)": "Express" + }, + "soluciones": { + "a)": "Frontend", + "b)": "Backend", + "c)": "Data", + "d)": "Mobile" + } + }, + { + "pregunta": "¿Qué lenguaje es conocido por ser ampliamente utilizado en el desarrollo de aplicaciones móviles nativas para Android?", + "respuestas": { + "a)": "Swift", + "b)": "Kotlin", + "c)": "Flutter", + "d)": "Objective-C" + }, + "soluciones": { + "a)": "Mobile", + "b)": "Mobile", + "c)": "Frontend", + "d)": "Backend" + } + }, + { + "pregunta": "En ciencia de datos, ¿qué biblioteca de Python es más conocida para trabajar con grandes volúmenes de datos?", + "respuestas": { + "a)": "Pandas", + "b)": "TensorFlow", + "c)": "NumPy", + "d)": "Keras" + }, + "soluciones": { + "a)": "Data", + "b)": "Mobile", + "c)": "Frontend", + "d)": "Backend" + } + }, + { + "pregunta": "¿Cuál de estas tecnologías es comúnmente usada para la gestión del estado en aplicaciones frontend?", + "respuestas": { + "a)": "Redux", + "b)": "Flask", + "c)": "MongoDB", + "d)": "Spring Boot" + }, + "soluciones": { + "a)": "Frontend", + "b)": "Backend", + "c)": "Data", + "d)": "Mobile" + } + }, + { + "pregunta": "En el desarrollo backend, ¿cuál de las siguientes bases de datos es relacional?", + "respuestas": { + "a)": "MongoDB", + "b)": "Redis", + "c)": "MySQL", + "d)": "Cassandra" + }, + "soluciones": { + "a)": "Data", + "b)": "Mobile", + "c)": "Backend", + "d)": "Frontend" + } + }, + { + "pregunta": "¿Qué framework es comúnmente utilizado para desarrollar aplicaciones móviles multiplataforma?", + "respuestas": { + "a)": "Xamarin", + "b)": "Swift", + "c)": "Kotlin", + "d)": "React Native" + }, + "soluciones": { + "a)": "Mobile", + "b)": "Frontend", + "c)": "Backend", + "d)": "Data" + } + }, + { + "pregunta": "¿Qué es un concepto clave de las bases de datos en el campo de los datos masivos (Big Data)?", + "respuestas": { + "a)": "DOM", + "b)": "Cluster", + "c)": "ORM", + "d)": "CDN" + }, + "soluciones": { + "a)": "Frontend", + "b)": "Data", + "c)": "Backend", + "d)": "Mobile" + } + }, + { + "pregunta": "¿Cuál de las siguientes tecnologías es esencial para el diseño de interfaces de usuario en el desarrollo frontend?", + "respuestas": { + "a)": "CSS", + "b)": "Flask", + "c)": "Hadoop", + "d)": "Redis" + }, + "soluciones": { + "a)": "Frontend", + "b)": "Backend", + "c)": "Data", + "d)": "Mobile" + } + }, + { + "pregunta": "¿Cuál de estos es un patrón de diseño común en la arquitectura backend?", + "respuestas": { + "a)": "MVC (Model-View-Controller)", + "b)": "CSS Grid", + "c)": "JWT (JSON Web Token)", + "d)": "Kafka" + }, + "soluciones": { + "a)": "Backend", + "b)": "Frontend", + "c)": "Mobile", + "d)": "Data" + } + } +] + +# Método para calcular la puntuación de cada casa en función de la respuesta seleccionada +def add_score(houses, question, final_answer) -> dict: + answer_selected = question["soluciones"][final_answer + ")"] + for house in houses: + if answer_selected == house: + houses[answer_selected] += 2 # 2 puntos para una casa si seleccionas esta respuesta + + return houses + +# Comienzo el programa +print("\nSOMBRERO SELECCIONADOR!") +name = input("¿Cuál es tu nombre, querido mago?: ") +print(f"\nGracias por hacerme saber tu nombre, {name}! Elige sabiamente para que el sombrero seleccionador escoja bien tu destino:") + +# Recorro el diccionario de preguntas +for i, question in enumerate(questions): + print(f"\n{i+1}. " + question["pregunta"]) + for answers in question["respuestas"].items(): + print(" " + answers[0] + " " + answers[1]) # Opciones en cada pregunta mostradas por consola + + while True: # Ejecutar hasta que se seleccione una respuesta correcta + final_answer = input("\nSelecciona respuesta: ") + if final_answer in ["a", "b", "c", "d"]: + houses = add_score(houses, question, final_answer) # Calculo la nueva puntuación de cada casa + break + else: + print("Cáspitas! Ha ocurrido un error, selecciona una respuesta correcta.") + + print("\nPuntuación en tiempo real:") + pprint.pprint(houses, width = 20) + + +# Compruebo qué casa ha obtenido mayor puntuación +winning_house = [key for key, value in houses.items() if value == max(houses.values())] # Máximo valor del dict houses +if len(winning_house) != 1: + winning_house = [random.choice(winning_house)] + print(f"\nENHORABUENA {name}! Ha sido una decisión muuuy difícil, pero eres nuevo integrante de la casa {winning_house[0].upper()}, buena suerte!\n") +else: + print(f"\nENHORABUENA {name}! Eres nuevo integrante de la casa {winning_house[0].upper()}, buena suerte!\n") + + From b87ecb38607dd3b7a646a2b0d8bd5f9dd78bfb35 Mon Sep 17 00:00:00 2001 From: Albert Mantaras <34039293+Mantaras96@users.noreply.github.com> Date: Mon, 9 Sep 2024 17:50:14 +0000 Subject: [PATCH 089/539] Ej36 sombrero --- .../java/mantaras96.java | 165 ++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/java/mantaras96.java diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/java/mantaras96.java b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/java/mantaras96.java new file mode 100644 index 0000000000..b79a861558 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/java/mantaras96.java @@ -0,0 +1,165 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.Scanner; + +public class Mantaras96 { + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + Respuestas respuestas = new Respuestas(); + + String name = obtenerNombreAlumno(scanner); + + List preguntas = cargarPreguntas(); + + // Aquí podrías llamar a otras funciones para continuar el programa, por + // ejemplo: + realizarPreguntas(scanner, respuestas, preguntas); + String casa = determinarCasa(respuestas); + System.out.println("El sombrero seleccionador ha decidido que perteneces a la casa: " + casa); + + scanner.close(); + } + + public static String determinarCasa(Respuestas respuestas) { + int maxPuntos = Math.max(Math.max(respuestas.getPuntosFront(), respuestas.getPuntosBack()), + Math.max(respuestas.getPuntosMobile(), respuestas.getPuntosData())); + List casasEmpatadas = new ArrayList<>(); + + if (respuestas.getPuntosFront() == maxPuntos) { + casasEmpatadas.add("Frontend"); + } + if (respuestas.getPuntosBack() == maxPuntos) { + casasEmpatadas.add("Backend"); + } + if (respuestas.getPuntosMobile() == maxPuntos) { + casasEmpatadas.add("Mobile"); + } + if (respuestas.getPuntosData() == maxPuntos) { + casasEmpatadas.add("Data"); + } + + if (casasEmpatadas.size() > 1) { + System.out.println("¡La decisión ha sido complicada! Hubo un empate."); + Random random = new Random(); + return casasEmpatadas.get(random.nextInt(casasEmpatadas.size())); + } else { + return casasEmpatadas.get(0); + } + } + + public static void mostrarResultados(Respuestas respuestas) { + String casa = determinarCasa(respuestas); + System.out.println("El sombrero seleccionador ha decidido que perteneces a la casa: " + casa); + } + + public static List cargarPreguntas() { + List preguntas = new ArrayList<>(); + preguntas.add( + "Pregunta 1: ¿Qué lenguaje de programación prefieres? (Responde con 1 para JavaScript, 2 para Java, 3 para Swift, 4 para Python)"); + preguntas.add( + "Pregunta 2: ¿Qué tipo de proyectos disfrutas más? (Responde con 1 para Aplicaciones web, 2 para Sistemas empresariales, 3 para Aplicaciones móviles, 4 para Análisis de datos)"); + preguntas.add( + "Pregunta 3: ¿Qué herramienta prefieres usar? (Responde con 1 para React, 2 para Spring, 3 para Xcode, 4 para Pandas)"); + preguntas.add( + "Pregunta 4: ¿Cuál es tu área de interés? (Responde con 1 para Diseño de interfaces, 2 para Arquitectura de software, 3 para Desarrollo de apps, 4 para Ciencia de datos)"); + preguntas.add( + "Pregunta 5: ¿Qué prefieres hacer en tu tiempo libre? (Responde con 1 para Crear sitios web, 2 para Trabajar en backend, 3 para Desarrollar juegos móviles, 4 para Analizar grandes conjuntos de datos)"); + preguntas.add( + "Pregunta 6: ¿Cuál es tu rol ideal en un equipo? (Responde con 1 para Diseñador UI/UX, 2 para Ingeniero de software, 3 para Desarrollador móvil, 4 para Científico de datos)"); + preguntas.add( + "Pregunta 7: ¿Qué tecnología te emociona más? (Responde con 1 para CSS y HTML, 2 para Microservicios, 3 para Kotlin, 4 para Machine Learning)"); + preguntas.add( + "Pregunta 8: ¿Qué tipo de problemas te gusta resolver? (Responde con 1 para Problemas de diseño, 2 para Problemas de lógica, 3 para Problemas de accesibilidad, 4 para Problemas de análisis de datos)"); + preguntas.add( + "Pregunta 9: ¿Qué tipo de lectura prefieres? (Responde con 1 para Blogs de diseño, 2 para Libros técnicos, 3 para Artículos sobre desarrollo móvil, 4 para Investigaciones de datos)"); + preguntas.add( + "Pregunta 10: ¿Dónde te ves en cinco años? (Responde con 1 para Desarrollando interfaces innovadoras, 2 para Liderando equipos de backend, 3 para Creando apps revolucionarias, 4 para Descubriendo insights en datos)"); + return preguntas; + } + + public static void realizarPreguntas(Scanner scanner, Respuestas respuestas, List preguntas) { + for (String pregunta : preguntas) { + boolean respuestaValida = false; + while (!respuestaValida) { + System.out.println(pregunta); + String respuesta = scanner.nextLine(); + try { + int puntos = Integer.parseInt(respuesta); + respuestas.addPointsToHouse(puntos); + respuestaValida = true; + } catch (NumberFormatException e) { + System.out.println("Por favor, ingrese un número válido."); + } + } + } + } + + public static String obtenerNombreAlumno(Scanner scanner) { + System.out.println("Bienvenido a Hogwarts. Indica tu nombre al sombrero seleccionador:"); + String name = scanner.nextLine(); + return name; + } + + public static class Respuestas { + int puntosFront = 0; + int puntosBack = 0; + int puntosMobile = 0; + int puntosData = 0; + + public int getPuntosFront() { + return puntosFront; + } + + public void setPuntosFront(int puntosFront) { + this.puntosFront = puntosFront; + } + + public int getPuntosBack() { + return puntosBack; + } + + public void setPuntosBack(int puntosBack) { + this.puntosBack = puntosBack; + } + + public int getPuntosMobile() { + return puntosMobile; + } + + public void setPuntosMobile(int puntosMobile) { + this.puntosMobile = puntosMobile; + } + + public int getPuntosData() { + return puntosData; + } + + public void setPuntosData(int puntosData) { + this.puntosData = puntosData; + } + + public Respuestas() { + // Constructor por defecto + } + + public void addPointsToHouse(int points) { + switch (points) { + case 1: + this.puntosFront++; + break; + case 2: + this.puntosBack++; + break; + case 3: + this.puntosMobile++; + break; + case 4: + this.puntosData++; + break; + } + + } + } +} From a8722a8a91cc0622e6e825f9e66fcaa44839ae88 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Mon, 9 Sep 2024 13:30:17 -0500 Subject: [PATCH 090/539] Ejercicio inicial completado, revisar si se puede optimizar mas o hacer de otra manera --- .../java/simonguzman.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Roadmap/20 - PETICIONES HTTP/java/simonguzman.java diff --git a/Roadmap/20 - PETICIONES HTTP/java/simonguzman.java b/Roadmap/20 - PETICIONES HTTP/java/simonguzman.java new file mode 100644 index 0000000000..b40679ca61 --- /dev/null +++ b/Roadmap/20 - PETICIONES HTTP/java/simonguzman.java @@ -0,0 +1,35 @@ + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +public class simonguzman { + public static void main(String[] args) throws IOException{ + makeHttpRequest("https://www.google.com/"); + } + + public static void makeHttpRequest(String url) throws IOException{ + URL obj = new URL(url); + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + + con.setRequestMethod("GET"); + + int responseCode = con.getResponseCode(); + if (responseCode == 200) { + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + System.out.println(response.toString()); + }else{ + System.out.println("ERROR: "+responseCode); + } + } +} From d83e506aa0c7213f358aab05f3a9eeb77823064a Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 9 Sep 2024 21:16:58 +0200 Subject: [PATCH 091/539] =?UTF-8?q?Correcci=C3=B3n=20Roadmap=2036=20+=20Nu?= =?UTF-8?q?evo=20ejercicio=2037?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +- .../python/mouredev.py | 253 ++++++++++++++++++ .../37 - OASIS VS LINKIN PARK/ejercicio.md | 29 ++ 3 files changed, 286 insertions(+), 3 deletions(-) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/mouredev.py create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/ejercicio.md diff --git a/README.md b/README.md index a0c5b49814..ed5ee76a10 100644 --- a/README.md +++ b/README.md @@ -27,8 +27,8 @@ ## Corrección y próximo ejercicio -> #### Lunes 9 de septiembre de 2024 a las 20:00 (hora España) desde **[Twitch](https://twitch.tv/mouredev)** -> #### Consulta el **[horario](https://discord.gg/7A9NDvrb?event=1277739431696138385)** por país y crea un **[recordatorio](https://discord.gg/7A9NDvrb?event=1277739431696138385)** +> #### Lunes 16 de septiembre de 2024 a las 20:00 (hora España) desde **[Twitch](https://twitch.tv/mouredev)** +> #### Consulta el **[horario](https://discord.gg/8cxgGTxm?event=1280229634524450877)** por país y crea un **[recordatorio](https://discord.gg/8cxgGTxm?event=1280229634524450877)** ## Roadmap @@ -70,7 +70,8 @@ |33|[RESCATANDO A MICKEY](./Roadmap/33%20-%20RESCATANDO%20A%20MICKEY/ejercicio.md)|[📝](./Roadmap/33%20-%20RESCATANDO%20A%20MICKEY/python/mouredev.py)|[▶️](https://youtu.be/Bo9Cp3N68C0)|[👥](./Roadmap/33%20-%20RESCATANDO%20A%20MICKEY/) |34|[ÁRBOL GENEALÓGICO DE LA CASA DEL DRAGÓN](./Roadmap/34%20-%20ÁRBOL%20GENEALÓGICO%20LA%20CASA%20DEL%20DRAGÓN/ejercicio.md)|[📝](./Roadmap/34%20-%20ÁRBOL%20GENEALÓGICO%20LA%20CASA%20DEL%20DRAGÓN/python/mouredev.py)|[▶️](https://youtu.be/GAHBOAzgE2w)|[👥](./Roadmap/34%20-%20ÁRBOL%20GENEALÓGICO%20LA%20CASA%20DEL%20DRAGÓN/) |35|[REPARTIENDO LOS ANILLOS DE PODER](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/ejercicio.md)|[📝](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/python/mouredev.py)|[▶️](https://youtu.be/10i2dnaMLj8)|[👥](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/) -|36|[EL SOMBRERO SELECCIONADOR](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/ejercicio.md)|[🗓️ 09/09/24](https://discord.gg/7A9NDvrb?event=1277739431696138385)||[👥](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/) +|36|[EL SOMBRERO SELECCIONADOR](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/ejercicio.md)|[📝](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/python/mouredev.py)||[👥](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/) +|37|[OASIS VS LINKIN PARK](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/ejercicio.md)|[🗓️ 16/09/24](https://discord.gg/8cxgGTxm?event=1280229634524450877)||[👥](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/) ## Cursos en YouTube diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/mouredev.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/mouredev.py new file mode 100644 index 0000000000..922e4bd298 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/mouredev.py @@ -0,0 +1,253 @@ +import random + +houses = { + "Frontend": 0, + "Backend": 0, + "Mobile": 0, + "Data": 0 +} + +questions = [ + { + "question": "¿Qué tipo de proyectos te interesa más desarrollar?", + "answers": [ + { + "option": "Aplicaciones móviles nativas para múltiples plataformas.", + "house": "Mobile" + }, + { + "option": "Interfaces visualmente atractivas y responsivas.", + "house": "Frontend" + }, + { + "option": "Procesamiento y análisis de grandes volúmenes de datos.", + "house": "Data" + }, + { + "option": "Sistemas robustos y optimización de rendimiento del servidor.", + "house": "Backend" + } + ] + }, + { + "question": "¿Qué aspecto del desarrollo disfrutas más?", + "answers": [ + { + "option": "Resolver problemas complejos de lógica y escalabilidad.", + "house": "Backend" + }, + { + "option": "Analizar datos para tomar decisiones basadas en estadísticas.", + "house": "Data" + }, + { + "option": "Crear aplicaciones móviles eficientes y funcionales.", + "house": "Mobile" + }, + { + "option": "Trabajar en el diseño y la experiencia de usuario.", + "house": "Frontend" + } + ] + }, + { + "question": "¿Qué herramienta prefieres usar en tu día a día?", + "answers": [ + { + "option": "Kotlin o Swift para desarrollar apps móviles nativas.", + "house": "Mobile" + }, + { + "option": "Python o R para análisis de datos.", + "house": "Data" + }, + { + "option": "Frameworks como React o Angular.", + "house": "Frontend" + }, + { + "option": "Lenguajes como Node.js o Python para la gestión de servidores.", + "house": "Backend" + } + ] + }, + { + "question": "¿Cómo te ves en un equipo de desarrollo?", + "answers": [ + { + "option": "Modelando datos y construyendo dashboards de análisis.", + "house": "Data" + }, + { + "option": "Encargado de la lógica del servidor y las APIs.", + "house": "Backend" + }, + { + "option": "Desarrollando la interfaz y funcionalidad de una app móvil.", + "house": "Mobile" + }, + { + "option": "Diseñando las interacciones y los componentes visuales.", + "house": "Frontend" + } + ] + }, + { + "question": "¿Qué te motiva más al trabajar en un proyecto?", + "answers": [ + { + "option": "Ver cómo el diseño cobra vida en la pantalla.", + "house": "Frontend" + }, + { + "option": "Descubrir insights a partir del análisis de datos.", + "house": "Data" + }, + { + "option": "Optimizar el rendimiento y escalabilidad del sistema.", + "house": "Backend" + }, + { + "option": "Lograr que una aplicación móvil funcione perfectamente en cualquier dispositivo.", + "house": "Mobile" + } + ] + }, + { + "question": "¿Cuál es tu enfoque al aprender nuevas tecnologías?", + "answers": [ + { + "option": "Explorar técnicas avanzadas de análisis de datos y machine learning.", + "house": "Data" + }, + { + "option": "Aprender sobre nuevas arquitecturas y lenguajes de servidor.", + "house": "Backend" + }, + { + "option": "Probar nuevas plataformas y herramientas para desarrollo móvil.", + "house": "Mobile" + }, + { + "option": "Experimentar con nuevas librerías y frameworks de interfaz de usuario.", + "house": "Frontend" + } + ] + }, + { + "question": "¿Qué tipo de desafíos disfrutas más resolver?", + "answers": [ + { + "option": "Solución de problemas de concurrencia y carga en servidores.", + "house": "Backend" + }, + { + "option": "Optimización de interfaces para que se vean bien en cualquier dispositivo.", + "house": "Frontend" + }, + { + "option": "Análisis de grandes volúmenes de datos para detectar patrones ocultos.", + "house": "Data"}, + { + "option": "Creación de experiencias de usuario fluídas en dispositivos móviles.", + "house": "Mobile" + } + ] + }, + { + "question": "¿Cómo te gusta medir el éxito de tu trabajo?", + "answers": [ + { + "option": "Por la estabilidad y rapidez del sistema bajo carga.", + "house": "Backend" + }, + { + "option": "Mediante la satisfacción del usuario con la interfaz visual.", + "house": "Frontend" + }, + { + "option": "Por la fluidez y buen rendimiento de la app móvil en diferentes dispositivos.", + "house": "Mobile"}, + { + "option": "Por la precisión y relevancia de los resultados obtenidos en el análisis de datos.", + "house": "Data" + } + ] + }, + { + "question": "¿Qué te resulta más interesante al trabajar con tecnologías emergentes?", + "answers": [ + { + "option": "Trabajar con tecnologías de big data o inteligencia artificial.", + "house": "Data" + }, + { + "option": "Explorar nuevas arquitecturas para mejorar el rendimiento del servidor.", + "house": "Backend" + }, + { + "option": "Probar nuevas herramientas y metodologías para mejorar el diseño y la UX.", + "house": "Frontend" + }, + { + "option": "Desarrollar apps móviles que aprovechen nuevas capacidades de hardware.", + "house": "Mobile" + } + ] + }, + { + "question": "¿Cómo te enfrentas a un nuevo problema en un proyecto?", + "answers": [ + { + "option": "Buscando patrones y soluciones basadas en análisis de datos.", + "house": "Data" + }, + { + "option": "Replanteando la estructura visual y funcional de la interfaz.", + "house": "Frontend" + }, + { + "option": "Explorando cómo mejorar la experiencia del usuario en dispositivos móviles.", + "house": "Mobile" + }, + { + "option": "Analizando la estructura de datos y la lógica del backend.", + "house": "Backend" + } + ] + } +] + +print("\n¡Bienvenido a Hogwarts, la escuela de programación para magos y brujas del código!") +print("El sombrero seleccionador decidirá cuál es tu casa como programador.") + +name = input("\n¿Cuál es tu nombre? ") + +for index, question in enumerate(questions): + + print(f"\nPregunta {index + 1}: {question["question"]}\n") + + for i, answer in enumerate(question["answers"]): + print(f"{i + 1}. {answer["option"]}") + + choice = int(input("\nSelecciona una respuesta entre 1 y 4: ")) + + selected_answer = question["answers"][choice - 1] + houses[selected_answer["house"]] += 1 + +assigned_house = max(houses, key=houses.get) +scores = list(houses.values()) + +if scores.count(max(scores)) > 1: + possible_houses = [ + house for house, + points in houses.items() if points == max(scores) + ] + assigned_house = random.choice(possible_houses) + + print( + f"""\nHmmmm... Ha sido una decisión muy complicada, { + name}.\n¡Pero finalmente tu casa será {assigned_house}!""" + ) +else: + print(f"\nEnhorabuena, {name}.\n¡Tu casa será {assigned_house}!") diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/ejercicio.md b/Roadmap/37 - OASIS VS LINKIN PARK/ejercicio.md new file mode 100644 index 0000000000..1a12932b5a --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/ejercicio.md @@ -0,0 +1,29 @@ +# #37 OASIS VS LINKIN PARK +> #### Dificultad: Media | Publicación: 09/09/24 | Corrección: 16/09/24 + +## Ejercicio + +``` +/* + * EJERCICIO: + * ¡Dos de las bandas más grandes de la historia están de vuelta! + * Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? + * Desarrolla un programa que se conecte al API de Spotify y los compare. + * Requisitos: + * 1. Crea una cuenta de desarrollo en https://developer.spotify.com. + * 2. Conéctate al API utilizando tu lenguaje de programación. + * 3. Recupera datos de los endpoint que tú quieras. + * Acciones: + * 1. Accede a las estadísticas de las dos bandas. + * Por ejemplo: número total de seguidores, escuchas mensuales, + * canción con más reproducciones... + * 2. Compara los resultados de, por lo menos, 3 endpoint. + * 3. Muestra todos los resultados por consola para notificar al usuario. + * 4. Desarrolla un criterio para seleccionar qué banda es más popular. + */ +``` +#### Tienes toda la información extendida sobre el roadmap de retos de programación en **[retosdeprogramacion.com/roadmap](https://retosdeprogramacion.com/roadmap)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file From 55bf9a1f42a037aabbe66fa35d3211c7cd6317d7 Mon Sep 17 00:00:00 2001 From: Gabriel Cisneros <124811524+TilordQwerty@users.noreply.github.com> Date: Mon, 9 Sep 2024 16:46:50 -0400 Subject: [PATCH 092/539] Manejo de ficheros --- .../javascript/tilordqwerty.js | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 Roadmap/11 - MANEJO DE FICHEROS/javascript/tilordqwerty.js diff --git a/Roadmap/11 - MANEJO DE FICHEROS/javascript/tilordqwerty.js b/Roadmap/11 - MANEJO DE FICHEROS/javascript/tilordqwerty.js new file mode 100644 index 0000000000..96bfe16436 --- /dev/null +++ b/Roadmap/11 - MANEJO DE FICHEROS/javascript/tilordqwerty.js @@ -0,0 +1,103 @@ +/* +* IMPORTANTE: Sólo debes subir el fichero de código como parte del ejercicio. +* +* EJERCICIO: +* Desarrolla un programa capaz de crear un archivo que se llame como +* tu usuario de GitHub y tenga la extensión .txt. +* Añade varias líneas en ese fichero: +* - Tu nombre. +* - Edad. +* - Lenguaje de programación favorito. +* Imprime el contenido. +* Borra el fichero. +* +* DIFICULTAD EXTRA (opcional): +* Desarrolla un programa de gestión de ventas que almacena sus datos en un +* archivo .txt. +* - Cada producto se guarda en una línea del archivo de la siguiente manera: +* [nombre_producto], [cantidad_vendida], [precio]. +* - Siguiendo ese formato, y mediante terminal, debe permitir añadir, consultar, +* actualizar, eliminar productos y salir. +* - También debe poseer opciones para calcular la venta total y por producto. +* - La opción salir borra el .txt. +*/ + +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var fs = require('fs') +var readlineSync = require('readline-sync'); + +fs.writeFile('tilordqwerty.txt', '-Nombre: Gabriel\n-Edad: 18\nLenguaje favorito: JavaScript', function(err){ + if (err){ + return console.log(err) + } + console.log('El archivo fue creado correctamente'); +}); + +fs.readFile('tilordqwerty.txt', 'utf8', function(err, data){ + if (err){ + return console.log(err) + } + console.log(data); +}); + +fs.unlink('tilordqwerty.txt', function(err){ + if(err){ + return console.log(err) + } + console.log('El archivo fue borrado') +}) + +// Extra + +const READLINE = require('readline'); + +function agregarProducto() { + let nombreProducto = readlineSync.question('Nombre: ') + let cantidadVendida = readlineSync.question('Cantidad: ') + let precioTotal = readlineSync.question('Precio: ') + fs.appendFile('ventas.txt', `-${nombreProducto}\n -${cantidadVendida}\n -${precioTotal}`, function(err){ +if (err){ + return console.log(err);} +}); +} + +function listarProductosVentas(){ + fs.readFile('ventas.txt', 'utf8', function(err, data){ + if (err){ + return console.log(err); + } + console.log(data.toString()); + }); + } + +function gestionarVentas(){ + let selectOptions = ''; + let opciones = "--- BIENVENIDO --- \n 1. Agregar producto\n 2. Mostrar productos\n 3. Borrar producto\n 4. Salir\n Escoge una opcion: " + while(selectOptions !== '3'){ + selectOptions = readlineSync.question(opciones); + switch(selectOptions){ + case '1': + agregarProducto(); + break; + case '2': + listarProductosVentas(); + break; + case '3': + fs.unlink('ventas.txt', function(err){ + if(err){ + return console.log(err); + } + console.log('El archivo fue borrado') + }); + break; + case '4': + console.log('Adios') + break; + default: + console.log('Opcion no valida. Intentar de nuevo.'); + return; + } + } +}; +gestionarVentas(); From 33200482e91a630bfd2ce8a6b8cd0c41d6146236 Mon Sep 17 00:00:00 2001 From: mouredev Date: Tue, 10 Sep 2024 00:15:04 +0000 Subject: [PATCH 093/539] Update stats --- Roadmap/stats.json | 2115 ++++++++++++++++++++++---------------------- 1 file changed, 1081 insertions(+), 1034 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index d3b641f0cc..d1aebb947e 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,28 +1,28 @@ { - "challenges_total": 37, + "challenges_total": 38, "languages_total": 48, - "files_total": 6879, - "users_total": 1151, + "files_total": 6920, + "users_total": 1158, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1254 + "count": 1261 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 761 + "count": 765 }, { "order": 3, "name": "02 - FUNCIONES Y ALCANCE", - "count": 584 + "count": 585 }, { "order": 4, "name": "03 - ESTRUCTURAS DE DATOS", - "count": 400 + "count": 401 }, { "order": 5, @@ -42,12 +42,12 @@ { "order": 8, "name": "07 - PILAS Y COLAS", - "count": 242 + "count": 244 }, { "order": 9, "name": "08 - CLASES", - "count": 222 + "count": 225 }, { "order": 10, @@ -62,22 +62,22 @@ { "order": 12, "name": "11 - MANEJO DE FICHEROS", - "count": 154 + "count": 155 }, { "order": 13, - "name": "13 - PRUEBAS UNITARIAS", + "name": "14 - FECHAS", "count": 130 }, { "order": 14, - "name": "14 - FECHAS", - "count": 129 + "name": "13 - PRUEBAS UNITARIAS", + "count": 130 }, { "order": 15, "name": "12 - JSON Y XML", - "count": 128 + "count": 129 }, { "order": 16, @@ -92,12 +92,12 @@ { "order": 18, "name": "17 - ITERACIONES", - "count": 113 + "count": 114 }, { "order": 19, "name": "18 - CONJUNTOS", - "count": 111 + "count": 112 }, { "order": 20, @@ -137,12 +137,12 @@ { "order": 27, "name": "26 - SOLID SRP", - "count": 63 + "count": 64 }, { "order": 28, "name": "27 - SOLID OCP", - "count": 59 + "count": 60 }, { "order": 29, @@ -156,12 +156,12 @@ }, { "order": 31, - "name": "30 - SOLID DIP", - "count": 46 + "name": "32 - BATALLA DEADPOOL Y WOLVERINE", + "count": 47 }, { "order": 32, - "name": "32 - BATALLA DEADPOOL Y WOLVERINE", + "name": "30 - SOLID DIP", "count": 46 }, { @@ -171,97 +171,102 @@ }, { "order": 34, - "name": "31 - SIMULADOR JUEGOS OL\u00cdMPICOS", + "name": "35 - REPARTIENDO LOS ANILLOS DE PODER", "count": 38 }, { "order": 35, - "name": "35 - REPARTIENDO LOS ANILLOS DE PODER", - "count": 37 + "name": "31 - SIMULADOR JUEGOS OL\u00cdMPICOS", + "count": 38 }, { "order": 36, + "name": "36 - EL SOMBRERO SELECCIONADOR", + "count": 36 + }, + { + "order": 37, "name": "34 - \u00c1RBOL GENEAL\u00d3GICO LA CASA DEL DRAG\u00d3N", "count": 32 }, { - "order": 37, - "name": "36 - EL SOMBRERO SELECCIONADOR", - "count": 22 + "order": 38, + "name": "37 - OASIS VS LINKIN PARK", + "count": 0 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 2962, - "percentage": 43.06 + "count": 2979, + "percentage": 43.05 }, { "order": 2, "name": "javascript", - "count": 1370, - "percentage": 19.92 + "count": 1378, + "percentage": 19.91 }, { "order": 3, "name": "java", - "count": 614, - "percentage": 8.93 + "count": 619, + "percentage": 8.95 }, { "order": 4, "name": "typescript", - "count": 303, - "percentage": 4.4 + "count": 305, + "percentage": 4.41 }, { "order": 5, "name": "c#", "count": 253, - "percentage": 3.68 + "percentage": 3.66 }, { "order": 6, "name": "kotlin", - "count": 212, - "percentage": 3.08 + "count": 215, + "percentage": 3.11 }, { "order": 7, "name": "go", - "count": 212, + "count": 213, "percentage": 3.08 }, { "order": 8, "name": "swift", "count": 166, - "percentage": 2.41 + "percentage": 2.4 }, { "order": 9, "name": "php", - "count": 151, + "count": 152, "percentage": 2.2 }, { "order": 10, - "name": "rust", - "count": 113, - "percentage": 1.64 + "name": "c++", + "count": 114, + "percentage": 1.65 }, { "order": 11, - "name": "c++", + "name": "rust", "count": 113, - "percentage": 1.64 + "percentage": 1.63 }, { "order": 12, "name": "c", - "count": 66, - "percentage": 0.96 + "count": 67, + "percentage": 0.97 }, { "order": 13, @@ -272,14 +277,14 @@ { "order": 14, "name": "bash", - "count": 41, - "percentage": 0.6 + "count": 43, + "percentage": 0.62 }, { "order": 15, "name": "vb.net", "count": 37, - "percentage": 0.54 + "percentage": 0.53 }, { "order": 16, @@ -327,13 +332,13 @@ "order": 23, "name": "julia", "count": 10, - "percentage": 0.15 + "percentage": 0.14 }, { "order": 24, "name": "scala", "count": 10, - "percentage": 0.15 + "percentage": 0.14 }, { "order": 25, @@ -484,7 +489,7 @@ { "order": 1, "name": "miguelex", - "count": 156, + "count": 161, "languages": 15 }, { @@ -496,7 +501,7 @@ { "order": 3, "name": "hozlucas28", - "count": 103, + "count": 105, "languages": 3 }, { @@ -562,7 +567,7 @@ { "order": 14, "name": "jesusantonioeescamilla", - "count": 52, + "count": 55, "languages": 3 }, { @@ -573,39 +578,39 @@ }, { "order": 16, - "name": "amadorquispe", - "count": 49, - "languages": 2 + "name": "cesarcarmona30", + "count": 50, + "languages": 4 }, { "order": 17, - "name": "cesarcarmona30", - "count": 48, - "languages": 4 + "name": "amadorquispe", + "count": 49, + "languages": 2 }, { "order": 18, - "name": "ricjdev", + "name": "juanppdev", "count": 47, - "languages": 2 + "languages": 3 }, { "order": 19, - "name": "raulg91", + "name": "ricjdev", "count": 47, "languages": 2 }, { "order": 20, - "name": "jesusway69", + "name": "raulg91", "count": 47, "languages": 2 }, { "order": 21, - "name": "juanppdev", - "count": 46, - "languages": 3 + "name": "jesusway69", + "count": 47, + "languages": 2 }, { "order": 22, @@ -663,38 +668,38 @@ }, { "order": 31, - "name": "asjordi", + "name": "mouredev", "count": 37, "languages": 1 }, { "order": 32, - "name": "n0hagonada", - "count": 36, - "languages": 3 + "name": "asjordi", + "count": 37, + "languages": 1 }, { "order": 33, - "name": "emmanuelmmontesinos", + "name": "n0hagonada", "count": 36, - "languages": 1 + "languages": 3 }, { "order": 34, - "name": "mouredev", + "name": "rauldoezon", "count": 36, "languages": 1 }, { "order": 35, - "name": "rauldoezon", - "count": 35, + "name": "emmanuelmmontesinos", + "count": 36, "languages": 1 }, { "order": 36, "name": "rigo93acosta", - "count": 35, + "count": 36, "languages": 1 }, { @@ -717,49 +722,49 @@ }, { "order": 40, + "name": "qv1ko", + "count": 33, + "languages": 4 + }, + { + "order": 41, "name": "worlion", "count": 33, "languages": 2 }, { - "order": 41, + "order": 42, "name": "avcenal", "count": 33, "languages": 1 }, { - "order": 42, + "order": 43, "name": "juandaherrera", "count": 32, "languages": 5 }, { - "order": 43, + "order": 44, "name": "pedroomar23", "count": 32, "languages": 3 }, { - "order": 44, + "order": 45, "name": "pyramsd", "count": 32, "languages": 1 }, { - "order": 45, + "order": 46, "name": "fborjalv", "count": 32, "languages": 1 }, - { - "order": 46, - "name": "ronipg", - "count": 31, - "languages": 4 - }, { "order": 47, - "name": "qv1ko", + "name": "ronipg", "count": 31, "languages": 4 }, @@ -807,40 +812,40 @@ }, { "order": 55, + "name": "eulogioep", + "count": 28, + "languages": 1 + }, + { + "order": 56, "name": "thegera4", "count": 27, "languages": 2 }, { - "order": 56, + "order": 57, "name": "parababire", "count": 27, "languages": 1 }, { - "order": 57, + "order": 58, "name": "isilanes", "count": 27, "languages": 1 }, { - "order": 58, + "order": 59, "name": "lucasrebuffo", "count": 27, "languages": 1 }, { - "order": 59, + "order": 60, "name": "nightblockchain30", "count": 26, "languages": 2 }, - { - "order": 60, - "name": "eulogioep", - "count": 26, - "languages": 1 - }, { "order": 61, "name": "caverobrandon", @@ -855,21 +860,21 @@ }, { "order": 63, - "name": "monicavaquerano", + "name": "isaacus98", "count": 25, - "languages": 2 + "languages": 4 }, { "order": 64, - "name": "allbertomd", + "name": "monicavaquerano", "count": 25, - "languages": 1 + "languages": 2 }, { "order": 65, - "name": "isaacus98", - "count": 24, - "languages": 3 + "name": "allbertomd", + "count": 25, + "languages": 1 }, { "order": 66, @@ -993,67 +998,67 @@ }, { "order": 86, - "name": "trufoplus", + "name": "juandaw37", "count": 19, "languages": 1 }, { "order": 87, + "name": "trufoplus", + "count": 19, + "languages": 1 + }, + { + "order": 88, "name": "pguillo02", "count": 18, "languages": 5 }, { - "order": 88, + "order": 89, "name": "estuardodev", "count": 18, "languages": 4 }, { - "order": 89, + "order": 90, "name": "lumanet", "count": 18, "languages": 1 }, { - "order": 90, + "order": 91, "name": "mensius87", "count": 17, "languages": 4 }, { - "order": 91, + "order": 92, "name": "kevined11", "count": 17, "languages": 3 }, { - "order": 92, + "order": 93, "name": "raulfauli", "count": 17, "languages": 2 }, { - "order": 93, + "order": 94, "name": "saicobys", "count": 17, "languages": 2 }, - { - "order": 94, - "name": "andreavzqz", - "count": 17, - "languages": 1 - }, { "order": 95, - "name": "hyromy", + "name": "andreavzqz", "count": 17, "languages": 1 }, { "order": 96, - "name": "juandaw37", + "name": "hyromy", "count": 17, "languages": 1 }, @@ -1137,55 +1142,55 @@ }, { "order": 110, - "name": "sniker1223", - "count": 14, - "languages": 4 + "name": "gordo-master", + "count": 15, + "languages": 1 }, { "order": 111, - "name": "redom69", + "name": "sniker1223", "count": 14, "languages": 4 }, { "order": 112, - "name": "andresgcastillo", + "name": "redom69", "count": 14, - "languages": 2 + "languages": 4 }, { "order": 113, - "name": "ygriegasb", + "name": "andresgcastillo", "count": 14, "languages": 2 }, { "order": 114, - "name": "gonzadev28", + "name": "ygriegasb", "count": 14, "languages": 2 }, { "order": 115, - "name": "elmer125", + "name": "gonzadev28", "count": 14, - "languages": 1 + "languages": 2 }, { "order": 116, - "name": "vincentrodriguezr", + "name": "elmer125", "count": 14, "languages": 1 }, { "order": 117, - "name": "mikelm2020", + "name": "vincentrodriguezr", "count": 14, "languages": 1 }, { "order": 118, - "name": "gordo-master", + "name": "mikelm2020", "count": 14, "languages": 1 }, @@ -1257,181 +1262,181 @@ }, { "order": 130, - "name": "neosv", + "name": "mvidalb", "count": 13, "languages": 1 }, { "order": 131, - "name": "julian98789", + "name": "neosv", "count": 13, "languages": 1 }, { "order": 132, + "name": "julian98789", + "count": 13, + "languages": 1 + }, + { + "order": 133, "name": "juanrcoder", "count": 12, "languages": 2 }, { - "order": 133, + "order": 134, "name": "keltoi-dev", "count": 12, "languages": 2 }, { - "order": 134, + "order": 135, "name": "andresmcardenas", "count": 12, "languages": 2 }, { - "order": 135, + "order": 136, "name": "a-mayans", "count": 12, "languages": 2 }, { - "order": 136, + "order": 137, "name": "deathwing696", "count": 12, "languages": 2 }, { - "order": 137, + "order": 138, "name": "pancratzia", "count": 12, "languages": 1 }, { - "order": 138, + "order": 139, "name": "jeronimocardu", "count": 12, "languages": 1 }, { - "order": 139, + "order": 140, "name": "evilpotato04", "count": 12, "languages": 1 }, { - "order": 140, + "order": 141, "name": "javierjoyera", "count": 12, "languages": 1 }, { - "order": 141, + "order": 142, "name": "dataciriano", "count": 12, "languages": 1 }, { - "order": 142, + "order": 143, "name": "josealberto13", "count": 12, "languages": 1 }, { - "order": 143, + "order": 144, "name": "clmiranda", "count": 12, "languages": 1 }, { - "order": 144, + "order": 145, "name": "andrewcodev", "count": 12, "languages": 1 }, { - "order": 145, + "order": 146, "name": "javierfiestasbotella", "count": 12, "languages": 1 }, { - "order": 146, + "order": 147, "name": "pipe281", "count": 12, "languages": 1 }, { - "order": 147, + "order": 148, "name": "jchavescaceres", "count": 11, "languages": 2 }, { - "order": 148, + "order": 149, "name": "switchdays", "count": 11, "languages": 2 }, { - "order": 149, + "order": 150, "name": "arkmiguel379", "count": 11, "languages": 2 }, - { - "order": 150, - "name": "ialmontedr0", - "count": 11, - "languages": 1 - }, { "order": 151, - "name": "charlerodriguez3", + "name": "ialmontedr0", "count": 11, "languages": 1 }, { "order": 152, - "name": "oleojake", + "name": "charlerodriguez3", "count": 11, "languages": 1 }, { "order": 153, - "name": "7r0n1x", + "name": "oleojake", "count": 11, "languages": 1 }, { "order": 154, - "name": "alainmartz", + "name": "7r0n1x", "count": 11, "languages": 1 }, { "order": 155, - "name": "warclimb", + "name": "alainmartz", "count": 11, "languages": 1 }, { "order": 156, - "name": "mirandayuber", + "name": "warclimb", "count": 11, "languages": 1 }, { "order": 157, - "name": "m1l0j05", + "name": "mirandayuber", "count": 11, "languages": 1 }, { "order": 158, - "name": "59822", + "name": "m1l0j05", "count": 11, "languages": 1 }, { "order": 159, - "name": "mvidalb", + "name": "59822", "count": 11, "languages": 1 }, @@ -2061,1777 +2066,1777 @@ }, { "order": 264, - "name": "eloychavezdev", + "name": "oixild", "count": 5, - "languages": 1 + "languages": 2 }, { "order": 265, - "name": "vasilealexandru02", + "name": "eloychavezdev", "count": 5, "languages": 1 }, { "order": 266, - "name": "esaens12", + "name": "vasilealexandru02", "count": 5, "languages": 1 }, { "order": 267, - "name": "victormugo", + "name": "esaens12", "count": 5, "languages": 1 }, { "order": 268, - "name": "adridoce", + "name": "victormugo", "count": 5, "languages": 1 }, { "order": 269, - "name": "vixito", + "name": "adridoce", "count": 5, "languages": 1 }, { "order": 270, - "name": "danielbustos342", + "name": "vixito", "count": 5, "languages": 1 }, { "order": 271, - "name": "douglasdiazr", + "name": "danielbustos342", "count": 5, "languages": 1 }, { "order": 272, - "name": "n1sek", + "name": "douglasdiazr", "count": 5, "languages": 1 }, { "order": 273, - "name": "robmxz", + "name": "n1sek", "count": 5, "languages": 1 }, { "order": 274, - "name": "d4-n1", + "name": "robmxz", "count": 5, "languages": 1 }, { "order": 275, - "name": "lauracastrillonmp", + "name": "d4-n1", "count": 5, "languages": 1 }, { "order": 276, - "name": "joanfv-git", + "name": "lauracastrillonmp", "count": 5, "languages": 1 }, { "order": 277, - "name": "yharyarias", + "name": "joanfv-git", "count": 5, "languages": 1 }, { "order": 278, - "name": "jorgeadamowicz", + "name": "yharyarias", "count": 5, "languages": 1 }, { "order": 279, - "name": "franz-arzapalo", + "name": "jorgeadamowicz", "count": 5, "languages": 1 }, { "order": 280, - "name": "d0ubt0", + "name": "franz-arzapalo", "count": 5, "languages": 1 }, { "order": 281, - "name": "gmbarrios", + "name": "d0ubt0", "count": 5, "languages": 1 }, { "order": 282, - "name": "santiago434c", + "name": "gmbarrios", "count": 5, "languages": 1 }, { "order": 283, - "name": "augustdev2003", + "name": "santiago434c", "count": 5, "languages": 1 }, { "order": 284, - "name": "alberba", + "name": "augustdev2003", "count": 5, "languages": 1 }, { "order": 285, - "name": "gabrielramos02", + "name": "alberba", "count": 5, "languages": 1 }, { "order": 286, - "name": "thezhizn", + "name": "gabrielramos02", "count": 5, "languages": 1 }, { "order": 287, - "name": "jose-luis-lanza", + "name": "thezhizn", "count": 5, "languages": 1 }, { "order": 288, - "name": "nomellamodante", + "name": "jose-luis-lanza", "count": 5, "languages": 1 }, { "order": 289, - "name": "karolle", + "name": "nomellamodante", "count": 5, "languages": 1 }, { "order": 290, - "name": "jcrodmir", + "name": "karolle", "count": 5, "languages": 1 }, { "order": 291, - "name": "alvarofernandezavalos", + "name": "jcrodmir", "count": 5, "languages": 1 }, { "order": 292, - "name": "lucasag01", + "name": "alvarofernandezavalos", "count": 5, "languages": 1 }, { "order": 293, - "name": "thaishdz", + "name": "lucasag01", "count": 5, "languages": 1 }, { "order": 294, - "name": "bastianalq", + "name": "thaishdz", "count": 5, "languages": 1 }, { "order": 295, - "name": "w00k", + "name": "bastianalq", "count": 5, "languages": 1 }, { "order": 296, - "name": "boterop", + "name": "w00k", "count": 5, "languages": 1 }, { "order": 297, - "name": "zarakilancelot", - "count": 4, - "languages": 3 + "name": "boterop", + "count": 5, + "languages": 1 }, { "order": 298, - "name": "eonozux", - "count": 4, - "languages": 2 + "name": "rafacv23", + "count": 5, + "languages": 1 }, { "order": 299, - "name": "yablik", + "name": "zarakilancelot", "count": 4, - "languages": 2 + "languages": 3 }, { "order": 300, - "name": "fullovellas", + "name": "eonozux", "count": 4, "languages": 2 }, { "order": 301, - "name": "k3nvd", + "name": "yablik", "count": 4, "languages": 2 }, { "order": 302, - "name": "josefuentes-dev", + "name": "fullovellas", "count": 4, "languages": 2 }, { "order": 303, - "name": "willr30", + "name": "k3nvd", "count": 4, "languages": 2 }, { "order": 304, - "name": "ruthmp", + "name": "josefuentes-dev", "count": 4, "languages": 2 }, { "order": 305, - "name": "oixild", + "name": "willr30", "count": 4, "languages": 2 }, { "order": 306, - "name": "daeduol", + "name": "ruthmp", "count": 4, "languages": 2 }, { "order": 307, - "name": "mendozalz", + "name": "daeduol", "count": 4, "languages": 2 }, { "order": 308, - "name": "salkalero", + "name": "mendozalz", "count": 4, "languages": 2 }, { "order": 309, - "name": "elhacedordecosas", + "name": "salkalero", "count": 4, - "languages": 1 + "languages": 2 }, { "order": 310, - "name": "andeveling", + "name": "drvito1977", "count": 4, "languages": 1 }, { "order": 311, - "name": "santiago-munoz-garcia", + "name": "elhacedordecosas", "count": 4, "languages": 1 }, { "order": 312, - "name": "deivitdev", + "name": "andeveling", "count": 4, "languages": 1 }, { "order": 313, - "name": "joshbaez", + "name": "santiago-munoz-garcia", "count": 4, "languages": 1 }, { "order": 314, - "name": "marcoslombardo", + "name": "deivitdev", "count": 4, "languages": 1 }, { "order": 315, - "name": "lrpeset", + "name": "joshbaez", "count": 4, "languages": 1 }, { "order": 316, - "name": "dieswae", + "name": "marcoslombardo", "count": 4, "languages": 1 }, { "order": 317, - "name": "mateo423", + "name": "lrpeset", "count": 4, "languages": 1 }, { "order": 318, - "name": "joaquinlopez14", + "name": "dieswae", "count": 4, "languages": 1 }, { "order": 319, - "name": "angelurrutdev", + "name": "mateo423", "count": 4, "languages": 1 }, { "order": 320, - "name": "elianisdev", + "name": "joaquinlopez14", "count": 4, "languages": 1 }, { "order": 321, - "name": "omegatroy", + "name": "angelurrutdev", "count": 4, "languages": 1 }, { "order": 322, - "name": "socramwd", + "name": "elianisdev", "count": 4, "languages": 1 }, { "order": 323, - "name": "carzep09", + "name": "omegatroy", "count": 4, "languages": 1 }, { "order": 324, - "name": "mayerga", + "name": "socramwd", "count": 4, "languages": 1 }, { "order": 325, - "name": "hugovrc", + "name": "carzep09", "count": 4, "languages": 1 }, { "order": 326, - "name": "cdbiancotti", + "name": "mayerga", "count": 4, "languages": 1 }, { "order": 327, - "name": "h4ckxel", + "name": "hugovrc", "count": 4, "languages": 1 }, { "order": 328, - "name": "tobibordino", + "name": "cdbiancotti", "count": 4, "languages": 1 }, { "order": 329, - "name": "guillermo-k", + "name": "h4ckxel", "count": 4, "languages": 1 }, { "order": 330, - "name": "zakkdrte", + "name": "tobibordino", "count": 4, "languages": 1 }, { "order": 331, - "name": "sarismejiasanchez", + "name": "guillermo-k", "count": 4, "languages": 1 }, { "order": 332, - "name": "buriticasara", + "name": "zakkdrte", "count": 4, "languages": 1 }, { "order": 333, - "name": "davstudy", + "name": "sarismejiasanchez", "count": 4, "languages": 1 }, { "order": 334, - "name": "zerek247", + "name": "buriticasara", "count": 4, "languages": 1 }, { "order": 335, - "name": "vicman-182", + "name": "davstudy", "count": 4, "languages": 1 }, { "order": 336, - "name": "dlgai12", + "name": "zerek247", "count": 4, "languages": 1 }, { "order": 337, - "name": "rodrigoghr", + "name": "vicman-182", "count": 4, "languages": 1 }, { "order": 338, - "name": "txuky", + "name": "dlgai12", "count": 4, "languages": 1 }, { "order": 339, - "name": "nox456", + "name": "rodrigoghr", "count": 4, "languages": 1 }, { "order": 340, - "name": "mplatab", + "name": "txuky", "count": 4, "languages": 1 }, { "order": 341, - "name": "angell4s", + "name": "nox456", "count": 4, "languages": 1 }, { "order": 342, - "name": "quejuan52", + "name": "mplatab", "count": 4, "languages": 1 }, { "order": 343, - "name": "axelprz", + "name": "angell4s", "count": 4, "languages": 1 }, { "order": 344, - "name": "javirub", + "name": "quejuan52", "count": 4, "languages": 1 }, { "order": 345, - "name": "mallcca", + "name": "axelprz", "count": 4, "languages": 1 }, { "order": 346, - "name": "sunjamer", + "name": "javirub", "count": 4, "languages": 1 }, { "order": 347, - "name": "carrenoalexander", + "name": "mallcca", "count": 4, "languages": 1 }, { "order": 348, - "name": "jadraz", + "name": "sunjamer", "count": 4, "languages": 1 }, { "order": 349, - "name": "anvildestroyer", + "name": "carrenoalexander", "count": 4, "languages": 1 }, { "order": 350, - "name": "luissssoto", + "name": "jadraz", "count": 4, "languages": 1 }, { "order": 351, - "name": "albertorevel", + "name": "anvildestroyer", "count": 4, "languages": 1 }, { "order": 352, - "name": "juanca2805", + "name": "luissssoto", "count": 4, "languages": 1 }, { "order": 353, - "name": "bladi23", + "name": "albertorevel", "count": 4, "languages": 1 }, { "order": 354, - "name": "blasbarragan", + "name": "juanca2805", "count": 4, "languages": 1 }, { "order": 355, - "name": "jerrysantana", + "name": "bladi23", "count": 4, "languages": 1 }, { "order": 356, - "name": "abel-ade", + "name": "blasbarragan", "count": 4, "languages": 1 }, { "order": 357, - "name": "jairo-alejandro", + "name": "jerrysantana", "count": 4, "languages": 1 }, { "order": 358, - "name": "sbs24", + "name": "abel-ade", "count": 4, "languages": 1 }, { "order": 359, - "name": "traver79", + "name": "jairo-alejandro", "count": 4, "languages": 1 }, { "order": 360, - "name": "ramxv", + "name": "sbs24", "count": 4, "languages": 1 }, { "order": 361, - "name": "inkhemi", + "name": "traver79", "count": 4, "languages": 1 }, { "order": 362, - "name": "juperdev", + "name": "ramxv", "count": 4, "languages": 1 }, { "order": 363, - "name": "rafacv23", + "name": "inkhemi", "count": 4, "languages": 1 }, { "order": 364, - "name": "d1d4cum", + "name": "juperdev", "count": 4, "languages": 1 }, { "order": 365, - "name": "mohamedelderkaoui", + "name": "d1d4cum", "count": 4, "languages": 1 }, { "order": 366, + "name": "mohamedelderkaoui", + "count": 4, + "languages": 1 + }, + { + "order": 367, "name": "abelsrzz", "count": 3, "languages": 3 }, { - "order": 367, + "order": 368, "name": "angelo-eyama", "count": 3, "languages": 3 }, { - "order": 368, + "order": 369, "name": "akaisombra", "count": 3, "languages": 3 }, { - "order": 369, + "order": 370, "name": "oskarcali", "count": 3, "languages": 3 }, { - "order": 370, + "order": 371, "name": "owen-ian", "count": 3, "languages": 3 }, { - "order": 371, + "order": 372, "name": "jehiselruth", "count": 3, "languages": 3 }, { - "order": 372, + "order": 373, "name": "n-skot", "count": 3, "languages": 2 }, { - "order": 373, + "order": 374, + "name": "clotrack", + "count": 3, + "languages": 2 + }, + { + "order": 375, "name": "dimasb69", "count": 3, "languages": 2 }, { - "order": 374, + "order": 376, "name": "alfarog507", "count": 3, "languages": 2 }, { - "order": 375, + "order": 377, "name": "eloitr", "count": 3, "languages": 2 }, { - "order": 376, + "order": 378, "name": "diegopc-dev", "count": 3, "languages": 2 }, { - "order": 377, + "order": 379, "name": "robindev1812", "count": 3, "languages": 2 }, { - "order": 378, + "order": 380, "name": "arliumdev", "count": 3, "languages": 2 }, { - "order": 379, + "order": 381, "name": "skala2301", "count": 3, "languages": 2 }, { - "order": 380, + "order": 382, "name": "pablotaber", "count": 3, "languages": 2 }, { - "order": 381, + "order": 383, "name": "allanoscoding", "count": 3, "languages": 2 }, { - "order": 382, + "order": 384, "name": "seba9906", "count": 3, "languages": 2 }, { - "order": 383, + "order": 385, "name": "augustosdev", "count": 3, "languages": 2 }, { - "order": 384, + "order": 386, "name": "dylanb55", "count": 3, "languages": 1 }, { - "order": 385, + "order": 387, "name": "mellamoomar", "count": 3, "languages": 1 }, { - "order": 386, + "order": 388, "name": "oscar503sv", "count": 3, "languages": 1 }, { - "order": 387, + "order": 389, "name": "alejomazov", "count": 3, "languages": 1 }, { - "order": 388, + "order": 390, "name": "bryanalzate007", "count": 3, "languages": 1 }, { - "order": 389, + "order": 391, "name": "ivanpelu7", "count": 3, "languages": 1 }, { - "order": 390, + "order": 392, "name": "dmauricio4", "count": 3, "languages": 1 }, { - "order": 391, + "order": 393, "name": "davidr1594", "count": 3, "languages": 1 }, { - "order": 392, + "order": 394, "name": "vandresca", "count": 3, "languages": 1 }, { - "order": 393, + "order": 395, "name": "marlonleon2023", "count": 3, "languages": 1 }, { - "order": 394, + "order": 396, "name": "nikorasu-d", "count": 3, "languages": 1 }, { - "order": 395, + "order": 397, "name": "barbafebles", "count": 3, "languages": 1 }, { - "order": 396, + "order": 398, "name": "heliercamejo", "count": 3, "languages": 1 }, { - "order": 397, + "order": 399, "name": "aggranadoss", "count": 3, "languages": 1 }, { - "order": 398, + "order": 400, "name": "dannyvera1234", "count": 3, "languages": 1 }, { - "order": 399, + "order": 401, "name": "axelsparta", "count": 3, "languages": 1 }, { - "order": 400, + "order": 402, "name": "gitperalta", "count": 3, "languages": 1 }, { - "order": 401, + "order": 403, "name": "samuelarandia", "count": 3, "languages": 1 }, { - "order": 402, + "order": 404, "name": "jaimerocel96", "count": 3, "languages": 1 }, { - "order": 403, + "order": 405, "name": "sitnestic", "count": 3, "languages": 1 }, { - "order": 404, + "order": 406, "name": "matteozhao98", "count": 3, "languages": 1 }, { - "order": 405, + "order": 407, "name": "tebaah", "count": 3, "languages": 1 }, { - "order": 406, + "order": 408, "name": "sebasgrdev", "count": 3, "languages": 1 }, { - "order": 407, + "order": 409, "name": "14davidnkt", "count": 3, "languages": 1 }, { - "order": 408, + "order": 410, "name": "legs30011", "count": 3, "languages": 1 }, { - "order": 409, + "order": 411, "name": "dariorfm", "count": 3, "languages": 1 }, { - "order": 410, + "order": 412, "name": "orlas135", "count": 3, "languages": 1 }, { - "order": 411, + "order": 413, "name": "arbenisacosta", "count": 3, "languages": 1 }, { - "order": 412, + "order": 414, "name": "hectoriglesias", "count": 3, "languages": 1 }, { - "order": 413, + "order": 415, "name": "matrix-miguel", "count": 3, "languages": 1 }, { - "order": 414, + "order": 416, "name": "jacarrillob", "count": 3, "languages": 1 }, { - "order": 415, + "order": 417, "name": "jelozanov", "count": 3, "languages": 1 }, { - "order": 416, + "order": 418, "name": "andyfg0289", "count": 3, "languages": 1 }, { - "order": 417, + "order": 419, "name": "daniback95", "count": 3, "languages": 1 }, { - "order": 418, + "order": 420, "name": "r4kso", "count": 3, "languages": 1 }, { - "order": 419, + "order": 421, "name": "singularpigeon", "count": 3, "languages": 1 }, { - "order": 420, + "order": 422, "name": "sandracalatayud", "count": 3, "languages": 1 }, { - "order": 421, + "order": 423, "name": "andresargote", "count": 3, "languages": 1 }, { - "order": 422, + "order": 424, "name": "fernandog25", "count": 3, "languages": 1 }, { - "order": 423, + "order": 425, "name": "agusbelp", "count": 3, "languages": 1 }, { - "order": 424, + "order": 426, "name": "uyarra73", "count": 3, "languages": 1 }, { - "order": 425, + "order": 427, "name": "asaelz", "count": 3, "languages": 1 }, { - "order": 426, + "order": 428, "name": "davidb313", "count": 3, "languages": 1 }, { - "order": 427, + "order": 429, "name": "fdcorreadev", "count": 3, "languages": 1 }, { - "order": 428, + "order": 430, "name": "magupe09", "count": 3, "languages": 1 }, { - "order": 429, + "order": 431, "name": "nathaliamf", "count": 3, "languages": 1 }, { - "order": 430, + "order": 432, "name": "victorsschz", "count": 3, "languages": 1 }, { - "order": 431, + "order": 433, "name": "hatorob", "count": 3, "languages": 1 }, { - "order": 432, + "order": 434, "name": "zuluangel", "count": 3, "languages": 1 }, { - "order": 433, + "order": 435, "name": "matiascba27", "count": 3, "languages": 1 }, { - "order": 434, + "order": 436, "name": "faga01", "count": 3, "languages": 1 }, { - "order": 435, + "order": 437, "name": "ahinar", "count": 3, "languages": 1 }, { - "order": 436, + "order": 438, "name": "migueltfangche", "count": 3, "languages": 1 }, { - "order": 437, + "order": 439, "name": "josueeeee", "count": 3, "languages": 1 }, { - "order": 438, + "order": 440, "name": "emaenriquez", "count": 3, "languages": 1 }, { - "order": 439, + "order": 441, "name": "sebascmb", "count": 3, "languages": 1 }, { - "order": 440, + "order": 442, "name": "gpinedaoviedo", "count": 3, "languages": 1 }, { - "order": 441, + "order": 443, "name": "blfuentes", "count": 3, "languages": 1 }, { - "order": 442, + "order": 444, "name": "javiearth", "count": 3, "languages": 1 }, { - "order": 443, + "order": 445, "name": "atienzar", "count": 3, "languages": 1 }, { - "order": 444, + "order": 446, "name": "coshiloco", "count": 3, "languages": 1 }, { - "order": 445, + "order": 447, "name": "crisvigas", "count": 3, "languages": 1 }, { - "order": 446, + "order": 448, "name": "tomytsa", "count": 3, "languages": 1 }, { - "order": 447, + "order": 449, "name": "rocallejas", "count": 3, "languages": 1 }, { - "order": 448, + "order": 450, "name": "guido2288", "count": 3, "languages": 1 }, { - "order": 449, + "order": 451, "name": "githjuan", "count": 3, "languages": 1 }, { - "order": 450, + "order": 452, "name": "jeyker-dev", "count": 3, "languages": 1 }, { - "order": 451, + "order": 453, "name": "eliskopun", "count": 3, "languages": 1 }, { - "order": 452, + "order": 454, "name": "ramon-almeida", "count": 3, "languages": 1 }, { - "order": 453, + "order": 455, "name": "danielperezrubio", "count": 3, "languages": 1 }, { - "order": 454, + "order": 456, "name": "minn09", "count": 3, "languages": 1 }, { - "order": 455, + "order": 457, "name": "elkin-dev", "count": 3, "languages": 1 }, { - "order": 456, + "order": 458, "name": "bertolini-victor", "count": 3, "languages": 1 }, { - "order": 457, + "order": 459, "name": "jorgegarcia-dev", "count": 3, "languages": 1 }, { - "order": 458, + "order": 460, "name": "suescun845", "count": 3, "languages": 1 }, { - "order": 459, + "order": 461, "name": "carlosalberto05", "count": 3, "languages": 1 }, { - "order": 460, + "order": 462, "name": "mmacalli", "count": 3, "languages": 1 }, { - "order": 461, + "order": 463, "name": "mstaz4", "count": 3, "languages": 1 }, { - "order": 462, + "order": 464, "name": "emilianohoyos", "count": 3, "languages": 1 }, { - "order": 463, + "order": 465, "name": "rgeditv1", "count": 3, "languages": 1 }, { - "order": 464, + "order": 466, "name": "elder202", "count": 3, "languages": 1 }, { - "order": 465, + "order": 467, "name": "dandrusco", "count": 3, "languages": 1 }, { - "order": 466, + "order": 468, "name": "mizadlogcia", "count": 3, "languages": 1 }, { - "order": 467, + "order": 469, "name": "antii16", "count": 3, "languages": 1 }, { - "order": 468, + "order": 470, "name": "strooplab", "count": 3, "languages": 1 }, { - "order": 469, + "order": 471, "name": "marcoh2325", "count": 3, "languages": 1 }, { - "order": 470, + "order": 472, "name": "frostbitepy", "count": 3, "languages": 1 }, { - "order": 471, + "order": 473, "name": "zzepu", "count": 3, "languages": 1 }, { - "order": 472, + "order": 474, "name": "tekatoki", "count": 3, "languages": 1 }, { - "order": 473, + "order": 475, "name": "yeam-10", "count": 3, "languages": 1 }, { - "order": 474, + "order": 476, "name": "exanderguitar", "count": 3, "languages": 1 }, { - "order": 475, + "order": 477, "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { - "order": 476, + "order": 478, "name": "macova96", "count": 3, "languages": 1 }, { - "order": 477, + "order": 479, "name": "betzadev", "count": 3, "languages": 1 }, { - "order": 478, + "order": 480, "name": "monikgbar", "count": 3, "languages": 1 }, { - "order": 479, + "order": 481, "name": "guillesese", "count": 3, "languages": 1 }, { - "order": 480, + "order": 482, "name": "artdugarte", "count": 3, "languages": 1 }, { - "order": 481, + "order": 483, "name": "jofedev", "count": 3, "languages": 1 }, { - "order": 482, + "order": 484, "name": "oscarhub90", "count": 3, "languages": 1 }, { - "order": 483, + "order": 485, "name": "tonywarcode", "count": 3, "languages": 1 }, { - "order": 484, + "order": 486, "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { - "order": 485, + "order": 487, "name": "joandevpy", "count": 3, "languages": 1 }, { - "order": 486, + "order": 488, "name": "estelacode", "count": 3, "languages": 1 }, { - "order": 487, + "order": 489, "name": "xurxogz", "count": 3, "languages": 1 }, { - "order": 488, + "order": 490, "name": "freedainew", "count": 3, "languages": 1 }, { - "order": 489, + "order": 491, "name": "swifty0705", "count": 3, "languages": 1 }, { - "order": 490, + "order": 492, "name": "marce1084", "count": 3, "languages": 1 }, { - "order": 491, + "order": 493, "name": "rubioj17", "count": 3, "languages": 1 }, { - "order": 492, + "order": 494, "name": "kingsaul22", "count": 3, "languages": 1 }, { - "order": 493, + "order": 495, "name": "ainoaran", "count": 3, "languages": 1 }, { - "order": 494, + "order": 496, "name": "francofmv", "count": 3, "languages": 1 }, { - "order": 495, + "order": 497, "name": "davidsorroche", "count": 3, "languages": 1 }, { - "order": 496, + "order": 498, "name": "david-quinones", "count": 3, "languages": 1 }, { - "order": 497, + "order": 499, "name": "fluna29", "count": 3, "languages": 1 }, { - "order": 498, + "order": 500, "name": "natalinacn", "count": 3, "languages": 1 }, { - "order": 499, + "order": 501, "name": "kine-jdf", "count": 3, "languages": 1 }, { - "order": 500, + "order": 502, "name": "yaretzyrb", "count": 3, "languages": 1 }, { - "order": 501, + "order": 503, "name": "confley", "count": 3, "languages": 1 }, { - "order": 502, + "order": 504, "name": "beonzj", "count": 3, "languages": 1 }, { - "order": 503, + "order": 505, "name": "juxxon23", "count": 3, "languages": 1 }, { - "order": 504, + "order": 506, "name": "frangarmez21", "count": 3, "languages": 1 }, { - "order": 505, + "order": 507, "name": "ikeragi05", "count": 3, "languages": 1 }, { - "order": 506, + "order": 508, "name": "johnalexguerrero", "count": 3, "languages": 1 }, { - "order": 507, + "order": 509, "name": "devvdroid01", "count": 2, "languages": 2 }, { - "order": 508, - "name": "clotrack", - "count": 2, - "languages": 2 - }, - { - "order": 509, + "order": 510, "name": "sgb004", "count": 2, "languages": 2 }, { - "order": 510, + "order": 511, "name": "chuanmi", "count": 2, "languages": 2 }, { - "order": 511, + "order": 512, "name": "jlcareglio", "count": 2, "languages": 2 }, { - "order": 512, + "order": 513, "name": "jurgen-alfaro", "count": 2, "languages": 2 }, { - "order": 513, + "order": 514, "name": "lydaf", "count": 2, "languages": 2 }, { - "order": 514, + "order": 515, "name": "carresoft", "count": 2, "languages": 2 }, { - "order": 515, + "order": 516, "name": "ismaelmatiz", "count": 2, "languages": 2 }, { - "order": 516, + "order": 517, "name": "tecfer", "count": 2, "languages": 2 }, { - "order": 517, + "order": 518, "name": "elsanty08", "count": 2, "languages": 2 }, { - "order": 518, + "order": 519, "name": "jorgesilencio", "count": 2, "languages": 2 }, { - "order": 519, + "order": 520, "name": "berentolkien", "count": 2, "languages": 2 }, { - "order": 520, + "order": 521, "name": "felipedev303", "count": 2, "languages": 2 }, { - "order": 521, + "order": 522, "name": "lemito66", "count": 2, "languages": 2 }, { - "order": 522, + "order": 523, "name": "alexsamboy", "count": 2, "languages": 2 }, { - "order": 523, + "order": 524, "name": "enrgarvic", "count": 2, "languages": 2 }, { - "order": 524, + "order": 525, "name": "jovany-java", "count": 2, "languages": 2 }, { - "order": 525, + "order": 526, "name": "raul-progr", "count": 2, "languages": 2 }, { - "order": 526, + "order": 527, "name": "jmofuture", "count": 2, "languages": 2 }, { - "order": 527, + "order": 528, "name": "angel-alvarez-dev", "count": 2, "languages": 2 }, { - "order": 528, + "order": 529, "name": "lilberick", "count": 2, "languages": 2 }, { - "order": 529, + "order": 530, "name": "camiloforero1997", "count": 2, "languages": 2 }, { - "order": 530, + "order": 531, "name": "alejosor", "count": 2, "languages": 2 }, { - "order": 531, + "order": 532, "name": "juan-wills", "count": 2, "languages": 2 }, { - "order": 532, + "order": 533, "name": "lurtur", "count": 2, "languages": 2 }, { - "order": 533, + "order": 534, "name": "jhonatanmustiolacas", "count": 2, "languages": 2 }, - { - "order": 534, - "name": "elmarqueli", - "count": 2, - "languages": 1 - }, { "order": 535, - "name": "tiaguiito3", + "name": "elmarqueli", "count": 2, "languages": 1 }, { "order": 536, - "name": "angelargumedo", + "name": "tiaguiito3", "count": 2, "languages": 1 }, { "order": 537, - "name": "reaien", + "name": "angelargumedo", "count": 2, "languages": 1 }, { "order": 538, - "name": "rikar20", + "name": "reaien", "count": 2, "languages": 1 }, { "order": 539, - "name": "vdroiid", + "name": "rikar20", "count": 2, "languages": 1 }, { "order": 540, - "name": "frannmv", + "name": "vdroiid", "count": 2, "languages": 1 }, { "order": 541, - "name": "rrcoder", + "name": "frannmv", "count": 2, "languages": 1 }, { "order": 542, - "name": "diegosilval", + "name": "rrcoder", "count": 2, "languages": 1 }, { "order": 543, - "name": "nandaalf", + "name": "diegosilval", "count": 2, "languages": 1 }, { "order": 544, - "name": "hawkbott", + "name": "nandaalf", "count": 2, "languages": 1 }, { "order": 545, - "name": "tomasmarquez81", + "name": "hawkbott", "count": 2, "languages": 1 }, { "order": 546, - "name": "poetry0354", + "name": "tomasmarquez81", "count": 2, "languages": 1 }, { "order": 547, - "name": "santiagocuevas2003", + "name": "poetry0354", "count": 2, "languages": 1 }, { "order": 548, - "name": "lmedina96", + "name": "santiagocuevas2003", "count": 2, "languages": 1 }, { "order": 549, - "name": "lorenamesa", + "name": "lmedina96", "count": 2, "languages": 1 }, { "order": 550, - "name": "raulallue", + "name": "lorenamesa", "count": 2, "languages": 1 }, { "order": 551, - "name": "luciarf", + "name": "raulallue", "count": 2, "languages": 1 }, { "order": 552, - "name": "aserranot", + "name": "luciarf", "count": 2, "languages": 1 }, { "order": 553, - "name": "devcherry1", + "name": "aserranot", "count": 2, "languages": 1 }, { "order": 554, - "name": "yowcloud", + "name": "devcherry1", "count": 2, "languages": 1 }, { "order": 555, - "name": "fefestuve", + "name": "yowcloud", "count": 2, "languages": 1 }, { "order": 556, - "name": "fsfigueroa77", + "name": "fefestuve", "count": 2, "languages": 1 }, { "order": 557, - "name": "nahuelborromeo", + "name": "fsfigueroa77", "count": 2, "languages": 1 }, { "order": 558, - "name": "peibolstrike", + "name": "nahuelborromeo", "count": 2, "languages": 1 }, { "order": 559, - "name": "drvito1977", + "name": "peibolstrike", "count": 2, "languages": 1 }, @@ -4113,3279 +4118,3321 @@ }, { "order": 606, - "name": "davhage", + "name": "duendeintemporal", "count": 2, "languages": 1 }, { "order": 607, - "name": "erikayeah", + "name": "davhage", "count": 2, "languages": 1 }, { "order": 608, - "name": "misterdan100", + "name": "erikayeah", "count": 2, "languages": 1 }, { "order": 609, - "name": "memogv", + "name": "misterdan100", "count": 2, "languages": 1 }, { "order": 610, - "name": "glaboryp", + "name": "memogv", "count": 2, "languages": 1 }, { "order": 611, - "name": "ovjohn", + "name": "glaboryp", "count": 2, "languages": 1 }, { "order": 612, - "name": "haryblanco20", + "name": "ovjohn", "count": 2, "languages": 1 }, { "order": 613, - "name": "christianhernandezb", + "name": "haryblanco20", "count": 2, "languages": 1 }, { "order": 614, - "name": "akzorla", + "name": "christianhernandezb", "count": 2, "languages": 1 }, { "order": 615, - "name": "0pio", + "name": "akzorla", "count": 2, "languages": 1 }, { "order": 616, - "name": "porto1090", + "name": "0pio", "count": 2, "languages": 1 }, { "order": 617, - "name": "johannhsdev", + "name": "porto1090", "count": 2, "languages": 1 }, { "order": 618, - "name": "jago86", + "name": "johannhsdev", "count": 2, "languages": 1 }, { "order": 619, - "name": "diegokarabin", + "name": "jago86", "count": 2, "languages": 1 }, { "order": 620, - "name": "gugliio", + "name": "diegokarabin", "count": 2, "languages": 1 }, { "order": 621, - "name": "kcx46", + "name": "gugliio", "count": 2, "languages": 1 }, { "order": 622, - "name": "nachodev7", + "name": "kcx46", "count": 2, "languages": 1 }, { "order": 623, - "name": "fernandoatello", + "name": "nachodev7", "count": 2, "languages": 1 }, { "order": 624, - "name": "pablosalme", + "name": "fernandoatello", "count": 2, "languages": 1 }, { "order": 625, - "name": "jsacristanbeltri", + "name": "pablosalme", "count": 2, "languages": 1 }, { "order": 626, - "name": "baauus", + "name": "jsacristanbeltri", "count": 2, "languages": 1 }, { "order": 627, - "name": "s384", + "name": "baauus", "count": 2, "languages": 1 }, { "order": 628, - "name": "lauradiazm29", + "name": "s384", "count": 2, "languages": 1 }, { "order": 629, - "name": "pakomor", + "name": "lauradiazm29", "count": 2, "languages": 1 }, { "order": 630, - "name": "adogdev", + "name": "pakomor", "count": 2, "languages": 1 }, { "order": 631, - "name": "eriickm", + "name": "adogdev", "count": 2, "languages": 1 }, { "order": 632, - "name": "christiancoc", + "name": "eriickm", "count": 2, "languages": 1 }, { "order": 633, - "name": "rojasricoo", + "name": "christiancoc", "count": 2, "languages": 1 }, { "order": 634, - "name": "inf015", + "name": "rojasricoo", "count": 2, "languages": 1 }, { "order": 635, - "name": "csaraugusto2", + "name": "inf015", "count": 2, "languages": 1 }, { "order": 636, - "name": "zalazarmartin", + "name": "csaraugusto2", "count": 2, "languages": 1 }, { "order": 637, - "name": "ziellucio01", + "name": "zalazarmartin", "count": 2, "languages": 1 }, { "order": 638, - "name": "dota43ver", + "name": "ziellucio01", "count": 2, "languages": 1 }, { "order": 639, - "name": "fjsubero", + "name": "dota43ver", "count": 2, "languages": 1 }, { "order": 640, - "name": "julind0", + "name": "fjsubero", "count": 2, "languages": 1 }, { "order": 641, - "name": "dariangl", + "name": "julind0", "count": 2, "languages": 1 }, { "order": 642, - "name": "ggtorca", + "name": "jmontoyac", "count": 2, "languages": 1 }, { "order": 643, - "name": "soydaviddev", + "name": "dariangl", "count": 2, "languages": 1 }, { "order": 644, - "name": "e-techgod", + "name": "ggtorca", "count": 2, "languages": 1 }, { "order": 645, - "name": "aboredllama", + "name": "soydaviddev", "count": 2, "languages": 1 }, { "order": 646, - "name": "nevaito", + "name": "e-techgod", "count": 2, "languages": 1 }, { "order": 647, - "name": "nach012", + "name": "aboredllama", "count": 2, "languages": 1 }, { "order": 648, - "name": "dans182", + "name": "nevaito", "count": 2, "languages": 1 }, { "order": 649, - "name": "freyfonseca", + "name": "nach012", "count": 2, "languages": 1 }, { "order": 650, - "name": "aegpgrafologo", + "name": "dans182", "count": 2, "languages": 1 }, { "order": 651, - "name": "alejandrovelasquezr", + "name": "freyfonseca", "count": 2, "languages": 1 }, { "order": 652, - "name": "fabianpa505", + "name": "aegpgrafologo", "count": 2, "languages": 1 }, { "order": 653, - "name": "carlosmarte23", + "name": "alejandrovelasquezr", "count": 2, "languages": 1 }, { "order": 654, - "name": "anblackter", + "name": "fabianpa505", "count": 2, "languages": 1 }, { "order": 655, + "name": "carlosmarte23", + "count": 2, + "languages": 1 + }, + { + "order": 656, + "name": "anblackter", + "count": 2, + "languages": 1 + }, + { + "order": 657, "name": "tic4", "count": 2, "languages": 1 }, { - "order": 656, + "order": 658, "name": "josephfaster", "count": 2, "languages": 1 }, { - "order": 657, + "order": 659, "name": "gregfc95", "count": 2, "languages": 1 }, { - "order": 658, + "order": 660, "name": "victore16", "count": 2, "languages": 1 }, { - "order": 659, + "order": 661, "name": "dokeys28", "count": 2, "languages": 1 }, { - "order": 660, + "order": 662, "name": "noaregui", "count": 2, "languages": 1 }, { - "order": 661, + "order": 663, "name": "alejandro-mantilla", "count": 2, "languages": 1 }, { - "order": 662, + "order": 664, "name": "gmigues", "count": 2, "languages": 1 }, { - "order": 663, + "order": 665, "name": "juanseevn", "count": 2, "languages": 1 }, { - "order": 664, + "order": 666, "name": "vesubius", "count": 2, "languages": 1 }, { - "order": 665, + "order": 667, "name": "zeti1231", "count": 2, "languages": 1 }, { - "order": 666, + "order": 668, "name": "cipollalucas", "count": 2, "languages": 1 }, { - "order": 667, + "order": 669, "name": "miguelberrio0810", "count": 2, "languages": 1 }, { - "order": 668, + "order": 670, "name": "santiagodc8", "count": 2, "languages": 1 }, { - "order": 669, + "order": 671, "name": "pedrojog", "count": 2, "languages": 1 }, { - "order": 670, + "order": 672, "name": "culebropalido", "count": 2, "languages": 1 }, { - "order": 671, + "order": 673, "name": "marioyellowy", "count": 2, "languages": 1 }, { - "order": 672, + "order": 674, "name": "jcknot", "count": 2, "languages": 1 }, { - "order": 673, + "order": 675, "name": "peeanoot", "count": 2, "languages": 1 }, { - "order": 674, + "order": 676, "name": "coronelsam", "count": 2, "languages": 1 }, { - "order": 675, + "order": 677, "name": "arhl2023", "count": 2, "languages": 1 }, { - "order": 676, + "order": 678, "name": "marianoemir", "count": 2, "languages": 1 }, { - "order": 677, + "order": 679, "name": "isidrojng", "count": 2, "languages": 1 }, { - "order": 678, + "order": 680, "name": "anaroncero", "count": 2, "languages": 1 }, { - "order": 679, + "order": 681, "name": "hersac", "count": 2, "languages": 1 }, { - "order": 680, + "order": 682, "name": "vecinacoo", "count": 2, "languages": 1 }, { - "order": 681, + "order": 683, "name": "juanmjimenezs", "count": 2, "languages": 1 }, { - "order": 682, + "order": 684, "name": "armentaangel", "count": 2, "languages": 1 }, { - "order": 683, + "order": 685, "name": "lordzzz777", "count": 2, "languages": 1 }, { - "order": 684, + "order": 686, "name": "sdm29gh", "count": 2, "languages": 1 }, { - "order": 685, + "order": 687, "name": "zonnen69", "count": 2, "languages": 1 }, { - "order": 686, + "order": 688, "name": "jmichael39", "count": 2, "languages": 1 }, { - "order": 687, + "order": 689, "name": "davidvilem", "count": 2, "languages": 1 }, { - "order": 688, + "order": 690, + "name": "mantaras96", + "count": 2, + "languages": 1 + }, + { + "order": 691, "name": "torvicv", "count": 1, "languages": 1 }, { - "order": 689, + "order": 692, "name": "dgquintero", "count": 1, "languages": 1 }, { - "order": 690, + "order": 693, "name": "c-blskv", "count": 1, "languages": 1 }, { - "order": 691, + "order": 694, "name": "emaerniquez", "count": 1, "languages": 1 }, { - "order": 692, + "order": 695, "name": "carolhs92", "count": 1, "languages": 1 }, { - "order": 693, + "order": 696, "name": "leonardo-henao", "count": 1, "languages": 1 }, { - "order": 694, + "order": 697, "name": "juancamilofvx", "count": 1, "languages": 1 }, { - "order": 695, + "order": 698, "name": "vikernes27666", "count": 1, "languages": 1 }, { - "order": 696, + "order": 699, "name": "cub-tor", "count": 1, "languages": 1 }, { - "order": 697, + "order": 700, "name": "nightmare79", "count": 1, "languages": 1 }, { - "order": 698, + "order": 701, "name": "carlosmperezm", "count": 1, "languages": 1 }, { - "order": 699, + "order": 702, "name": "gonzalinuz18", "count": 1, "languages": 1 }, { - "order": 700, + "order": 703, "name": "qwik-zghieb", "count": 1, "languages": 1 }, { - "order": 701, + "order": 704, "name": "miquelrr", "count": 1, "languages": 1 }, { - "order": 702, + "order": 705, "name": "miguel2rar", "count": 1, "languages": 1 }, { - "order": 703, + "order": 706, "name": "eamartin", "count": 1, "languages": 1 }, { - "order": 704, + "order": 707, "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { - "order": 705, + "order": 708, "name": "agustinfccll", "count": 1, "languages": 1 }, { - "order": 706, + "order": 709, "name": "anitandil", "count": 1, "languages": 1 }, { - "order": 707, + "order": 710, "name": "evilpodato04", "count": 1, "languages": 1 }, { - "order": 708, + "order": 711, "name": "francomyburg", "count": 1, "languages": 1 }, { - "order": 709, + "order": 712, "name": "neicervb", "count": 1, "languages": 1 }, { - "order": 710, + "order": 713, "name": "josephinoo", "count": 1, "languages": 1 }, { - "order": 711, + "order": 714, "name": "arathhh8", "count": 1, "languages": 1 }, { - "order": 712, + "order": 715, "name": "paluzz", "count": 1, "languages": 1 }, { - "order": 713, + "order": 716, "name": "theposi", "count": 1, "languages": 1 }, { - "order": 714, + "order": 717, "name": "vinyoles", "count": 1, "languages": 1 }, { - "order": 715, + "order": 718, "name": "omarroman29", "count": 1, "languages": 1 }, { - "order": 716, + "order": 719, + "name": "1cel4nc3", + "count": 1, + "languages": 1 + }, + { + "order": 720, "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { - "order": 717, + "order": 721, "name": "corvo-99", "count": 1, "languages": 1 }, { - "order": 718, + "order": 722, "name": "danielcastillo1112", "count": 1, "languages": 1 }, { - "order": 719, + "order": 723, "name": "malkarmah", "count": 1, "languages": 1 }, { - "order": 720, + "order": 724, "name": "sirvega83", "count": 1, "languages": 1 }, { - "order": 721, + "order": 725, "name": "franpua", "count": 1, "languages": 1 }, { - "order": 722, + "order": 726, "name": "van-02", "count": 1, "languages": 1 }, { - "order": 723, + "order": 727, "name": "x3mboy", "count": 1, "languages": 1 }, { - "order": 724, + "order": 728, "name": "mickysoft", "count": 1, "languages": 1 }, { - "order": 725, + "order": 729, "name": "deimoshall", "count": 1, "languages": 1 }, { - "order": 726, + "order": 730, "name": "palons29", "count": 1, "languages": 1 }, { - "order": 727, + "order": 731, "name": "serg032", "count": 1, "languages": 1 }, { - "order": 728, + "order": 732, "name": "seigigim", "count": 1, "languages": 1 }, { - "order": 729, + "order": 733, "name": "cibacoa", "count": 1, "languages": 1 }, { - "order": 730, + "order": 734, "name": "axelwestman", "count": 1, "languages": 1 }, { - "order": 731, + "order": 735, "name": "javodevon", "count": 1, "languages": 1 }, { - "order": 732, + "order": 736, "name": "mauricioyair", "count": 1, "languages": 1 }, { - "order": 733, + "order": 737, "name": "manuhssj", "count": 1, "languages": 1 }, { - "order": 734, + "order": 738, "name": "coletonosh", "count": 1, "languages": 1 }, { - "order": 735, + "order": 739, "name": "manugonzalito", "count": 1, "languages": 1 }, { - "order": 736, + "order": 740, "name": "gizelads", "count": 1, "languages": 1 }, { - "order": 737, + "order": 741, "name": "lucc4sz", "count": 1, "languages": 1 }, { - "order": 738, + "order": 742, "name": "feliaguirre7", "count": 1, "languages": 1 }, { - "order": 739, + "order": 743, "name": "rulo77", "count": 1, "languages": 1 }, { - "order": 740, + "order": 744, "name": "is2095", "count": 1, "languages": 1 }, { - "order": 741, + "order": 745, "name": "jancalos", "count": 1, "languages": 1 }, { - "order": 742, + "order": 746, "name": "marcosapodaca", "count": 1, "languages": 1 }, { - "order": 743, + "order": 747, "name": "angelcruzg23", "count": 1, "languages": 1 }, { - "order": 744, + "order": 748, "name": "ca2puntosv", "count": 1, "languages": 1 }, { - "order": 745, + "order": 749, "name": "armm77", "count": 1, "languages": 1 }, { - "order": 746, + "order": 750, "name": "afacorroloscos", "count": 1, "languages": 1 }, { - "order": 747, + "order": 751, "name": "rocadev2714", "count": 1, "languages": 1 }, { - "order": 748, + "order": 752, "name": "chrisfelixgil", "count": 1, "languages": 1 }, { - "order": 749, + "order": 753, "name": "sandrarg85", "count": 1, "languages": 1 }, { - "order": 750, + "order": 754, "name": "rootqui", "count": 1, "languages": 1 }, { - "order": 751, + "order": 755, "name": "ishimaku", "count": 1, "languages": 1 }, { - "order": 752, + "order": 756, "name": "pkmaventura", "count": 1, "languages": 1 }, { - "order": 753, + "order": 757, "name": "miguelgargallo", "count": 1, "languages": 1 }, { - "order": 754, + "order": 758, "name": "astriebeck", "count": 1, "languages": 1 }, { - "order": 755, + "order": 759, "name": "lobogeekmx", "count": 1, "languages": 1 }, { - "order": 756, + "order": 760, "name": "marvinagui", "count": 1, "languages": 1 }, { - "order": 757, + "order": 761, "name": "marqitos", "count": 1, "languages": 1 }, { - "order": 758, + "order": 762, "name": "nunezlagos", "count": 1, "languages": 1 }, { - "order": 759, + "order": 763, "name": "jcrobles99", "count": 1, "languages": 1 }, { - "order": 760, + "order": 764, "name": "ledyam", "count": 1, "languages": 1 }, { - "order": 761, + "order": 765, "name": "jatomas", "count": 1, "languages": 1 }, { - "order": 762, + "order": 766, "name": "jaennova", "count": 1, "languages": 1 }, { - "order": 763, + "order": 767, "name": "luisalberto22", "count": 1, "languages": 1 }, { - "order": 764, + "order": 768, "name": "francisleble", "count": 1, "languages": 1 }, { - "order": 765, + "order": 769, "name": "deiiviitdev", "count": 1, "languages": 1 }, { - "order": 766, + "order": 770, "name": "braiso-22", "count": 1, "languages": 1 }, { - "order": 767, + "order": 771, "name": "daniel-cas", "count": 1, "languages": 1 }, { - "order": 768, + "order": 772, "name": "acirdevelper", "count": 1, "languages": 1 }, { - "order": 769, + "order": 773, "name": "borjadelgadodev", "count": 1, "languages": 1 }, { - "order": 770, + "order": 774, "name": "elpeque29", "count": 1, "languages": 1 }, { - "order": 771, + "order": 775, "name": "jhordanluyo", "count": 1, "languages": 1 }, { - "order": 772, + "order": 776, "name": "davidcv-dev", "count": 1, "languages": 1 }, { - "order": 773, + "order": 777, "name": "mbmaeso", "count": 1, "languages": 1 }, { - "order": 774, + "order": 778, "name": "alvarominarro", "count": 1, "languages": 1 }, { - "order": 775, + "order": 779, "name": "bjchavez", "count": 1, "languages": 1 }, { - "order": 776, + "order": 780, "name": "madelefonb", "count": 1, "languages": 1 }, { - "order": 777, + "order": 781, "name": "lfwzk", "count": 1, "languages": 1 }, { - "order": 778, + "order": 782, "name": "ercky1980", "count": 1, "languages": 1 }, { - "order": 779, + "order": 783, "name": "jsruedatorres", "count": 1, "languages": 1 }, { - "order": 780, + "order": 784, "name": "jacobrwx", "count": 1, "languages": 1 }, { - "order": 781, + "order": 785, "name": "abengl", "count": 1, "languages": 1 }, { - "order": 782, + "order": 786, "name": "jd-gm", "count": 1, "languages": 1 }, { - "order": 783, + "order": 787, "name": "lucianogriffa", "count": 1, "languages": 1 }, { - "order": 784, + "order": 788, "name": "quirogapau", "count": 1, "languages": 1 }, { - "order": 785, + "order": 789, "name": "joseperesini", "count": 1, "languages": 1 }, { - "order": 786, + "order": 790, "name": "mhrosariom", "count": 1, "languages": 1 }, { - "order": 787, + "order": 791, "name": "sergioab7", "count": 1, "languages": 1 }, { - "order": 788, + "order": 792, "name": "santaravena", "count": 1, "languages": 1 }, { - "order": 789, + "order": 793, "name": "datrujillog", "count": 1, "languages": 1 }, { - "order": 790, + "order": 794, "name": "johnniew81", "count": 1, "languages": 1 }, { - "order": 791, + "order": 795, "name": "chriszaldana", "count": 1, "languages": 1 }, { - "order": 792, + "order": 796, "name": "antonioverdugo", "count": 1, "languages": 1 }, { - "order": 793, + "order": 797, "name": "kronomio", "count": 1, "languages": 1 }, { - "order": 794, + "order": 798, "name": "kevinramirez28", "count": 1, "languages": 1 }, { - "order": 795, + "order": 799, "name": "juanpablo-a", "count": 1, "languages": 1 }, { - "order": 796, + "order": 800, "name": "gerespinosa", "count": 1, "languages": 1 }, { - "order": 797, + "order": 801, "name": "1978acb", "count": 1, "languages": 1 }, { - "order": 798, + "order": 802, "name": "alexxawada", "count": 1, "languages": 1 }, { - "order": 799, + "order": 803, "name": "ricarsur", "count": 1, "languages": 1 }, { - "order": 800, + "order": 804, "name": "alemar16", "count": 1, "languages": 1 }, { - "order": 801, + "order": 805, "name": "pointfs", "count": 1, "languages": 1 }, { - "order": 802, + "order": 806, "name": "edperez07", "count": 1, "languages": 1 }, { - "order": 803, + "order": 807, "name": "dacronik", "count": 1, "languages": 1 }, { - "order": 804, + "order": 808, "name": "abraham9804", "count": 1, "languages": 1 }, { - "order": 805, + "order": 809, "name": "afl0r3s", "count": 1, "languages": 1 }, { - "order": 806, + "order": 810, "name": "dianelis1", "count": 1, "languages": 1 }, { - "order": 807, + "order": 811, "name": "fernandofl", "count": 1, "languages": 1 }, { - "order": 808, + "order": 812, "name": "conrado85", "count": 1, "languages": 1 }, { - "order": 809, + "order": 813, "name": "agus-ig", "count": 1, "languages": 1 }, { - "order": 810, + "order": 814, "name": "alvarommedia", "count": 1, "languages": 1 }, { - "order": 811, + "order": 815, "name": "maximotoro", "count": 1, "languages": 1 }, { - "order": 812, + "order": 816, "name": "m4xisil", "count": 1, "languages": 1 }, { - "order": 813, + "order": 817, "name": "francomoreira", "count": 1, "languages": 1 }, { - "order": 814, + "order": 818, "name": "aleclto7", "count": 1, "languages": 1 }, { - "order": 815, + "order": 819, "name": "nnunezmedina", "count": 1, "languages": 1 }, { - "order": 816, + "order": 820, "name": "codejoss", "count": 1, "languages": 1 }, { - "order": 817, + "order": 821, "name": "yaojema", "count": 1, "languages": 1 }, { - "order": 818, + "order": 822, "name": "romanocoder", "count": 1, "languages": 1 }, { - "order": 819, + "order": 823, "name": "sixtodev", "count": 1, "languages": 1 }, { - "order": 820, + "order": 824, "name": "cgomezadolfo", "count": 1, "languages": 1 }, { - "order": 821, + "order": 825, "name": "rojasvargas", "count": 1, "languages": 1 }, { - "order": 822, + "order": 826, "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { - "order": 823, + "order": 827, "name": "l3v1xx", "count": 1, "languages": 1 }, { - "order": 824, + "order": 828, "name": "patricioguerra30", "count": 1, "languages": 1 }, { - "order": 825, + "order": 829, "name": "lytsar", "count": 1, "languages": 1 }, { - "order": 826, + "order": 830, "name": "siuldev", "count": 1, "languages": 1 }, { - "order": 827, + "order": 831, "name": "brayancordova1", "count": 1, "languages": 1 }, { - "order": 828, + "order": 832, "name": "ronnieruuz", "count": 1, "languages": 1 }, { - "order": 829, + "order": 833, "name": "yessikamichelle", "count": 1, "languages": 1 }, { - "order": 830, + "order": 834, "name": "vainsito1", "count": 1, "languages": 1 }, { - "order": 831, + "order": 835, "name": "oscarletelier", "count": 1, "languages": 1 }, { - "order": 832, + "order": 836, "name": "kocho03", "count": 1, "languages": 1 }, { - "order": 833, + "order": 837, "name": "aidicoop", "count": 1, "languages": 1 }, { - "order": 834, + "order": 838, "name": "albabp", "count": 1, "languages": 1 }, { - "order": 835, + "order": 839, "name": "nozodev", "count": 1, "languages": 1 }, { - "order": 836, + "order": 840, "name": "mvillegas18", "count": 1, "languages": 1 }, { - "order": 837, + "order": 841, "name": "augustbs", "count": 1, "languages": 1 }, { - "order": 838, + "order": 842, "name": "luchof5", "count": 1, "languages": 1 }, { - "order": 839, + "order": 843, "name": "fullstackarlo", "count": 1, "languages": 1 }, { - "order": 840, + "order": 844, "name": "mdemena", "count": 1, "languages": 1 }, { - "order": 841, + "order": 845, "name": "cliverjimny123", "count": 1, "languages": 1 }, { - "order": 842, + "order": 846, "name": "rodmiggithub", "count": 1, "languages": 1 }, { - "order": 843, + "order": 847, "name": "s9code", "count": 1, "languages": 1 }, { - "order": 844, + "order": 848, "name": "javieradev", "count": 1, "languages": 1 }, { - "order": 845, + "order": 849, "name": "xnomada", "count": 1, "languages": 1 }, { - "order": 846, + "order": 850, "name": "miguelsarm", "count": 1, "languages": 1 }, { - "order": 847, + "order": 851, "name": "royhuamanavila", "count": 1, "languages": 1 }, { - "order": 848, + "order": 852, "name": "imista", "count": 1, "languages": 1 }, { - "order": 849, + "order": 853, "name": "denisortega", "count": 1, "languages": 1 }, { - "order": 850, + "order": 854, "name": "kouski", "count": 1, "languages": 1 }, { - "order": 851, + "order": 855, "name": "leydimadrid", "count": 1, "languages": 1 }, { - "order": 852, + "order": 856, "name": "frannm29", "count": 1, "languages": 1 }, { - "order": 853, + "order": 857, "name": "saintsluis", "count": 1, "languages": 1 }, { - "order": 854, + "order": 858, "name": "gc796", "count": 1, "languages": 1 }, { - "order": 855, + "order": 859, "name": "pierre-ol", "count": 1, "languages": 1 }, { - "order": 856, + "order": 860, "name": "francescoalterio", "count": 1, "languages": 1 }, { - "order": 857, + "order": 861, "name": "gustavoguerrero", "count": 1, "languages": 1 }, { - "order": 858, + "order": 862, "name": "diegoxxd", "count": 1, "languages": 1 }, { - "order": 859, + "order": 863, "name": "walkerlyna", "count": 1, "languages": 1 }, { - "order": 860, - "name": "sejotaz", + "order": 864, + "name": "erysnell", "count": 1, "languages": 1 }, { - "order": 861, - "name": "duendeintemporal", + "order": 865, + "name": "sejotaz", "count": 1, "languages": 1 }, { - "order": 862, + "order": 866, "name": "frcan89", "count": 1, "languages": 1 }, { - "order": 863, + "order": 867, "name": "nicorey89", "count": 1, "languages": 1 }, { - "order": 864, + "order": 868, "name": "alexis0717", "count": 1, "languages": 1 }, { - "order": 865, + "order": 869, "name": "edgonzz", "count": 1, "languages": 1 }, { - "order": 866, + "order": 870, "name": "vmga09", "count": 1, "languages": 1 }, { - "order": 867, + "order": 871, "name": "lfam200", "count": 1, "languages": 1 }, { - "order": 868, + "order": 872, "name": "kenzambrano", "count": 1, "languages": 1 }, { - "order": 869, + "order": 873, "name": "dmhenaopa", "count": 1, "languages": 1 }, { - "order": 870, + "order": 874, "name": "jpiacaruso", "count": 1, "languages": 1 }, { - "order": 871, + "order": 875, "name": "isnatthy", "count": 1, "languages": 1 }, { - "order": 872, + "order": 876, "name": "peticas", "count": 1, "languages": 1 }, { - "order": 873, + "order": 877, "name": "flarien", "count": 1, "languages": 1 }, { - "order": 874, + "order": 878, "name": "franciscokarriere", "count": 1, "languages": 1 }, { - "order": 875, + "order": 879, "name": "pipeyz21", "count": 1, "languages": 1 }, { - "order": 876, + "order": 880, "name": "luisgarm", "count": 1, "languages": 1 }, { - "order": 877, + "order": 881, "name": "tetotille", "count": 1, "languages": 1 }, { - "order": 878, + "order": 882, "name": "vorosdev", "count": 1, "languages": 1 }, { - "order": 879, + "order": 883, "name": "santiagomac", "count": 1, "languages": 1 }, { - "order": 880, + "order": 884, "name": "implevacui", "count": 1, "languages": 1 }, { - "order": 881, + "order": 885, "name": "fede6299", "count": 1, "languages": 1 }, { - "order": 882, + "order": 886, "name": "kevin05m", "count": 1, "languages": 1 }, { - "order": 883, + "order": 887, "name": "diegomm27", "count": 1, "languages": 1 }, { - "order": 884, + "order": 888, "name": "pablo-lnx", "count": 1, "languages": 1 }, { - "order": 885, + "order": 889, "name": "darkohokage", "count": 1, "languages": 1 }, { - "order": 886, + "order": 890, "name": "jhonnfl", "count": 1, "languages": 1 }, { - "order": 887, + "order": 891, "name": "jarzatedev", "count": 1, "languages": 1 }, { - "order": 888, + "order": 892, "name": "brunom-93", "count": 1, "languages": 1 }, { - "order": 889, + "order": 893, "name": "alejandroruiz23", "count": 1, "languages": 1 }, { - "order": 890, + "order": 894, "name": "trollface77", "count": 1, "languages": 1 }, { - "order": 891, + "order": 895, "name": "jaimesoftdev", "count": 1, "languages": 1 }, { - "order": 892, + "order": 896, "name": "edm1ya", "count": 1, "languages": 1 }, { - "order": 893, + "order": 897, "name": "tartabullroberto", "count": 1, "languages": 1 }, { - "order": 894, + "order": 898, "name": "serg-pq", "count": 1, "languages": 1 }, { - "order": 895, + "order": 899, "name": "lara-vel-dev", "count": 1, "languages": 1 }, { - "order": 896, + "order": 900, "name": "alexisbarradev", "count": 1, "languages": 1 }, { - "order": 897, + "order": 901, "name": "kelvincb", "count": 1, "languages": 1 }, { - "order": 898, + "order": 902, "name": "carlostoledoe", "count": 1, "languages": 1 }, { - "order": 899, + "order": 903, "name": "gilbertho502", "count": 1, "languages": 1 }, { - "order": 900, + "order": 904, "name": "v0l0v", "count": 1, "languages": 1 }, { - "order": 901, + "order": 905, "name": "johao23", "count": 1, "languages": 1 }, { - "order": 902, + "order": 906, "name": "geridage", "count": 1, "languages": 1 }, { - "order": 903, + "order": 907, "name": "vmarialuzm", "count": 1, "languages": 1 }, { - "order": 904, + "order": 908, "name": "snowcardenas", "count": 1, "languages": 1 }, { - "order": 905, + "order": 909, "name": "and-y21", "count": 1, "languages": 1 }, { - "order": 906, + "order": 910, "name": "arturodlapaz17", "count": 1, "languages": 1 }, { - "order": 907, + "order": 911, "name": "manuu42", "count": 1, "languages": 1 }, { - "order": 908, + "order": 912, "name": "howlett9999", "count": 1, "languages": 1 }, { - "order": 909, + "order": 913, + "name": "dkp-dev", + "count": 1, + "languages": 1 + }, + { + "order": 914, "name": "hnaranjog", "count": 1, "languages": 1 }, { - "order": 910, + "order": 915, "name": "wallsified", "count": 1, "languages": 1 }, { - "order": 911, + "order": 916, "name": "lluistech", "count": 1, "languages": 1 }, { - "order": 912, + "order": 917, "name": "mamartinez14", "count": 1, "languages": 1 }, { - "order": 913, + "order": 918, "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { - "order": 914, + "order": 919, "name": "bassalex27", "count": 1, "languages": 1 }, { - "order": 915, + "order": 920, "name": "yetlanezils", "count": 1, "languages": 1 }, { - "order": 916, + "order": 921, "name": "ndepaul82", "count": 1, "languages": 1 }, { - "order": 917, + "order": 922, "name": "amitchellg", "count": 1, "languages": 1 }, { - "order": 918, + "order": 923, "name": "turudev1979", "count": 1, "languages": 1 }, { - "order": 919, + "order": 924, "name": "deivimiller", "count": 1, "languages": 1 }, { - "order": 920, + "order": 925, "name": "haroldalb", "count": 1, "languages": 1 }, { - "order": 921, + "order": 926, "name": "dakkaj", "count": 1, "languages": 1 }, { - "order": 922, + "order": 927, + "name": "jheisonquiroga", + "count": 1, + "languages": 1 + }, + { + "order": 928, "name": "juli-m4", "count": 1, "languages": 1 }, { - "order": 923, + "order": 929, "name": "sergiomhernandez", "count": 1, "languages": 1 }, { - "order": 924, + "order": 930, "name": "masenace", "count": 1, "languages": 1 }, { - "order": 925, + "order": 931, "name": "e-xtian", "count": 1, "languages": 1 }, { - "order": 926, + "order": 932, "name": "vickalck", "count": 1, "languages": 1 }, { - "order": 927, + "order": 933, "name": "gmedinat911", "count": 1, "languages": 1 }, { - "order": 928, + "order": 934, "name": "eljavi0", "count": 1, "languages": 1 }, { - "order": 929, + "order": 935, "name": "yeisongil", "count": 1, "languages": 1 }, { - "order": 930, + "order": 936, "name": "julioorozco05", "count": 1, "languages": 1 }, { - "order": 931, + "order": 937, "name": "fergz1988", "count": 1, "languages": 1 }, { - "order": 932, + "order": 938, "name": "marcos0803", "count": 1, "languages": 1 }, { - "order": 933, + "order": 939, "name": "xcortes", "count": 1, "languages": 1 }, { - "order": 934, + "order": 940, "name": "facundorsabia", "count": 1, "languages": 1 }, { - "order": 935, + "order": 941, "name": "nico70012", "count": 1, "languages": 1 }, { - "order": 936, + "order": 942, "name": "charly024", "count": 1, "languages": 1 }, { - "order": 937, + "order": 943, "name": "devjerez", "count": 1, "languages": 1 }, { - "order": 938, + "order": 944, "name": "gersonoroz", "count": 1, "languages": 1 }, { - "order": 939, + "order": 945, "name": "jafuma0320", "count": 1, "languages": 1 }, { - "order": 940, + "order": 946, "name": "g4nd4lf", "count": 1, "languages": 1 }, { - "order": 941, + "order": 947, "name": "obed-tc", "count": 1, "languages": 1 }, { - "order": 942, + "order": 948, "name": "devkenn", "count": 1, "languages": 1 }, { - "order": 943, + "order": 949, "name": "xalejandrow", "count": 1, "languages": 1 }, { - "order": 944, + "order": 950, "name": "henrydavidprimera", "count": 1, "languages": 1 }, { - "order": 945, + "order": 951, "name": "luceldasilva", "count": 1, "languages": 1 }, { - "order": 946, + "order": 952, "name": "mjordanaam", "count": 1, "languages": 1 }, { - "order": 947, + "order": 953, "name": "betulioo", "count": 1, "languages": 1 }, { - "order": 948, + "order": 954, "name": "judithernandez", "count": 1, "languages": 1 }, { - "order": 949, + "order": 955, "name": "dimanu-py", "count": 1, "languages": 1 }, { - "order": 950, + "order": 956, "name": "snowale", "count": 1, "languages": 1 }, { - "order": 951, + "order": 957, "name": "cd1974", "count": 1, "languages": 1 }, { - "order": 952, + "order": 958, "name": "acobo3", "count": 1, "languages": 1 }, { - "order": 953, + "order": 959, "name": "isaacdci", "count": 1, "languages": 1 }, { - "order": 954, + "order": 960, "name": "manueldenisdev", "count": 1, "languages": 1 }, { - "order": 955, + "order": 961, "name": "anexo01", "count": 1, "languages": 1 }, { - "order": 956, + "order": 962, "name": "yamiyugi25", "count": 1, "languages": 1 }, { - "order": 957, + "order": 963, "name": "gl-informatica", "count": 1, "languages": 1 }, { - "order": 958, + "order": 964, "name": "miguelmancebo", "count": 1, "languages": 1 }, { - "order": 959, + "order": 965, "name": "neusier101", "count": 1, "languages": 1 }, { - "order": 960, + "order": 966, "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { - "order": 961, + "order": 967, "name": "xhinto", "count": 1, "languages": 1 }, { - "order": 962, + "order": 968, "name": "dacaldev", "count": 1, "languages": 1 }, { - "order": 963, + "order": 969, "name": "juan-cruz01", "count": 1, "languages": 1 }, { - "order": 964, + "order": 970, "name": "juanalbornoz32", "count": 1, "languages": 1 }, { - "order": 965, + "order": 971, "name": "cisneros2404", "count": 1, "languages": 1 }, { - "order": 966, + "order": 972, "name": "neftalyr", "count": 1, "languages": 1 }, { - "order": 967, + "order": 973, "name": "latorredev", "count": 1, "languages": 1 }, { - "order": 968, + "order": 974, "name": "osneidert", "count": 1, "languages": 1 }, { - "order": 969, + "order": 975, "name": "jrgranadosb", "count": 1, "languages": 1 }, { - "order": 970, + "order": 976, "name": "vicvilla30", "count": 1, "languages": 1 }, { - "order": 971, + "order": 977, "name": "carlosbb70", "count": 1, "languages": 1 }, { - "order": 972, + "order": 978, "name": "pablom-2015", "count": 1, "languages": 1 }, { - "order": 973, + "order": 979, "name": "xtinarita", "count": 1, "languages": 1 }, { - "order": 974, + "order": 980, "name": "wilsonbarrera", "count": 1, "languages": 1 }, { - "order": 975, + "order": 981, "name": "jereaguilar", "count": 1, "languages": 1 }, { - "order": 976, + "order": 982, "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { - "order": 977, + "order": 983, "name": "danidan1214", "count": 1, "languages": 1 }, { - "order": 978, + "order": 984, "name": "demegorash", "count": 1, "languages": 1 }, { - "order": 979, + "order": 985, "name": "cris10026", "count": 1, "languages": 1 }, { - "order": 980, + "order": 986, "name": "davidgramiro", "count": 1, "languages": 1 }, { - "order": 981, + "order": 987, "name": "jgarteag", "count": 1, "languages": 1 }, { - "order": 982, + "order": 988, "name": "adcarret", "count": 1, "languages": 1 }, { - "order": 983, + "order": 989, "name": "natanaelzubiri", "count": 1, "languages": 1 }, { - "order": 984, + "order": 990, "name": "diegogomezcor4", "count": 1, "languages": 1 }, { - "order": 985, + "order": 991, "name": "perla-zg", "count": 1, "languages": 1 }, { - "order": 986, + "order": 992, "name": "neshurtado", "count": 1, "languages": 1 }, { - "order": 987, + "order": 993, "name": "marcelinoarias369", "count": 1, "languages": 1 }, { - "order": 988, + "order": 994, "name": "pushodev", "count": 1, "languages": 1 }, { - "order": 989, + "order": 995, "name": "sherkla12e", "count": 1, "languages": 1 }, { - "order": 990, + "order": 996, "name": "luisangeles20", "count": 1, "languages": 1 }, { - "order": 991, + "order": 997, "name": "omar8102", "count": 1, "languages": 1 }, { - "order": 992, + "order": 998, "name": "eatsangels", "count": 1, "languages": 1 }, { - "order": 993, + "order": 999, "name": "alejarandro", "count": 1, "languages": 1 }, { - "order": 994, + "order": 1000, "name": "tashidian", "count": 1, "languages": 1 }, { - "order": 995, + "order": 1001, "name": "alejandro000", "count": 1, "languages": 1 }, { - "order": 996, + "order": 1002, "name": "francgci", "count": 1, "languages": 1 }, { - "order": 997, + "order": 1003, "name": "krisipo", "count": 1, "languages": 1 }, { - "order": 998, + "order": 1004, "name": "jalonso76", "count": 1, "languages": 1 }, { - "order": 999, + "order": 1005, "name": "leo18q", "count": 1, "languages": 1 }, { - "order": 1000, + "order": 1006, "name": "sofiamfernandez", "count": 1, "languages": 1 }, { - "order": 1001, + "order": 1007, "name": "jgregoris", "count": 1, "languages": 1 }, { - "order": 1002, + "order": 1008, "name": "josuelopez5", "count": 1, "languages": 1 }, { - "order": 1003, + "order": 1009, "name": "mrf1989", "count": 1, "languages": 1 }, { - "order": 1004, + "order": 1010, "name": "zeraven09", "count": 1, "languages": 1 }, { - "order": 1005, + "order": 1011, "name": "pr1de-23", "count": 1, "languages": 1 }, { - "order": 1006, + "order": 1012, "name": "kronoscba", "count": 1, "languages": 1 }, { - "order": 1007, + "order": 1013, "name": "erickcis", "count": 1, "languages": 1 }, { - "order": 1008, + "order": 1014, "name": "experthacker444", "count": 1, "languages": 1 }, { - "order": 1009, + "order": 1015, "name": "javirr4", "count": 1, "languages": 1 }, { - "order": 1010, + "order": 1016, "name": "ignacioskm", "count": 1, "languages": 1 }, { - "order": 1011, + "order": 1017, "name": "jchernandez87", "count": 1, "languages": 1 }, { - "order": 1012, + "order": 1018, "name": "ferngpv", "count": 1, "languages": 1 }, { - "order": 1013, + "order": 1019, "name": "kshields51", "count": 1, "languages": 1 }, { - "order": 1014, + "order": 1020, "name": "salas89", "count": 1, "languages": 1 }, { - "order": 1015, + "order": 1021, "name": "90dread", "count": 1, "languages": 1 }, { - "order": 1016, + "order": 1022, "name": "chema-dw", "count": 1, "languages": 1 }, { - "order": 1017, + "order": 1023, "name": "sbngl", "count": 1, "languages": 1 }, { - "order": 1018, + "order": 1024, "name": "m4xxdev", "count": 1, "languages": 1 }, { - "order": 1019, + "order": 1025, "name": "cristianvergaraf", "count": 1, "languages": 1 }, { - "order": 1020, + "order": 1026, "name": "lizzymaken", "count": 1, "languages": 1 }, { - "order": 1021, + "order": 1027, + "name": "jandortiz", + "count": 1, + "languages": 1 + }, + { + "order": 1028, "name": "claudios1980", "count": 1, "languages": 1 }, { - "order": 1022, + "order": 1029, "name": "sergiovelayos", "count": 1, "languages": 1 }, { - "order": 1023, + "order": 1030, "name": "miguelangel861", "count": 1, "languages": 1 }, { - "order": 1024, + "order": 1031, "name": "marcosjarrin", "count": 1, "languages": 1 }, { - "order": 1025, + "order": 1032, "name": "jandresalvar", "count": 1, "languages": 1 }, { - "order": 1026, + "order": 1033, "name": "joferpg", "count": 1, "languages": 1 }, { - "order": 1027, + "order": 1034, "name": "jlrojano", "count": 1, "languages": 1 }, { - "order": 1028, + "order": 1035, "name": "ivanserran", "count": 1, "languages": 1 }, { - "order": 1029, + "order": 1036, "name": "dany3gs", "count": 1, "languages": 1 }, { - "order": 1030, + "order": 1037, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1031, + "order": 1038, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1032, + "order": 1039, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1033, + "order": 1040, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1034, + "order": 1041, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1035, + "order": 1042, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1036, + "order": 1043, "name": "bycris13", "count": 1, "languages": 1 }, { - "order": 1037, + "order": 1044, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1038, + "order": 1045, "name": "v1k770r", "count": 1, "languages": 1 }, { - "order": 1039, + "order": 1046, "name": "gianellannie", "count": 1, "languages": 1 }, { - "order": 1040, + "order": 1047, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1041, + "order": 1048, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1042, + "order": 1049, "name": "fredylopez01", "count": 1, "languages": 1 }, { - "order": 1043, + "order": 1050, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1044, + "order": 1051, "name": "lautimorales", "count": 1, "languages": 1 }, { - "order": 1045, + "order": 1052, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1046, + "order": 1053, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1047, + "order": 1054, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1048, + "order": 1055, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1049, + "order": 1056, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1050, + "order": 1057, "name": "adriansaint07", "count": 1, "languages": 1 }, { - "order": 1051, + "order": 1058, "name": "javiir", "count": 1, "languages": 1 }, { - "order": 1052, + "order": 1059, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1053, + "order": 1060, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1054, + "order": 1061, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1055, + "order": 1062, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1056, + "order": 1063, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1057, + "order": 1064, "name": "jrgim", "count": 1, "languages": 1 }, { - "order": 1058, + "order": 1065, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1059, + "order": 1066, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1060, + "order": 1067, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1061, + "order": 1068, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1062, + "order": 1069, "name": "robermejia", "count": 1, "languages": 1 }, { - "order": 1063, + "order": 1070, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1064, + "order": 1071, "name": "reneguzman7", "count": 1, "languages": 1 }, { - "order": 1065, + "order": 1072, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1066, + "order": 1073, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1067, + "order": 1074, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1068, + "order": 1075, + "name": "queralesdev", + "count": 1, + "languages": 1 + }, + { + "order": 1076, "name": "dovinhoyos", "count": 1, "languages": 1 }, { - "order": 1069, + "order": 1077, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1070, + "order": 1078, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1079, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1080, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1081, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1082, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1083, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1084, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1085, "name": "antoniojzp86", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1086, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1087, "name": "zyn7e", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1088, "name": "diegopardomontero", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1089, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1090, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1091, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1092, "name": "clespinosa2024", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1093, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1094, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1095, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1096, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1097, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1098, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1099, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1100, "name": "rawc1nnamon", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1101, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1102, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1095, + "order": 1103, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1096, + "order": 1104, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1105, "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1106, "name": "orzefox", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1107, "name": "acirdeveloper", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1108, "name": "emiliordev", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1109, "name": "sve-nnn", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1110, "name": "edgarmedranoa", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1111, "name": "rafapg93", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1112, "name": "vickalc", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1113, "name": "riukac", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1114, "name": "rusian69", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1115, "name": "wijimenezz", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1116, "name": "albertovf", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1117, "name": "markayala13", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1118, "name": "rocha30", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1119, "name": "righelch", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1120, "name": "deathbat00", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1121, "name": "nicoloboo02", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1122, "name": "sergiopq", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1123, "name": "angeloro", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1124, "name": "jony-english22", "count": 1, "languages": 1 }, { - "order": 1117, + "order": 1125, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1118, + "order": 1126, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1127, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1128, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1129, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1130, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1131, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1132, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1133, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1134, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1135, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1136, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1137, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1138, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1139, "name": "willypaz243", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1140, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1141, "name": "alecraft8", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1142, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1143, "name": "juampaweb", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1144, "name": "girngoma", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1145, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1146, "name": "ddaniel27", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1147, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1148, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1149, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1150, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1151, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1144, + "order": 1152, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1145, + "order": 1153, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1154, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1155, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1148, + "order": 1156, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1149, + "order": 1157, "name": "ouendinga", "count": 1, "languages": 1 }, { - "order": 1150, + "order": 1158, "name": "melonconyogurt", "count": 1, "languages": 1 - }, - { - "order": 1151, - "name": "mantaras96", - "count": 1, - "languages": 1 } ] } \ No newline at end of file From 391059979232863f9592eb2f7a6513a6246f6b51 Mon Sep 17 00:00:00 2001 From: Jesus Montoya Date: Mon, 9 Sep 2024 20:27:43 -0500 Subject: [PATCH 094/539] #01 - Python --- .../python/jmontoyac.py | 79 ++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/jmontoyac.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/jmontoyac.py index 9442249238..8dd4a55404 100644 --- a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/jmontoyac.py +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/jmontoyac.py @@ -66,4 +66,81 @@ y **= z print(f'y **= z, resultado: {y}') y //= z -print(f'y //= z, resultado: {y}') \ No newline at end of file +print(f'y //= z, resultado: {y}') + +# Operadores de identidad +a = 100 +b = 100 + +print(f'a={a}, b={b}, a is b: {a is b}') +b = 200 +print(f'a={a}, b={b}, a is b: {a is b}') + +lista1 = [10, 20, 30] +lista2 = [10, 20, 30] + +print(f'l1: {lista1}, l2: {lista2} l1 is l2: {lista1 is lista2}') + +a = 100 +b = 100 + +print(f'a={a}, b={b}, a is not b: {a is not b}') +b = 200 +print(f'a={a}, b={b}, a is not b: {a is not b}') + +# Operadores de pertenencia + +lista1 = ['a', 'c', 'e'] +print(f'e in {lista1}: {"e" in lista1}') +print(f'g in {lista1}: {"g" in lista1}') +print(f'e not in {lista1}: {"e" not in lista1}') +print(f'n not in {lista1}: {"n" not in lista1}') + +# Operadores de bits + +x = 0b0001 +y = 0b1010 + +print(f'Operador and & bitwise: {x} & {y}: {x & y}') +print(f'Operador or | bitwise: {x} | {y}: {x | y}') +print(f'Operador not ~ bitwise: {x}: {~x}') +print(f'Operador xor ^ bitwise: {x} ^ {y}: {x ^ y}') + +# Estructuras de control + +# Condicionales +print(f'if {a} == {b}: {a == b}') +print(f'if {a} != {b}: {a != b}') +print(f'if {a} > {b}: {a > b}') +print(f'if {a} < {b}: {a < b}') +print(f'if {a} >= {b}: {a >= b}') +print(f'if {a} <= {b}: {a <= b}') + +# Iterativas + +# While +x = 0 +while x < 3: + print(f'Ciclo while, Valor de x: {x}') + x += 1 +else: + print('Fin de ciclo while') + +# For +x = 3 +for i in range (0, x): + print(f'Ciclo for, Valor de i: {i}') + +for elemento in lista1: + print(f'Elemento de lista: {elemento}') + +cadena = 'cadena de texto' +for c in cadena: + print(f'Caracter de cadena de texto: {c}') + +# Ejercicio de dificultad extra + +n = 56 +for i in range (10, n): + if (i % 2 == 0) and (i != 16) and (i % 3 != 0): + print(f'Numeros: {i}') \ No newline at end of file From 6c82537ac750f4beb006d20d2118c5111e5b8b19 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Mon, 9 Sep 2024 21:14:07 -0500 Subject: [PATCH 095/539] Ejercicio #20 completo --- .../java/simonguzman.java | 89 ++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/Roadmap/20 - PETICIONES HTTP/java/simonguzman.java b/Roadmap/20 - PETICIONES HTTP/java/simonguzman.java index b40679ca61..a52ce79216 100644 --- a/Roadmap/20 - PETICIONES HTTP/java/simonguzman.java +++ b/Roadmap/20 - PETICIONES HTTP/java/simonguzman.java @@ -1,13 +1,32 @@ - import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.io.StringReader; import java.net.HttpURLConnection; import java.net.URL; +//Imports que no se pueden usar a no ser que se tengan en un archivo pom.xml +import javax.json.Json; +import javax.json.JsonArray; +import javax.json.JsonObject; +import javax.json.JsonReader; + +/* Dependencias necesarias para que funcione el codigo + + javax.json + javax.json-api + 1.1.4 + + + org.glassfish + javax.json + 1.1.4 + */ + public class simonguzman { public static void main(String[] args) throws IOException{ makeHttpRequest("https://www.google.com/"); + getPokemonApi("bulbasaur"); } public static void makeHttpRequest(String url) throws IOException{ @@ -32,4 +51,72 @@ public static void makeHttpRequest(String url) throws IOException{ System.out.println("ERROR: "+responseCode); } } + + public static void getPokemonInfo(String pokemonName) throws IOException { + String url = "https://pokeapi.co/api/v2/pokemon/" + pokemonName; + URL obj = new URL(url); + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + + con.setRequestMethod("GET"); + con.setRequestProperty("User-Agent", "MyPokemonApp"); + + int responseCode = con.getResponseCode(); + if (responseCode == 200) { + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + JsonReader jsonReader = Json.createReader(new StringReader(response.toString())); + JsonObject jsonObject = jsonReader.readObject(); + + System.out.println("Nombre: " + jsonObject.getString("name")); + System.out.println("ID: " + jsonObject.getInt("id")); + System.out.println("Peso: " + jsonObject.getJsonNumber("weight").doubleValue()); + System.out.println("Altura: " + jsonObject.getJsonNumber("height").doubleValue()); + System.out.println("Tipos: " + jsonObject.getJsonArray("types")); + + JsonObject speciesObject = jsonObject.getJsonObject("species"); + String speciesUrl = speciesObject.getString("url"); + URL speciesObj = new URL(speciesUrl); + HttpURLConnection speciesCon = (HttpURLConnection) speciesObj.openConnection(); + + speciesCon.setRequestMethod("GET"); + speciesCon.setRequestProperty("User-Agent", "MyPokemonApp"); + + int speciesResponseCode = speciesCon.getResponseCode(); + if (speciesResponseCode == 200) { + BufferedReader speciesIn = new BufferedReader(new InputStreamReader(speciesCon.getInputStream())); + String speciesInputLine; + StringBuffer speciesResponse = new StringBuffer(); + + while ((speciesInputLine = speciesIn.readLine()) != null) { + speciesResponse.append(speciesInputLine); + } + speciesIn.close(); + + JsonReader speciesJsonReader = Json.createReader(new StringReader(speciesResponse.toString())); + JsonObject speciesJsonObject = speciesJsonReader.readObject(); + + String evolutionChainUrl = speciesJsonObject.getJsonObject("evolution_chain").getString("url"); + System.out.println("Cadena de evoluciones: " + evolutionChainUrl); + } else { + System.out.println("Error: " + speciesResponseCode); + } + + JsonArray games = jsonObject.getJsonArray("game_indices"); + System.out.println("Juegos: "); + for (int i = 0; i < games.size(); i++) { + JsonObject gameIndexObject = games.getJsonObject(i); + JsonObject versionObject = gameIndexObject.getJsonObject("version"); + System.out.println(" - " + versionObject.getString("name")); + } + } else { + System.out.println("Error: " + responseCode); + } + } } From d06dcb00b91063ed921fa6cb9366e67fe1b5b796 Mon Sep 17 00:00:00 2001 From: fzcarlitos Date: Mon, 9 Sep 2024 23:41:06 -0300 Subject: [PATCH 096/539] 00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO - Javascript --- .../javascript/fzcarlitos.js | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/fzcarlitos.js diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/fzcarlitos.js b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/fzcarlitos.js new file mode 100644 index 0000000000..8fd1a65358 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/fzcarlitos.js @@ -0,0 +1,23 @@ +// https://www.javascript.com/ + +// Comentario en una linea + +/*Comentario +en varias lineas*/ + +let variableNombre = Carlos; +var variableApellido = Fernandez; +const constanteEdad = 31; // Definición de Variables utilizando Let y Var, y Constante utilizando const. + +let string = "cadena de texto"; // Variable que define una cadena de texto. + +let numero = 1; //Variable que define un numero entero. + +let booleanoTrue = true; +let booleanoFalse = false; //Variable que define booleanos True y False. + +let indefinido = undefined; // Variable que define dato undefined. + +let nulo = null; //Variable que define dato primitivo null. + +console.log ("Hola, Javascript!") //Imprime en consola "Hola, Javascript!" \ No newline at end of file From 5f2ddc015fac9f06b641a1cbad855e840da6e0f1 Mon Sep 17 00:00:00 2001 From: GordoMaster Date: Mon, 9 Sep 2024 23:09:42 -0400 Subject: [PATCH 097/539] #17-Python --- .../17 - ITERACIONES/python/Gordo-Master.py | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Roadmap/17 - ITERACIONES/python/Gordo-Master.py diff --git a/Roadmap/17 - ITERACIONES/python/Gordo-Master.py b/Roadmap/17 - ITERACIONES/python/Gordo-Master.py new file mode 100644 index 0000000000..78bae2343d --- /dev/null +++ b/Roadmap/17 - ITERACIONES/python/Gordo-Master.py @@ -0,0 +1,72 @@ +# 17 - Iteraciones + +for i in range(10): + print(i+1) + +contador = 0 +while contador < 10: + contador += 1 + print(contador) + + +iterador = iter([i+1 for i in range(10)]) + +for i in iterador: + print(i) + +""" +Ejercicio extra +""" +contador = 0 +def generador(): + yield 1 + yield 2 + yield 3 + yield 4 + yield 5 + yield 6 + yield 7 + yield 8 + yield 9 + yield 10 + +for i in generador(): + print(i) + +def count_from_1_to(num): + if not num == 1: + count_from_1_to(num-1) + print(num) + else: + print(num) + +count_from_1_to(10) + +for e in [1,2,3,4]: + print(e) + +for e in {1,2,3,4}: + print(e) + +for e in (1,2,3,4): + print(e) + +for e in {1:"a",2:"b",3:"c",4:"d"}: + print(e) + +for e in {1:"a",2:"b",3:"c",4:"d"}.values(): + print(e) + +print(*[i for i in range(1, 11)], sep = "\n") + +for c in "Python": + print(c) + +for e in reversed([1,2,3,4]): + print(e) + +for e in sorted(["G","O","R","D","O"]): + print(e) + +for n, e in enumerate(sorted(["G","O","R","D","O"])): + print(f"{n}:{e}") From 8b5b4d58dbaa628ff5a5481e8193ebfc194e4574 Mon Sep 17 00:00:00 2001 From: GordoMaster Date: Tue, 10 Sep 2024 00:22:40 -0400 Subject: [PATCH 098/539] #18-Python --- Roadmap/18 - CONJUNTOS/python/Gordo-Master.py | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 Roadmap/18 - CONJUNTOS/python/Gordo-Master.py diff --git a/Roadmap/18 - CONJUNTOS/python/Gordo-Master.py b/Roadmap/18 - CONJUNTOS/python/Gordo-Master.py new file mode 100644 index 0000000000..aafd193795 --- /dev/null +++ b/Roadmap/18 - CONJUNTOS/python/Gordo-Master.py @@ -0,0 +1,94 @@ +# 18 - Conjuntos + +conjunto = {"a","e","i","o","u"} +print(conjunto) + +# En los conjuntos no se repiten los valores y no esta en orden los valores. + +# Añadir un elemento: +conjunto.add("b") +print(conjunto) + +# Añade varios elementos +conjunto.update(["c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"]) +print(conjunto) + +# Eliminar un elemento +conjunto.remove("x") # Genera un error si no se encuentra el elemento +print(conjunto) +conjunto.discard("y") # No genera error si no se encuentra el elemento +print(conjunto) +print(conjunto.pop()) # Es aleatorio el que remueve +print(conjunto) + +# Comprueba si un elemento se encuentra en el conjunto +print("d" in conjunto) + +# Limpia el conjunto +conjunto.clear() +print(conjunto) + +""" +Parte corregida con la trampa de Brais +""" + +data = [1, 2, 3, 4, 5] +print(data) + +# Añade un elemento +data.append(6) +print(data) + +# Añade al principio +data.insert(0,0) +print(data) + +# Añade varios elementos al final +data.extend([9,10]) +print(data) + +# Añade varios elementos en una posición +data[7:7]=[7,8] +print(data) + +# Actualiza un posición en concreto +data[3]=-3 +print(data) + +# Elimina un dato segun su posición +print(data.pop(7)) +print(data) +del data[1] +print(data) + +# Comprueba que el valor este +print(4 in data) + +# Vaciar +print(data.clear()) + +""" +Ejercicio Extra +""" + +conj_1 = set([i for i in range(2,31,2)]) +conj_2 = set([i for i in range(3,31,3)]) + +print(conj_1) +print(conj_2) + +# Union +print(conj_1.union(conj_2)) +print(conj_1|conj_2) + +# Intersección +print(conj_1.intersection(conj_2)) +print(conj_1&conj_2) + +# Diferencia +print(conj_1.difference(conj_2)) +print(conj_1 - conj_2) + +# Diferencia simetrica +print(conj_1.symmetric_difference(conj_2)) +print(conj_1^conj_2) \ No newline at end of file From 426578652bac2c133b5bb97e4a7a6875069da574 Mon Sep 17 00:00:00 2001 From: Cesar Carmona Date: Mon, 9 Sep 2024 23:34:02 -0600 Subject: [PATCH 099/539] #37 - Python --- .../python/CesarCarmona30.py | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/CesarCarmona30.py diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/CesarCarmona30.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/CesarCarmona30.py new file mode 100644 index 0000000000..4d6061301d --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/CesarCarmona30.py @@ -0,0 +1,103 @@ +import os +import requests +from dotenv import load_dotenv + +load_dotenv() + +# Spotify API credentials +CLIENT_ID = os.getenv("SPOTIFY_CLIENT_ID") +CLIENT_SECRET = os.getenv("SPOTIFY_CLIENT_SECRET") + +def get_token(): + """ Obtener el token de OAuth de Spotify API """ + url = 'https://accounts.spotify.com/api/token' + data = { + 'grant_type': 'client_credentials' + } + response = requests.post(url, data=data, auth=(CLIENT_ID, CLIENT_SECRET)) + token = response.json().get("access_token") + return token + +def get_artist_data(artist_id, token): + """ Obtener los datos de un artista de Spotify """ + url = f'https://api.spotify.com/v1/artists/{artist_id}' + headers = { + 'Authorization': f'Bearer {token}' + } + response = requests.get(url, headers=headers) + return response.json() + +def get_artist_top_tracks(artist_id, token): + """ Obtener las canciones más populares de un artista """ + url = f'https://api.spotify.com/v1/artists/{artist_id}/top-tracks?market=US' + headers = { + 'Authorization': f'Bearer {token}' + } + response = requests.get(url, headers=headers) + return response.json() + +def compare_stat(oasis_stat, lp_stat, label, unit='', score=(0, 0), is_track=False): + """Comparar estadísticas entre Oasis y Linkin Park y actualizar el marcador""" + print(f"> {label}") + + if is_track: + oasis_track, oasis_popularity = oasis_stat + lp_track, lp_popularity = lp_stat + print(f" Oasis: \"{oasis_track}\" con {oasis_popularity}{unit}") + print(f" Linkin Park: \"{lp_track}\" con {lp_popularity}{unit}") + else: + print(f" Oasis: {oasis_stat}{unit}") + print(f" Linkin Park: {lp_stat}{unit}") + + oasis_score, linkin_park_score = score + + # Comparar por popularidad si es una canción, o directamente los valores si no es canción + if (is_track and oasis_stat[1] > lp_stat[1]) or (not is_track and oasis_stat > lp_stat): + oasis_score += 1 + else: + linkin_park_score += 1 + + print(f"Oasis {oasis_score} - Linkin Park {linkin_park_score}\n") + return oasis_score, linkin_park_score + +def compare_bands(): + token = get_token() + + oasis_id = '2DaxqgrOhkeH0fpeiQq2f4' + linkin_park_id = '6XyY86QOPPrYVGvF9ch6wz' + + # Obtener datos de ambas bandas + oasis_data = get_artist_data(oasis_id, token) + linkin_park_data = get_artist_data(linkin_park_id, token) + + # Obtener las canciones más populares de ambas bandas + oasis_top_tracks = get_artist_top_tracks(oasis_id, token) + linkin_park_top_tracks = get_artist_top_tracks(linkin_park_id, token) + + oasis_score = 0 + linkin_park_score = 0 + + # Formatear datos + oasis_followers = f"{oasis_data.get('followers', {}).get('total'):,}" + oasis_popularity = oasis_data.get("popularity") + oasis_top_track = (oasis_top_tracks['tracks'][0]['name'], oasis_top_tracks['tracks'][0]['popularity']) + + linkin_park_followers = f"{linkin_park_data.get('followers', {}).get('total'):,}" + linkin_park_popularity = linkin_park_data.get("popularity") + linkin_park_top_track = (linkin_park_top_tracks['tracks'][0]['name'], linkin_park_top_tracks['tracks'][0]['popularity']) + + # Comparar seguidores + print("Oasis vs Linkin Park\n") + oasis_score, linkin_park_score = compare_stat(oasis_followers, linkin_park_followers, "Seguidores", "", (oasis_score, linkin_park_score)) + + # Comparar popularidad + oasis_score, linkin_park_score = compare_stat(oasis_popularity, linkin_park_popularity, "Popularidad", "/100 pts.", (oasis_score, linkin_park_score)) + + # Comparar canciones más populares (usando tuplas para nombre y popularidad) + oasis_score, linkin_park_score = compare_stat(oasis_top_track, linkin_park_top_track, "Canción más popular", "/100 pts.", (oasis_score, linkin_park_score), is_track=True) + + # Determinar la banda más popular + print(f"BANDA MÁS POPULAR: {'Oasis' if oasis_score > linkin_park_score else 'Linkin Park'}") + +if __name__ == "__main__": + compare_bands() \ No newline at end of file From 62cc18299d8240f19d2a601f22840b6c5d8d8371 Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Tue, 10 Sep 2024 08:40:32 +0200 Subject: [PATCH 100/539] =?UTF-8?q?Correcci=C3=B3n=20Roadmap=2036=20en=20v?= =?UTF-8?q?=C3=ADdeo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ed5ee76a10..a912369db2 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ |33|[RESCATANDO A MICKEY](./Roadmap/33%20-%20RESCATANDO%20A%20MICKEY/ejercicio.md)|[📝](./Roadmap/33%20-%20RESCATANDO%20A%20MICKEY/python/mouredev.py)|[▶️](https://youtu.be/Bo9Cp3N68C0)|[👥](./Roadmap/33%20-%20RESCATANDO%20A%20MICKEY/) |34|[ÁRBOL GENEALÓGICO DE LA CASA DEL DRAGÓN](./Roadmap/34%20-%20ÁRBOL%20GENEALÓGICO%20LA%20CASA%20DEL%20DRAGÓN/ejercicio.md)|[📝](./Roadmap/34%20-%20ÁRBOL%20GENEALÓGICO%20LA%20CASA%20DEL%20DRAGÓN/python/mouredev.py)|[▶️](https://youtu.be/GAHBOAzgE2w)|[👥](./Roadmap/34%20-%20ÁRBOL%20GENEALÓGICO%20LA%20CASA%20DEL%20DRAGÓN/) |35|[REPARTIENDO LOS ANILLOS DE PODER](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/ejercicio.md)|[📝](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/python/mouredev.py)|[▶️](https://youtu.be/10i2dnaMLj8)|[👥](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/) -|36|[EL SOMBRERO SELECCIONADOR](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/ejercicio.md)|[📝](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/python/mouredev.py)||[👥](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/) +|36|[EL SOMBRERO SELECCIONADOR](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/ejercicio.md)|[📝](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/python/mouredev.py)|[▶️](https://youtu.be/_UjOD587elY)|[👥](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/) |37|[OASIS VS LINKIN PARK](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/ejercicio.md)|[🗓️ 16/09/24](https://discord.gg/8cxgGTxm?event=1280229634524450877)||[👥](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/) ## Cursos en YouTube From 1ce308e3fb59364ac8ab73b283e7b730091b2626 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Tue, 10 Sep 2024 10:22:10 +0200 Subject: [PATCH 101/539] #30 Kotlin y #31 Kotlin --- Roadmap/30 - SOLID DIP/kotlin/eulogioep.kt | 141 ++++++++++++++++++ .../kotlin/eulogioep.kt" | 118 +++++++++++++++ 2 files changed, 259 insertions(+) create mode 100644 Roadmap/30 - SOLID DIP/kotlin/eulogioep.kt create mode 100644 "Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/kotlin/eulogioep.kt" diff --git a/Roadmap/30 - SOLID DIP/kotlin/eulogioep.kt b/Roadmap/30 - SOLID DIP/kotlin/eulogioep.kt new file mode 100644 index 0000000000..8e4e27a2cf --- /dev/null +++ b/Roadmap/30 - SOLID DIP/kotlin/eulogioep.kt @@ -0,0 +1,141 @@ +/* + * Principio de Inversión de Dependencias (DIP) + * + * El Principio de Inversión de Dependencias es uno de los cinco principios SOLID + * en programación orientada a objetos. Establece que: + * + * 1. Los módulos de alto nivel no deben depender de módulos de bajo nivel. + * Ambos deben depender de abstracciones. + * 2. Las abstracciones no deben depender de los detalles. Los detalles deben + * depender de las abstracciones. + * + * En otras palabras, este principio nos ayuda a desacoplar los componentes de + * software, haciendo que las clases de alto nivel dependan de interfaces o + * clases abstractas en lugar de clases concretas. Esto mejora la flexibilidad, + * la reutilización y la facilidad de prueba del código. + */ + +// Ejemplo incorrecto (violando DIP) +class IncorrectExample { + class LightBulb { + fun turnOn() { + println("LightBulb: Bulb turned on...") + } + + fun turnOff() { + println("LightBulb: Bulb turned off...") + } + } + + class ElectricPowerSwitch(private val bulb: LightBulb) { + private var isOn = false + + fun press() { + isOn = if (isOn) { + bulb.turnOff() + false + } else { + bulb.turnOn() + true + } + } + } +} + +// Ejemplo correcto (aplicando DIP) +class CorrectExample { + interface Switchable { + fun turnOn() + fun turnOff() + } + + class LightBulb : Switchable { + override fun turnOn() { + println("LightBulb: Bulb turned on...") + } + + override fun turnOff() { + println("LightBulb: Bulb turned off...") + } + } + + class Fan : Switchable { + override fun turnOn() { + println("Fan: Fan started...") + } + + override fun turnOff() { + println("Fan: Fan stopped...") + } + } + + class ElectricPowerSwitch(private val device: Switchable) { + private var isOn = false + + fun press() { + isOn = if (isOn) { + device.turnOff() + false + } else { + device.turnOn() + true + } + } + } +} + +// Sistema de notificaciones (Desafío extra) +interface NotificationService { + fun send(message: String) +} + +class EmailNotification : NotificationService { + override fun send(message: String) { + println("Sending Email: $message") + } +} + +class PushNotification : NotificationService { + override fun send(message: String) { + println("Sending Push Notification: $message") + } +} + +class SMSNotification : NotificationService { + override fun send(message: String) { + println("Sending SMS: $message") + } +} + +class NotificationSystem(private val services: List) { + fun notify(message: String) { + services.forEach { it.send(message) } + } +} + +fun main() { + println("Incorrect Example (Violating DIP):") + val incorrectBulb = IncorrectExample.LightBulb() + val incorrectSwitch = IncorrectExample.ElectricPowerSwitch(incorrectBulb) + incorrectSwitch.press() + incorrectSwitch.press() + + println("\nCorrect Example (Following DIP):") + val correctBulb = CorrectExample.LightBulb() + val correctSwitch1 = CorrectExample.ElectricPowerSwitch(correctBulb) + correctSwitch1.press() + correctSwitch1.press() + + val fan = CorrectExample.Fan() + val correctSwitch2 = CorrectExample.ElectricPowerSwitch(fan) + correctSwitch2.press() + correctSwitch2.press() + + println("\nNotification System (Extra Challenge):") + val notificationSystem = NotificationSystem(listOf( + EmailNotification(), + PushNotification(), + SMSNotification() + )) + notificationSystem.notify("Hello, this is a test notification!") +} \ No newline at end of file diff --git "a/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/kotlin/eulogioep.kt" "b/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/kotlin/eulogioep.kt" new file mode 100644 index 0000000000..cf7fde6139 --- /dev/null +++ "b/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/kotlin/eulogioep.kt" @@ -0,0 +1,118 @@ +import kotlin.random.Random + +// Definición de las clases principales +data class Evento(val nombre: String, val participantes: MutableList = mutableListOf()) +data class Participante(val nombre: String, val pais: String, var medallas: MutableMap = mutableMapOf()) +data class Resultado(val oro: Participante, val plata: Participante, val bronce: Participante) + +// Clase principal que maneja la simulación de los Juegos Olímpicos +class JuegosOlimpicos { + private val eventos = mutableListOf() + private val participantes = mutableListOf() + + // Función para registrar un nuevo evento + fun registrarEvento(nombre: String) { + eventos.add(Evento(nombre)) + println("Evento '$nombre' registrado correctamente.") + } + + // Función para registrar un nuevo participante + fun registrarParticipante(nombre: String, pais: String) { + participantes.add(Participante(nombre, pais)) + println("Participante '$nombre' de '$pais' registrado correctamente.") + } + + // Función para simular todos los eventos + fun simularEventos() { + for (evento in eventos) { + // Seleccionar aleatoriamente al menos 3 participantes para el evento + val participantesEvento = participantes.shuffled().take(maxOf(3, Random.nextInt(participantes.size))) + evento.participantes.addAll(participantesEvento) + + // Simular el evento y asignar medallas + val resultado = simularEvento(evento) + asignarMedallas(resultado) + + // Mostrar los ganadores del evento + mostrarGanadoresEvento(evento, resultado) + } + } + + // Función para simular un evento individual y determinar los ganadores + private fun simularEvento(evento: Evento): Resultado { + val ganadores = evento.participantes.shuffled().take(3) + return Resultado(ganadores[0], ganadores[1], ganadores[2]) + } + + // Función para asignar medallas a los ganadores + private fun asignarMedallas(resultado: Resultado) { + asignarMedalla(resultado.oro, "oro") + asignarMedalla(resultado.plata, "plata") + asignarMedalla(resultado.bronce, "bronce") + } + + // Función auxiliar para asignar una medalla a un participante + private fun asignarMedalla(participante: Participante, tipoMedalla: String) { + participante.medallas[tipoMedalla] = participante.medallas.getOrDefault(tipoMedalla, 0) + 1 + } + + // Función para mostrar los ganadores de un evento + private fun mostrarGanadoresEvento(evento: Evento, resultado: Resultado) { + println("\nResultados del evento: ${evento.nombre}") + println("Oro: ${resultado.oro.nombre} (${resultado.oro.pais})") + println("Plata: ${resultado.plata.nombre} (${resultado.plata.pais})") + println("Bronce: ${resultado.bronce.nombre} (${resultado.bronce.pais})") + } + + // Función para generar y mostrar el ranking de países + fun mostrarRankingPaises() { + println("\nRanking de países por medallas:") + val rankingPaises = participantes.groupBy { it.pais } + .mapValues { (_, participantes) -> + participantes.sumOf { it.medallas.values.sum() } + } + .toList() + .sortedByDescending { it.second } + + rankingPaises.forEachIndexed { index, (pais, medallas) -> + println("${index + 1}. $pais: $medallas medallas") + } + } +} + +// Función principal que maneja la interacción con el usuario +fun main() { + val juegos = JuegosOlimpicos() + + while (true) { + println("\n--- Juegos Olímpicos París 2024 ---") + println("1. Registrar evento") + println("2. Registrar participante") + println("3. Simular eventos") + println("4. Mostrar ranking de países") + println("5. Salir") + print("Seleccione una opción: ") + + when (readLine()) { + "1" -> { + print("Ingrese el nombre del evento: ") + val nombreEvento = readLine() ?: continue + juegos.registrarEvento(nombreEvento) + } + "2" -> { + print("Ingrese el nombre del participante: ") + val nombreParticipante = readLine() ?: continue + print("Ingrese el país del participante: ") + val paisParticipante = readLine() ?: continue + juegos.registrarParticipante(nombreParticipante, paisParticipante) + } + "3" -> juegos.simularEventos() + "4" -> juegos.mostrarRankingPaises() + "5" -> { + println("¡Gracias por usar el simulador de Juegos Olímpicos París 2024!") + return + } + else -> println("Opción no válida. Por favor, intente de nuevo.") + } + } +} \ No newline at end of file From 1a9ffface8c8d0dc7e4ae7d93fbc879e6ba4ba5b Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Tue, 10 Sep 2024 12:41:14 +0200 Subject: [PATCH 102/539] # 37 - python --- .../python/EmmanuelMMontesinos.py | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/EmmanuelMMontesinos.py diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/EmmanuelMMontesinos.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/EmmanuelMMontesinos.py new file mode 100644 index 0000000000..d94813ff7e --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/EmmanuelMMontesinos.py @@ -0,0 +1,126 @@ +""" +/* + * EJERCICIO: + * ¡Dos de las bandas más grandes de la historia están de vuelta! + * Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? + * Desarrolla un programa que se conecte al API de Spotify y los compare. + * Requisitos: + * 1. Crea una cuenta de desarrollo en https://developer.spotify.com. + * 2. Conéctate al API utilizando tu lenguaje de programación. + * 3. Recupera datos de los endpoint que tú quieras. + * Acciones: + * 1. Accede a las estadísticas de las dos bandas. + * Por ejemplo: número total de seguidores, escuchas mensuales, + * canción con más reproducciones... + * 2. Compara los resultados de, por lo menos, 3 endpoint. + * 3. Muestra todos los resultados por consola para notificar al usuario. + * 4. Desarrolla un criterio para seleccionar qué banda es más popular. + */ +""" +import spotipy +from spotipy.oauth2 import SpotifyClientCredentials + +# Datos de tu cuenta Spotify Developer +API_ID = 'TU_PUBLIC_ID' +API_KEY = 'TU_SECRET_KEY' + +credenciales = SpotifyClientCredentials(client_id=API_ID, client_secret=API_KEY) +api = spotipy.Spotify(client_credentials_manager=credenciales) + +# Accede a las estadísticas de las dos bandas. +class Grupo: + def __init__(self,nombre) -> None: + self.nombre = nombre + try: + self.resultado = api.search(self.nombre, type='artist') + self.id = self.resultado["artists"]["items"][0]["id"] + self.top_canciones = api.artist_top_tracks(self.id,country='es') + + seguidores = api.artist(self.id) + self.seguidores = seguidores['followers']['total'] + self.registro = {} + check = 0 + self.popular = 0 + self.cancion_top = (self.top_canciones['tracks'][0]['name'],self.top_canciones['tracks'][0]['popularity']) + for track in self.top_canciones['tracks']: + if check == 5: + break + else: + check += 1 + track_id = track['id'] + track_name = track['name'] + track_info = api.track(track_id) + self.popular += int(track_info['popularity']) + self.registro[track_name] = track_info['popularity'] + + self.popular /= 5 + + except Exception as e: + print(f"El grupo {self.nombre} no existe\nError: {e}") + + # Muestra todos los resultados por consola para notificar al usuario + def mostrar_resultado(self): + print("-"*10) + print(f"{self.nombre.upper()}") + print(f"{self.seguidores} seguidores : {self.popular} popularidad") + print("-----TOP 5 CANCIONES-----") + for cancion,rankin in self.registro.items(): + print(f"{cancion} : {rankin} popularidad") + print("-"*20) + print() + + +# Compara los resultados de, por lo menos, 3 endpoint +def comparar_grupos(grupo1, grupo2): + puntuacion_1 = 0 + puntuacion_2 = 0 + + # Desarrolla un criterio para seleccionar qué banda es más popular + print("Criterios de puntuación:") + print("1. Seguidores") + print("2. Popularidad") + print("3. Popularidad de canción más escuchada") + print() + print("-"*10) + # Seguidores + if grupo1.seguidores > grupo2.seguidores: + puntuacion_1 += 1 + print(f"{grupo1.nombre} es más seguido que {grupo2.nombre}") + elif grupo1.seguidores < grupo2.seguidores: + puntuacion_2 += 1 + print(f"{grupo2.nombre} es más seguido que {grupo1.nombre}") + # Popularidad + if grupo1.popular > grupo2.popular: + puntuacion_1 += 1 + print(f"{grupo1.nombre} es más popular que {grupo2.nombre}") + elif grupo1.popular < grupo2.popular: + puntuacion_2 += 1 + print(f"{grupo2.nombre} es más popular que {grupo1.nombre}") + # Canción mas escuchada + if grupo1.cancion_top[1] > grupo2.cancion_top[1]: + puntuacion_1 += 1 + print(f"{grupo1.cancion_top[0]} es más popular que {grupo2.cancion_top[0]}") + elif grupo1.cancion_top[1] < grupo2.cancion_top[1]: + puntuacion_2 += 1 + print(f"{grupo2.cancion_top[0]} es más popular que {grupo1.cancion_top[0]}") + + print() + print("-"*10) + + if puntuacion_1 > puntuacion_2: + print(f"{grupo1.nombre} es más popular") + elif puntuacion_1 < puntuacion_2: + print(f"{grupo2.nombre} es más popular") + else: + print("Los grupos tienen la misma puntuación") + + + +# Prueba +oasis = Grupo('Oasis') +linkin = Grupo('Linkin Park') + +oasis.mostrar_resultado() +linkin.mostrar_resultado() + +comparar_grupos(oasis,linkin) \ No newline at end of file From b8bc66f0f3071c84988da16efe66947003d9012b Mon Sep 17 00:00:00 2001 From: Diego-Santana23 Date: Tue, 10 Sep 2024 05:49:16 -0500 Subject: [PATCH 103/539] Create Diego-Santana23.js Se crea la respuesta del reto 00 --- .../javascript/Diego-Santana23.js | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/Diego-Santana23.js diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/Diego-Santana23.js b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/Diego-Santana23.js new file mode 100644 index 0000000000..33cd884934 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/Diego-Santana23.js @@ -0,0 +1,36 @@ +// EJERCICIO + + +// 1. Crea un comentario en el código y coloca la URL del sitio web oficial del lenguaje de programación que has seleccionado. + +//https://developer.mozilla.org/es/docs/Web/JavaScript + +// 2. Representa las diferentes sintaxis que existen de crear comentarios en el lenguaje (en una línea, varias...). + +// Comentario de una sola linea + +/* +Comentario +en varias +lineas +*/ + +// 3. Crea una variable (y una constante si el lenguaje lo soporta). + +var numero = 5; +const pi = 3.1415; + +// 4. Crea variables representando todos los tipos de datos primitivos del lenguaje (cadenas de texto, enteros, booleanos...). + +let numeroEntero = 15; +let numeroDecimal = 0.0034; +let numeroExadecimal = 0x7DE; +let boleano = true; +let nulo = null; +let indefinido = undefined; +let string = 'Primer ejercicio de logica de programacion'; + +// 4. Imprime por terminal el texto: "¡Hola, [y el nombre de tu lenguaje]!" + +let lenguaje = 'Javascript'; +console.log(`!Hola, ${lenguaje}`) From 7af38a503ee1e3ea4726412b18685baea68c295c Mon Sep 17 00:00:00 2001 From: "mario.vb" Date: Tue, 10 Sep 2024 15:14:21 +0200 Subject: [PATCH 104/539] #13 - Python --- .../13 - PRUEBAS UNITARIAS/python/mvidalb.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Roadmap/13 - PRUEBAS UNITARIAS/python/mvidalb.py diff --git a/Roadmap/13 - PRUEBAS UNITARIAS/python/mvidalb.py b/Roadmap/13 - PRUEBAS UNITARIAS/python/mvidalb.py new file mode 100644 index 0000000000..1f5545d4ba --- /dev/null +++ b/Roadmap/13 - PRUEBAS UNITARIAS/python/mvidalb.py @@ -0,0 +1,65 @@ +import unittest +from datetime import datetime, date + +''' +Ejercicio +''' + +def suma(a, b) -> float: + if not isinstance(a, (int, float)) or not isinstance(b, (int, float)): + raise ValueError("Los argumentos deben ser enteros o decimales.") + return a + b + + +class TestSum(unittest.TestCase): + + def test_sum(self): # 'test_' es imprescindible + self.assertEqual(suma(5, 5), 10) + self.assertEqual(suma(5, -7), -2) + self.assertEqual(suma(0, 0), 0) + self.assertEqual(suma(2.5, 2.1), 4.6) + self.assertEqual(suma(2, 2.1), 4.1) + self.assertEqual(suma(2.5, 2.5), 5) + + def test_sum_type(self): # 'test_' es imprescindible + with self.assertRaises(ValueError): + suma("5", 2) + with self.assertRaises(ValueError): + suma(5, "7") + with self.assertRaises(ValueError): + suma("5", "7") + with self.assertRaises(ValueError): + suma(None, 7) + with self.assertRaises(ValueError): + suma("a", 2) + + +''' +Ejercicio extra +''' + +class TestData(unittest.TestCase): + + def setUp(self) -> None: # Función específica para preparar lo que se va a testar + self.data ={ + "name": "Mario", + "age" : 40, + "birth_date" : datetime.strptime("01-01-20", "%d-%m-%y").date(), + "programming_langues":["Python", "#C"] + } + + def test_fields_exist(self): # 'test_' es imprescindible + self.assertIn("name", self.data) + self.assertIn("age", self.data) + self.assertIn("birth_date", self.data) + self.assertIn("programming_langues", self.data) + + def test_data_is_correct(self): # 'test_' es imprescindible + self.assertIsInstance(self.data["name"], str) + self.assertIsInstance(self.data["age"], int) + self.assertIsInstance(self.data["birth_date"], date) + self.assertIsInstance(self.data["programming_langues"],list) + + +unittest.main() # Ejecuta todos los métodos que comienzan por 'test_' (necesita estar dentro de una clase) + From c5a34bafcd46ce0f6a584cec43d66917e0e962e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Tue, 10 Sep 2024 16:08:00 +0200 Subject: [PATCH 105/539] reto 36 d1d4cum --- .../python/d1d4cum.py | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/d1d4cum.py diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/d1d4cum.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/d1d4cum.py new file mode 100644 index 0000000000..155804f928 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/d1d4cum.py @@ -0,0 +1,145 @@ +import sys, random +from typing import List + + +class Question: + question: str + answers: List[str] + + def __init__(self, question, answers) -> None: + self.question = question + self.answers = answers + + +questions = [ + Question( + "¿Qué tipo de proyecto te interesa más desarrollar?", + [ + "Crear una interfaz web atractiva y funcional", + "Diseñar una API robusta que gestione la lógica del negocio", + "Desarrollar una aplicación nativa para smartphones", + "Analizar grandes volúmenes de datos para extraer información útil" + ] + ), + Question( + "¿Qué herramienta o lenguaje prefieres usar para trabajar?", + [ + "HTML, CSS, o JavaScript", + "Node.js, Java, o Python para el lado del servidor", + "Swift o Kotlin para aplicaciones móviles", + "SQL, Python (con Pandas), o R para análisis de datos" + ] + ), + Question( + "¿Qué te parece más interesante en tu día a día como desarrollador?", + [ + "Mejorar la experiencia de usuario a través de interfaces intuitivas", + "Optimizar la lógica del servidor y la eficiencia de las consultas", + "Aprovechar las capacidades nativas de los dispositivos móviles", + "Aplicar técnicas de machine learning para obtener predicciones y patrones" + ] + ), + Question( + "¿Qué problema preferirías resolver?", + [ + "Un diseño web que se ve bien en todas las resoluciones de pantalla", + "La creación de una arquitectura eficiente para gestionar múltiples usuarios y peticiones", + "Conseguir que una aplicación funcione sin problemas tanto en iOS como en Android", + "Limpiar y procesar grandes conjuntos de datos para hacerlos útiles" + ] + ), + Question( + "¿Qué tipo de testeo prefieres realizar?", + [ + "Comprobar que la interfaz es accesible y responsiva", + "Asegurarte de que las consultas a la base de datos son rápidas y precisas", + "Testear cómo una app responde en diferentes versiones de sistemas operativos móviles", + "Validar la precisión de un modelo predictivo en un conjunto de datos" + ] + ), + Question( + "¿En qué te gustaría especializarte?", + [ + "Desarrollo de interfaces gráficas y usabilidad", + "En la arquitectura de servidores y bases de datos", + "Programación de aplicaciones nativas que utilicen recursos del dispositivo", + "Análisis de datos, ciencia de datos, o inteligencia artificial" + ] + ), + Question( + "¿Qué te gustaría automatizar más en tu trabajo?", + [ + "La generación de componentes reutilizables en una interfaz", + "La ejecución de procesos en segundo plano que optimicen el rendimiento del servidor", + "La sincronización de datos entre una app móvil y el servidor", + "La limpieza, procesamiento y visualización de datos de forma eficiente" + ] + ), + Question( + "¿Cómo prefieres desplegar tus proyectos?", + [ + "Configurando un CDN para entregar rápidamente archivos estáticos", + "Desplegando un servicio web con balanceadores de carga y escalabilidad automática", + "Publicando una aplicación en las tiendas de iOS y Android", + "Implementando pipelines de datos para el procesamiento en tiempo real o batch" + ] + ), + Question( + "¿Qué tipo de herramientas disfrutas más usar?", + [ + "Herramientas como React, Vue o Angular", + "Frameworks como Django, Express o Spring", + "IDEs como Xcode o Android Studio", + "Herramientas de análisis de datos como Jupyter Notebook, Hadoop o Power BI" + ] + ), + Question( + "¿Qué retos técnicos prefieres enfrentar?", + [ + "Hacer que una página web se vea increíble en diferentes navegadores", + "Manejar eficientemente grandes volúmenes de tráfico y asegurar integridad en las transacciones", + "Garantizar que una app aproveche bien los recursos del teléfono sin consumir demasiada batería", + "Trabajar con datos faltantes o inconsistentes para obtener insights valiosos" + ] + ) +] + + +def main(): + frontend = 0 + backend = 0 + mobile = 0 + data = 0 + + for question in questions: + print(f"\n{question.question}") + print(f"1. {question.answers[0]}") + print(f"2. {question.answers[1]}") + print(f"3. {question.answers[2]}") + print(f"4. {question.answers[3]}") + + choice = input("> ") + + match choice: + case "1": + frontend += 1 + case "2": + backend += 1 + case "3": + mobile += 1 + case "4": + data += 1 + case _: + print("\n⚠️ Opción no válida") + print("Prueba finalizada con error") + sys.exit(1) + + results = {'frontend': frontend, 'backend': backend, 'mobile': mobile, 'data': data} + max_value = max(results.values()) + max_keys = [k for k, v in results.items() if v == max_value] + selected_key = random.choice(max_keys) + + print(f"\nPerteneces a la casa {selected_key}") + +if __name__ == '__main__': + main() From 684673b7e6f81a983ba4d61a3dc4808a9c25b5bd Mon Sep 17 00:00:00 2001 From: MohamedElderkaoui Date: Tue, 10 Sep 2024 16:49:16 +0200 Subject: [PATCH 106/539] #37 - java --- .../java/MohamedElderkaoui.java | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/java/MohamedElderkaoui.java diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/java/MohamedElderkaoui.java b/Roadmap/37 - OASIS VS LINKIN PARK/java/MohamedElderkaoui.java new file mode 100644 index 0000000000..13fa987209 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/java/MohamedElderkaoui.java @@ -0,0 +1,88 @@ +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.entity.StringEntity; +import org.apache.http.util.EntityUtils; +import org.apache.http.impl.client.HttpClientBuilder; +import org.json.JSONObject; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +public class MohamedElderkaoui { + + private static final String CLIENT_ID = "TU_CLIENT_ID"; + private static final String CLIENT_SECRET = "TU_CLIENT_SECRET"; + private static final String TOKEN_URL = "https://accounts.spotify.com/api/token"; + private static final String ARTIST_OASIS_ID = "2DaxqgrOhkeH0fpeiQq2f4"; // ID de Spotify para Oasis + private static final String ARTIST_LP_ID = "6XyY86QOPPrYVGvF9ch6wz"; // ID de Spotify para Linkin Park + + public static void main(String[] args) throws IOException { + String accessToken = getSpotifyAccessToken(); + + JSONObject oasisData = getArtistData(accessToken, ARTIST_OASIS_ID); + JSONObject lpData = getArtistData(accessToken, ARTIST_LP_ID); + + compareBands(oasisData, lpData); + } + + private static String getSpotifyAccessToken() throws IOException { + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpPost post = new HttpPost(TOKEN_URL); + + String auth = CLIENT_ID + ":" + CLIENT_SECRET; + String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8)); + + post.setHeader("Authorization", "Basic " + encodedAuth); + post.setHeader("Content-Type", "application/x-www-form-urlencoded"); + post.setEntity(new StringEntity("grant_type=client_credentials")); + + CloseableHttpResponse response = httpClient.execute(post); + String jsonResponse = EntityUtils.toString(response.getEntity()); + JSONObject jsonObject = new JSONObject(jsonResponse); + + return jsonObject.getString("access_token"); + } + + private static JSONObject getArtistData(String accessToken, String artistId) throws IOException { + CloseableHttpClient httpClient = HttpClients.createDefault(); + String url = "https://api.spotify.com/v1/artists/" + artistId; + + HttpGet get = new HttpGet(url); + get.setHeader("Authorization", "Bearer " + accessToken); + + CloseableHttpResponse response = httpClient.execute(get); + String jsonResponse = EntityUtils.toString(response.getEntity()); + return new JSONObject(jsonResponse); + } + + private static void compareBands(JSONObject oasisData, JSONObject lpData) { + System.out.println("Comparación entre Oasis y Linkin Park:"); + + int oasisFollowers = oasisData.getJSONObject("followers").getInt("total"); + int lpFollowers = lpData.getJSONObject("followers").getInt("total"); + + int oasisPopularity = oasisData.getInt("popularity"); + int lpPopularity = lpData.getInt("popularity"); + + System.out.println("Oasis - Seguidores: " + oasisFollowers); + System.out.println("Linkin Park - Seguidores: " + lpFollowers); + + System.out.println("Oasis - Popularidad: " + oasisPopularity); + System.out.println("Linkin Park - Popularidad: " + lpPopularity); + + if (oasisFollowers > lpFollowers) { + System.out.println("Oasis tiene más seguidores que Linkin Park."); + } else { + System.out.println("Linkin Park tiene más seguidores que Oasis."); + } + + if (oasisPopularity > lpPopularity) { + System.out.println("Oasis es más popular según la popularidad en Spotify."); + } else { + System.out.println("Linkin Park es más popular según la popularidad en Spotify."); + } + } +} \ No newline at end of file From b64b684407cccddd89acf591171251eb1a1ab09e Mon Sep 17 00:00:00 2001 From: oriaj3 Date: Tue, 10 Sep 2024 17:35:49 +0200 Subject: [PATCH 107/539] Fix Sol #34 - Python --- .../python/oriaj3.py" | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git "a/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/oriaj3.py" "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/oriaj3.py" index 436ba8351e..3e38598e17 100644 --- "a/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/oriaj3.py" +++ "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/oriaj3.py" @@ -26,7 +26,8 @@ */ """ import uuid -from graphviz import Digraph + +#from graphviz import Digraph class Persona: @@ -75,7 +76,7 @@ def agregar_pareja(self, id_persona, id_pareja): persona.parejas.append(pareja) pareja.parejas.append(persona) - # Inicializa la lista de hijos para esta pareja + # Inicializa la lista de hijos para esta pareja persona.hijos[pareja] = [] pareja.hijos[persona] = [] else: @@ -93,10 +94,25 @@ def agregar_hijo(self, id_padre, id_madre, id_hijo): madre.hijos[padre].append(hijo) else: print("Padre, madre o hijo no encontrado") - + #Formato de impresión de árbol con /tab para tabular los niveles/generaciones def imprimir_arbol(self): + set_visitados = set() + + def mostrar_persona(persona: Persona, nivel=0): + identacion = "\t" * nivel + if persona.id in set_visitados: + return + else: + print(f"{identacion} - {persona.nombre} {persona.apellido}") + set_visitados.add(persona.id) + if persona.parejas: + for pareja in persona.parejas: + print(f"{identacion} Pareja: {pareja.nombre} {pareja.apellido}") + for hijo in persona.hijos.get(pareja, []): + mostrar_persona(hijo, nivel + 1) + for persona in self.personas.values(): - print(persona) + mostrar_persona(persona) def buscar_por_nombre(self, nombre): return [persona for persona in self.personas.values() if persona.nombre.lower() == nombre.lower()] @@ -138,7 +154,7 @@ def generar_arbol_grafico(self): dot.render('arbol_genealogico_hijos', format='png', cleanup=True) print("Árbol genealógico generado como 'arbol_genealogico_hijos.png'.") - + # Añadir flecha para cada pareja ya_conectado = set() for persona in self.personas.values(): @@ -255,4 +271,4 @@ def generar_arbol_grafico(self): arbol.imprimir_arbol() #Imprime el arbol en png -arbol.generar_arbol_grafico() +#arbol.generar_arbol_grafico() From 008da4e6047189e4d67ffa1dcdd554700ebcd87a Mon Sep 17 00:00:00 2001 From: Emiliano Navarro Date: Tue, 10 Sep 2024 15:55:27 -0300 Subject: [PATCH 108/539] #00 - TypeScript --- .../typescript/NavarroEmiliano.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/NavarroEmiliano.ts diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/NavarroEmiliano.ts b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/NavarroEmiliano.ts new file mode 100644 index 0000000000..cf58ad387c --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/NavarroEmiliano.ts @@ -0,0 +1,23 @@ +// https://www.typescriptlang.org/ + +// Single line comment +/* +Multi-line +comment +*/ + +// Way to declare variables and constants +let variable: string = 'I am a variable'; +const constante: string = 'I am a constant'; + +// Primitive data types +let typeNumber: number = 10; +let typeString: string = 'Hello'; +let typeBoolean: boolean = true; +let typeNull: null = null; +let typeUndefined: undefined = undefined; +let typeSymbol: symbol = Symbol('symbol'); +let typeBigInt: bigint = 10n; + +// Printing in the console +console.log('Hello, TypeScript!'); From 8b2be5ad34793bde356d1cf679e4147cea25adee Mon Sep 17 00:00:00 2001 From: Albert Mantaras <34039293+Mantaras96@users.noreply.github.com> Date: Tue, 10 Sep 2024 19:05:00 +0000 Subject: [PATCH 109/539] Ej 37 de Spotify --- .../java/mantaras96.java | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/java/mantaras96.java diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/java/mantaras96.java b/Roadmap/37 - OASIS VS LINKIN PARK/java/mantaras96.java new file mode 100644 index 0000000000..5be4ce402c --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/java/mantaras96.java @@ -0,0 +1,128 @@ +package org.example; + +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.apache.http.entity.StringEntity; +import org.json.JSONObject; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +public class Main { + + private static final String CLIENT_ID = "1e0c8262ed9c4e17b7c63186c6f9fb16"; + private static final String CLIENT_SECRET = "5713c0964a79484f88bc719730752b98"; + private static final String TOKEN_URL = "https://accounts.spotify.com/api/token"; + private static final String SEARCH_URL = "https://api.spotify.com/v1/search"; + private static final String ARTIST_URL = "https://api.spotify.com/v1/artists"; + + private static final String ARTIST_NAME_1 = "Oasis"; + private static final String ARTIST_NAME_2 = "Linkin Park"; + + private static String getSpotifyAccessToken() throws IOException { + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpPost post = new HttpPost(TOKEN_URL); + + // Encode credentials + String auth = CLIENT_ID + ":" + CLIENT_SECRET; + String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8)); + + // Set headers + post.setHeader("Authorization", "Basic " + encodedAuth); + post.setHeader("Content-Type", "application/x-www-form-urlencoded"); + + // Set entity + StringEntity entity = new StringEntity("grant_type=client_credentials"); + post.setEntity(entity); + + // Execute request + try (CloseableHttpResponse response = httpClient.execute(post)) { + String jsonResponse = EntityUtils.toString(response.getEntity()); + JSONObject jsonObject = new JSONObject(jsonResponse); + return jsonObject.getString("access_token"); + } finally { + httpClient.close(); + } + } + + private static String getArtistId(String accessToken, String artistName) throws IOException, URISyntaxException { + CloseableHttpClient httpClient = HttpClients.createDefault(); + + // Build URL with encoded artist name + URIBuilder uriBuilder = new URIBuilder(SEARCH_URL); + uriBuilder.addParameter("q", artistName); + uriBuilder.addParameter("type", "artist"); + String requestUrl = uriBuilder.toString(); + + HttpGet get = new HttpGet(requestUrl); + + // Set headers + get.setHeader("Authorization", "Bearer " + accessToken); + + // Execute request + try (CloseableHttpResponse response = httpClient.execute(get)) { + String jsonResponse = EntityUtils.toString(response.getEntity()); + JSONObject jsonObject = new JSONObject(jsonResponse); + // Get the artist ID from the first result + JSONObject artist = jsonObject.getJSONObject("artists").getJSONArray("items").getJSONObject(0); + return artist.getString("id"); + } finally { + httpClient.close(); + } + } + + private static JSONObject getArtistInformation(String accessToken, String artistId) throws IOException, URISyntaxException { + CloseableHttpClient httpClient = HttpClients.createDefault(); + + // Build URL with encoded artist name + URIBuilder uriBuilder = new URIBuilder(ARTIST_URL + "/" + artistId); + String requestUrl = uriBuilder.toString(); + + HttpGet get = new HttpGet(requestUrl); + + // Set headers + get.setHeader("Authorization", "Bearer " + accessToken); + + // Execute request + try (CloseableHttpResponse response = httpClient.execute(get)) { + String jsonResponse = EntityUtils.toString(response.getEntity()); + JSONObject jsonObject = new JSONObject(jsonResponse); + System.out.println(jsonObject); + //Integer popularity = jsonObject.getInt("popularity"); + //System.out.println("Popularity:" + jsonObject.getJSONObject("followers").getInt("total")); + return jsonObject; + } finally { + httpClient.close(); + } + } + + + public static void main(String[] args) throws Exception { + try { + String accessToken = getSpotifyAccessToken(); + + System.out.println("Access Token: " + accessToken); + String artistID = getArtistId(accessToken, ARTIST_NAME_1); + String artistID2 = getArtistId(accessToken, ARTIST_NAME_2); + + + JSONObject jsonObjectArtist1 = getArtistInformation(accessToken, artistID); + JSONObject jsonObjectArtist2 = getArtistInformation(accessToken, artistID2); + + if (jsonObjectArtist1.getInt("popularity") > jsonObjectArtist2.getInt("popularity")){ + System.out.println("El grupo mas popular es " + ARTIST_NAME_1); + } else { + System.out.println("El grupo mas popular es " + ARTIST_NAME_2); + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} From 4ec6d5ff840c7b3df1b999b0081951723f307f3b Mon Sep 17 00:00:00 2001 From: Albert Mantaras <34039293+Mantaras96@users.noreply.github.com> Date: Tue, 10 Sep 2024 19:05:06 +0000 Subject: [PATCH 110/539] Fix ej --- Roadmap/37 - OASIS VS LINKIN PARK/java/mantaras96.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/java/mantaras96.java b/Roadmap/37 - OASIS VS LINKIN PARK/java/mantaras96.java index 5be4ce402c..2677bdf3a9 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/java/mantaras96.java +++ b/Roadmap/37 - OASIS VS LINKIN PARK/java/mantaras96.java @@ -17,8 +17,8 @@ public class Main { - private static final String CLIENT_ID = "1e0c8262ed9c4e17b7c63186c6f9fb16"; - private static final String CLIENT_SECRET = "5713c0964a79484f88bc719730752b98"; + private static final String CLIENT_ID = ""; + private static final String CLIENT_SECRET = ""; private static final String TOKEN_URL = "https://accounts.spotify.com/api/token"; private static final String SEARCH_URL = "https://api.spotify.com/v1/search"; private static final String ARTIST_URL = "https://api.spotify.com/v1/artists"; From 657cceeedb270eafe40c854d7157f2ccf053762a Mon Sep 17 00:00:00 2001 From: MohamedElderkaoui Date: Tue, 10 Sep 2024 21:15:46 +0200 Subject: [PATCH 111/539] #37 - java --- Roadmap/37 - OASIS VS LINKIN PARK/java/MohamedElderkaoui.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/java/MohamedElderkaoui.java b/Roadmap/37 - OASIS VS LINKIN PARK/java/MohamedElderkaoui.java index 13fa987209..938f92b7f9 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/java/MohamedElderkaoui.java +++ b/Roadmap/37 - OASIS VS LINKIN PARK/java/MohamedElderkaoui.java @@ -13,8 +13,8 @@ import java.util.Base64; public class MohamedElderkaoui { - private static final String CLIENT_ID = "TU_CLIENT_ID"; - private static final String CLIENT_SECRET = "TU_CLIENT_SECRET"; + private static final String CLIENT_ID = System.getenv("SPOTIFY_CLIENT_ID"); +private static final String CLIENT_SECRET = System.getenv("SPOTIFY_CLIENT_SECRET"); private static final String TOKEN_URL = "https://accounts.spotify.com/api/token"; private static final String ARTIST_OASIS_ID = "2DaxqgrOhkeH0fpeiQq2f4"; // ID de Spotify para Oasis private static final String ARTIST_LP_ID = "6XyY86QOPPrYVGvF9ch6wz"; // ID de Spotify para Linkin Park From b91eb68b324bc44c4b893b333e65860de7af0766 Mon Sep 17 00:00:00 2001 From: Emiliano Navarro Date: Tue, 10 Sep 2024 17:49:13 -0300 Subject: [PATCH 112/539] #01 - TypeScript --- .../typescript/NavarroEmiliano.ts | 334 ++++++++++++++++++ 1 file changed, 334 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/NavarroEmiliano.ts diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/NavarroEmiliano.ts b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/NavarroEmiliano.ts new file mode 100644 index 0000000000..d357fded43 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/NavarroEmiliano.ts @@ -0,0 +1,334 @@ +/* =============Arithmetic operators ============= */ +let num1: number = 10; +let num2: number = 5; + +//Addition operator +let sum: number = num1 + num2; // 15 + +//Subtraction operator +let difference: number = num1 - num2; // 5 + +//Multiplication operator +let product: number = num1 * num2; // 50 + +//Division operator +let quotient: number = num1 / num2; // 2 + +//Modulus operator +let remainder: number = num1 % num2; // 0 + +//Exponentiation operator +let power: number = num1 ** num2; // 100000 + +//Increment operator +let postIncrement: number = num1++; // Returns the value of num1 (10), then increments num1 by 1 (11) +let preIncrement: number = ++num1; // Increments num1 by 1 (12), then returns the value of num1 (12) + +//Decrement operator +let postDecrement: number = num1--; // Returns the value of num1 (12), then decrements num1 by 1 (11) +let preDecrement: number = --num1; // Decrements num1 by 1 (10), then returns the value of num1 (10) + +//Unary plus operator +let unaryPlus: number = +num1; // Try to convert num1 to a number if possible, otherwise returns NaN + +//Unary minus operator +let unaryMinus: number = -num1; // Try to convert num1 to a number if possible, then negates it finally returns the value or NaN + +/* =============Logical operators ============= */ +let isTrue: boolean = true; +let isFalse: boolean = false; + +// Logical AND operator (&&) +// The logical AND operator (&&) evaluates operands from left to right. +// 1. If both operands are true, it returns true. +// 2. If any operand is false, it returns false. +// 3. If the first operand is falsy, it returns that value without evaluating the second operand (short-circuit). +// 4. If the first operand is truthy, it returns the value of the second operand. + +// Behavior with boolean values: +let andResult1: boolean = true && true; // true +let andResult2: boolean = true && false; // false +let andResult3: boolean = false && true; // false +let andResult4: boolean = false && false; // false + +// Short-circuit evaluation and non-boolean values: +let andShortCircuit1: any = 0 && 'hello'; // 0 (falsy, short-circuits) +let andShortCircuit2: any = 1 && 'hello'; // "hello" +let andShortCircuit3: any = 'hello' && 0; // 0 +let andShortCircuit4: any = null && undefined; // null (falsy, short-circuits) + +// Truthy and falsy values: +// Falsy: false, 0, -0, 0n, "", null, undefined, NaN +// Truthy: Everything else, including "0", "false", [], {}, function(){} + +// Type coercion: +let andCoercion1: any = '5' && 2; // 2 (string "5" is truthy) +let andCoercion2: any = [] && 'hello'; // "hello" (empty array is truthy) + +// In this specific case: +let andResult: boolean = isTrue && isFalse; // false (because isFalse is false) + +// Note: When used with boolean operands, && always returns a boolean. +// When used with non-boolean operands, it may return a non-boolean value. + +//Logical OR operator +let orResult: boolean = isTrue || isFalse; // true + +// Logical OR operator (||) +// The logical OR operator (||) evaluates operands from left to right. +// 1. If either operand is true, it returns true. +// 2. If both operands are false, it returns false. +// 3. If the first operand is truthy, it returns that value without evaluating the second operand (short-circuit). +// 4. If the first operand is falsy, it returns the value of the second operand. + +// Behavior with boolean values: +let orResult1: boolean = true || true; // true +let orResult2: boolean = true || false; // true +let orResult3: boolean = false || true; // true +let orResult4: boolean = false || false; // false + +// Short-circuit evaluation and non-boolean values: +let orShortCircuit1: any = 1 || 'hello'; // 1 (truthy, short-circuits) +let orShortCircuit2: any = 0 || 'hello'; // "hello" +let orShortCircuit3: any = 'hello' || 0; // "hello" (truthy, short-circuits) +let orShortCircuit4: any = null || undefined; // undefined + +// Truthy and falsy values: +// Falsy: false, 0, -0, 0n, "", null, undefined, NaN +// Truthy: Everything else, including "0", "false", [], {}, function(){} + +// Type coercion: +let orCoercion1: any = '' || 2; // 2 (empty string is falsy) +let orCoercion2: any = [] || 'hello'; // [] (empty array is truthy, short-circuits) + +// In this specific case: +let orResultFinal: boolean = isTrue || isFalse; // true (because isTrue is true) + +// Note: When used with boolean operands, || always returns a boolean. +// When used with non-boolean operands, it may return a non-boolean value. + +//Logical NOT operator +let notResult: boolean = !isTrue; // false + +//Logical NOT operator (!) +// The logical NOT operator (!) converts its operand to a boolean value and returns the opposite value. +// 1. If the operand is truthy, it returns false. +// 2. If the operand is falsy, it returns true. + +/* ============= Comparison operators ============= */ + +// num1 = 10; num2 = 5; +let comparison1: boolean = num1 == num2; // false -- returns true if the values are the same +let comparison2: boolean = num1 != num2; // true -- returns true if the values are not the same +let comparison3: boolean = num1 === num2; // false -- returns true if the values are the same and of the same type +let comparison4: boolean = num1 !== num2; // true -- returns true if the values are not the same or of different type +let comparison5: boolean = num1 > num2; // true -- returns true if num1 is greater than num2 +let comparison6: boolean = num1 < num2; // false -- returns true if num1 is less than num2 +let comparison7: boolean = num1 >= num2; // true -- returns true if num1 is greater than or equal to num2 +let comparison8: boolean = num1 <= num2; // false -- returns true if num1 is less than or equal to num2 + +/* ============= Assignment operators ============= */ + +// Assignment operators + +let x: number = 10; +x += 5; // x = x + 5; // Adds 5 to x and assigns the result to x +x -= 3; // x = x - 3; // Subtracts 3 from x and assigns the result to x +x *= 2; // x = x * 2; // Multiplies x by 2 and assigns the result to x +x /= 4; // x = x / 4; // Divides x by 4 and assigns the result to x +x %= 3; // x = x % 3; // Calculates the remainder when x is divided by 3 and assigns it to x +x **= 2; // x = x ** 2; // Raises x to the power of 2 and assigns the result to x + +let y: number = 5; +y <<= 1; // y = y << 1; // Left shifts y by 1 bit and assigns the result to y +y >>= 1; // y = y >> 1; // Right shifts y by 1 bit and assigns the result to y +y >>>= 1; // y = y >>> 1; // Unsigned right shifts y by 1 bit and assigns the result to y + +let z: number = 7; +z &= 3; // z = z & 3; // Performs bitwise AND on z and 3, assigns the result to z +z |= 4; // z = z | 4; // Performs bitwise OR on z and 4, assigns the result to z +z ^= 2; // z = z ^ 2; // Performs bitwise XOR on z and 2, assigns the result to z + +let str: string = 'Hello'; +str += ' World'; // str = str + " World"; // Concatenates " World" to str and assigns the result to str + +/* ============= Belonging operators ============= */ + +// in operator (for objects and arrays) +let person = { name: 'John', age: 30 }; +let car = ['Toyota', 'Honda', 'Ford']; + +console.log('name' in person); // true +console.log('color' in person); // false +console.log(0 in car); // true (0 is a valid index) +console.log(3 in car); // false (index 3 doesn't exist) + +// instanceof operator (for objects) +class Animal {} +class Dog extends Animal {} + +let myDog = new Dog(); + +console.log(myDog instanceof Dog); // true +console.log(myDog instanceof Animal); // true +console.log(myDog instanceof Object); // true + +// Array.includes() method (for arrays) +let fruits = ['apple', 'banana', 'orange']; + +console.log(fruits.includes('banana')); // true +console.log(fruits.includes('grape')); // false + +// Object.hasOwnProperty() method (for objects) +let book = { title: 'TypeScript Guide', pages: 200 }; + +console.log(book.hasOwnProperty('title')); // true +console.log(book.hasOwnProperty('author')); // false + +// String.includes() method (for strings) +let sentence = 'The quick brown fox jumps over the lazy dog'; + +console.log(sentence.includes('fox')); // true +console.log(sentence.includes('cat')); // false + +/* ============= Bitwise operators ============= */ + +// Bitwise AND (&) +// Performs a bitwise AND operation on each pair of bits +let a: number = 5; // 0101 in binary +let b: number = 3; // 0011 in binary +console.log(a & b); // 0001 in binary, outputs 1 + +// Bitwise OR (|) +// Performs a bitwise OR operation on each pair of bits +console.log(a | b); // 0111 in binary, outputs 7 + +// Bitwise XOR (^) +// Performs a bitwise XOR operation on each pair of bits +console.log(a ^ b); // 0110 in binary, outputs 6 + +// Bitwise NOT (~) +// Inverts all the bits in a single number +console.log(~a); // 1010 in binary, outputs -6 (due to two's complement) + +// Left shift (<<) +// Shifts the bits of the first operand left by the number of places specified in the second operand +console.log(a << 1); // 1010 in binary, outputs 10 + +// Sign-propagating right shift (>>) +// Shifts the bits of the first operand right by the number of places specified in the second operand +console.log(a >> 1); // 0010 in binary, outputs 2 + +// Zero-fill right shift (>>>) +// Shifts the bits of the first operand right by the number of places specified in the second operand, and shifts in zeros from the left +let c: number = -5; // 11111111111111111111111111111011 in binary (32-bit) +console.log(c >>> 1); // 01111111111111111111111111111101 in binary, outputs 2147483645 + +/* ============= Control structures ============= */ +//if statement +if (2 > 1) { + console.log('2 is greater than 1'); +} + +//if else statement +if (10 > 5) { + console.log('10 is greater than 5'); +} else { + console.log('x is equal to 5'); +} + +//if else if statement + +if (10 > 5) { + console.log('10 is greater than 5'); +} else if (10 < 5) { + console.log('10 is less than 5'); +} else { + console.log('10 is equal to 5'); +} + +//switch statement +let day: number = 3; + +switch (day) { + case 1: + console.log('Monday'); + break; + case 2: + console.log('Tuesday'); + break; +} + +//iterative statement +for (let i: number = 0; i < 10; i++) { + console.log(i); +} + +//while statement +let i: number = 0; +while (i < 10) { + console.log(i); + i++; +} + +//do while statement +let j: number = 0; +do { + console.log(j); + j++; +} while (j < 10); + +//for of statement +let colors: string[] = ['red', 'green', 'blue']; + +for (let color of colors) { + console.log(color); +} + +//for in statement +let student: { name: string; age: number } = { name: 'John', age: 30 }; + +for (let key in student) { + console.log(key); +} + +// exception handling +try { + throw new Error('This is a test error'); +} catch (error) { + console.log(error); +} + +// finally statement +try { + throw new Error('This is a test error'); +} catch (error) { + console.log(error); +} finally { + console.log('This is the finally block'); +} + +// throw statement +//throw new Error('This is a test error'); + +/* ============= Optional Programming ============= */ + +let myNumber: number = 10; + +while (myNumber <= 55 ) { + const isMultipleOfThree: boolean = myNumber % 3 === 0; + const isPair: boolean = myNumber % 2 === 0; + const notSixteen: boolean = myNumber !== 16; + + if(!isMultipleOfThree && notSixteen && isPair){ + console.log(myNumber); + } + myNumber++; +} + +// Output array: [10, 14, 20, 22, 26, 28, 32, 34, 38, 40, 44, 46, 50, 52] + + + + + From 9141306788f0839ab3dff1d43bde4dca6b61ab97 Mon Sep 17 00:00:00 2001 From: Josue-py Date: Tue, 10 Sep 2024 17:07:07 -0400 Subject: [PATCH 113/539] #00 - Python --- .../python/Josue-py.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Josue-py.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Josue-py.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Josue-py.py new file mode 100644 index 0000000000..f2aa46c7bd --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Josue-py.py @@ -0,0 +1,25 @@ +# https://www.python.org/ + +# Con el numeral se escribe un comentario de una linea. + +""" + +Con tres comillas al principio, +y al final de el texto se pueden crear, +comentarios con varias lineas + +""" + +"""Hasta donde se, en python no existen constantes,todas las variables + se pueden modificar,segun tengo entendido""" + + +animal = "Perro" # Esto es una variable. +PI = 3.14 # Esto es una constante,su valor no puede variar mientras, la variable si + +number_int = 20 +number_float = 20.5 +boolean_data = number_int == number_float +string_data = "Break the ice!" + +print("¡Hola, Python!") \ No newline at end of file From 7f2801792ee9528dfd828c7fd313359b65181a9b Mon Sep 17 00:00:00 2001 From: odin3 Date: Tue, 10 Sep 2024 23:22:08 +0200 Subject: [PATCH 114/539] Sol #35 - Python --- .../python/oriaj3.py | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/oriaj3.py diff --git a/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/oriaj3.py b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/oriaj3.py new file mode 100644 index 0000000000..71625e6ade --- /dev/null +++ b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/oriaj3.py @@ -0,0 +1,68 @@ +""" +/* + * EJERCICIO: + * ¡La temporada 2 de "Los Anillos de Poder" está a punto de estrenarse! + * ¿Qué pasaría si tuvieras que encargarte de repartir los anillos + * entre las razas de la Tierra Media? + * Desarrolla un programa que se encargue de distribuirlos. + * Requisitos: + * 1. Los Elfos recibirán un número impar. + * 2. Los Enanos un número primo. + * 3. Los Hombres un número par. + * 4. Sauron siempre uno. + * Acciones: + * 1. Crea un programa que reciba el número total de anillos + * y busque una posible combinación para repartirlos. + * 2. Muestra el reparto final o el error al realizarlo. + */ +""" +def es_par(numero): + if numero%2 == 0: + return True + else: + return False + +def es_primo(numero): + es_primo = True + if numero<2: + return False + for i in range(2, int(numero/2 + 1 )): + if numero % i == 0: + es_primo = False + if es_primo: + return True + else: + return False + +def distribucion_anillos(anillos): + sauron = 1 + anillos -= sauron + distribuciones = [] + for hombres in range (2, anillos, 2): + for elfos in range (1, anillos, 2): + enanos = anillos - hombres - elfos + if enanos > 0 and es_primo(enanos): + distribuciones.append( + { + "Hombres": hombres, + "Elfos": elfos, + "Enanos": enanos, + "Saruon": sauron + } + ) + if distribuciones: + return distribuciones + else: + return "No es posible repartir los anillos según las normas. " +try: + anillos_user = int(input("Introduce el número de anillos de poder a repartir: ")) + distribucion_user = distribucion_anillos(anillos_user) + if isinstance(distribucion_user, list): + for index, item in enumerate(distribucion_user): + print(f"{index}. {item}") + + print(f"La distribución elegida/media es: \n {distribucion_user[int(len(distribucion_user)/2)]}") + else: + print(distribucion_user) +except ValueError: + print("Introduce un número válido. ") \ No newline at end of file From ae38e241f36f2875b363f540123a5c79e69613c6 Mon Sep 17 00:00:00 2001 From: fborjalv Date: Tue, 10 Sep 2024 23:42:32 +0200 Subject: [PATCH 115/539] #32 - Python --- .../python/fborjalv.py | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/fborjalv.py diff --git a/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/fborjalv.py b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/fborjalv.py new file mode 100644 index 0000000000..1d6ba1955f --- /dev/null +++ b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/fborjalv.py @@ -0,0 +1,122 @@ +""" + +/* + * EJERCICIO: + * ¡Deadpool y Wolverine se enfrentan en una batalla épica! + * Crea un programa que simule la pelea y determine un ganador. + * El programa simula un combate por turnos, donde cada protagonista posee unos + * puntos de vida iniciales, un daño de ataque variable y diferentes cualidades + * de regeneración y evasión de ataques. + * Requisitos: + * 1. El usuario debe determinar la vida inicial de cada protagonista. ✅ + * 2. Cada personaje puede impartir un daño aleatorio: ✅ + * - Deadpool: Entre 10 y 100. + * - Wolverine: Entre 10 y 120. + * 3. Si el daño es el máximo, el personaje que lo recibe no ataca en el ✅ + * siguiente turno, ya que tiene que regenerarse (pero no aumenta vida). + * 4. Cada personaje puede evitar el ataque contrario: ✅ + * - Deadpool: 25% de posibilidades. + * - Wolverine: 20% de posibilidades. + * 5. Un personaje pierde si sus puntos de vida llegan a cero o menos. ✅ + * Acciones: + * 1. Simula una batalla. ✅ + * 2. Muestra el número del turno (pausa de 1 segundo entre turnos). ✅ + * 3. Muestra qué pasa en cada turno. ✅ + * 4. Muestra la vida en cada turno. ✅ + * 5. Muestra el resultado final. ✅ + */ + + +""" + +import random +from time import sleep +class Character: + def __init__(self, health) -> None: + self.name = "" + self.health = health + self.min_damage = 0 + self.max_damage = 0 + self.damage = 0 + self.evassion = 0 + def evade_attack(self): + return random.random() < self.evassion + + def attack(self, enemy): + self.damage = random.randint(self.min_damage, self.max_damage) + if not enemy.evade_attack(): + enemy.health -= self.damage + print(f"{self.name} ha golpeado a {enemy.name}. Ha realizado un ataque de {self.damage} puntos") + print(f"Ahora la salud de {enemy.name} es de {enemy.health}") + else: + print(f"{enemy.name} ha evitado el ataque de {self.name}") + + def is_critical(self, enemy): + if self.damage == self.max_damage: + print(f"{self.name} le ha dado golpe críticoa {enemy.name}, que pierde un turno de ataque para regenerarse") + return True + else: + return False + +class Deadpool(Character): + def __init__(self, health) -> None: + super().__init__(health) + self.name = "Deadpool" + self.min_damage = 10 + self.max_damage = 100 + self.evassion = 0.25 + + +class Wolverine(Character): + def __init__(self, health) -> None: + super().__init__(health) + self.name = "Wolverine" + self.min_damage = 10 + self.max_damage = 120 + self.evassion = 0.2 + +class Game: + + def __init__(self) -> None: + dp_health = int(input("Introduce puntos de salud para Deadpool: ")) + wv_health = int(input("Introduce puntos de salud para Wolverine: ")) + self.player1, self.player2 = random.sample([Deadpool(dp_health), Wolverine(wv_health)], 2) + self.turn = 0 + + def is_character_alive(self): + if self.player1.health <= 0 or self.player2.health <=0: + winner = max(self.player1, self.player2, key= lambda x: x.health) + loser = min(self.player1, self.player2, key= lambda x: x.health) + print(f"{winner.name} ha ganado el combate a {loser.name}") + return False + else: + return True + + + def init_game(self): + + print(f"{self.player1.name} comienza atacando a {self.player2.name}") + turn_off_player1 = False + turn_off_player2 = False + while self.player1.health > 0 and self.player2.health > 0: + + sleep(3) + print(f"Turno: {self.turn} ----------") + self.turn +=1 + if not turn_off_player1: + self.player1.attack(self.player2) + if not self.is_character_alive(): break + turn_off_player2 = False + if self.player1.is_critical(self.player2): + turn_off_player2 = True + + if not turn_off_player2: + self.player2.attack(self.player1) + if not self.is_character_alive(): break + turn_off_player1 = False + if self.player2.is_critical(self.player1): + turn_off_player1 = True + + +system = Game() +system.init_game() From 92d799d3ddeb0cd58d433bfa2e2deda6734e0a3a Mon Sep 17 00:00:00 2001 From: mouredev Date: Wed, 11 Sep 2024 00:14:49 +0000 Subject: [PATCH 116/539] Update stats --- Roadmap/stats.json | 532 +++++++++++++++++++++++---------------------- 1 file changed, 272 insertions(+), 260 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index d1aebb947e..f796199d6f 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,13 +1,13 @@ { "challenges_total": 38, "languages_total": 48, - "files_total": 6920, - "users_total": 1158, + "files_total": 6933, + "users_total": 1160, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1261 + "count": 1262 }, { "order": 2, @@ -17,7 +17,7 @@ { "order": 3, "name": "02 - FUNCIONES Y ALCANCE", - "count": 585 + "count": 586 }, { "order": 4, @@ -62,7 +62,7 @@ { "order": 12, "name": "11 - MANEJO DE FICHEROS", - "count": 155 + "count": 156 }, { "order": 13, @@ -82,12 +82,12 @@ { "order": 16, "name": "16 - EXPRESIONES REGULARES", - "count": 124 + "count": 125 }, { "order": 17, "name": "15 - ASINCRON\u00cdA", - "count": 123 + "count": 124 }, { "order": 18, @@ -107,7 +107,7 @@ { "order": 21, "name": "20 - PETICIONES HTTP", - "count": 96 + "count": 97 }, { "order": 22, @@ -147,12 +147,12 @@ { "order": 29, "name": "28 - SOLID LSP", - "count": 56 + "count": 57 }, { "order": 30, "name": "29 - SOLID ISP", - "count": 53 + "count": 54 }, { "order": 31, @@ -182,79 +182,79 @@ { "order": 36, "name": "36 - EL SOMBRERO SELECCIONADOR", - "count": 36 + "count": 37 }, { "order": 37, "name": "34 - \u00c1RBOL GENEAL\u00d3GICO LA CASA DEL DRAG\u00d3N", - "count": 32 + "count": 33 }, { "order": 38, "name": "37 - OASIS VS LINKIN PARK", - "count": 0 + "count": 3 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 2979, + "count": 2985, "percentage": 43.05 }, { "order": 2, "name": "javascript", - "count": 1378, - "percentage": 19.91 + "count": 1379, + "percentage": 19.89 }, { "order": 3, "name": "java", - "count": 619, - "percentage": 8.95 + "count": 622, + "percentage": 8.97 }, { "order": 4, "name": "typescript", "count": 305, - "percentage": 4.41 + "percentage": 4.4 }, { "order": 5, "name": "c#", "count": 253, - "percentage": 3.66 + "percentage": 3.65 }, { "order": 6, "name": "kotlin", - "count": 215, - "percentage": 3.11 + "count": 217, + "percentage": 3.13 }, { "order": 7, "name": "go", "count": 213, - "percentage": 3.08 + "percentage": 3.07 }, { "order": 8, "name": "swift", "count": 166, - "percentage": 2.4 + "percentage": 2.39 }, { "order": 9, "name": "php", "count": 152, - "percentage": 2.2 + "percentage": 2.19 }, { "order": 10, "name": "c++", - "count": 114, - "percentage": 1.65 + "count": 115, + "percentage": 1.66 }, { "order": 11, @@ -579,7 +579,7 @@ { "order": 16, "name": "cesarcarmona30", - "count": 50, + "count": 51, "languages": 4 }, { @@ -668,31 +668,31 @@ }, { "order": 31, - "name": "mouredev", + "name": "emmanuelmmontesinos", "count": 37, "languages": 1 }, { "order": 32, - "name": "asjordi", + "name": "mouredev", "count": 37, "languages": 1 }, { "order": 33, - "name": "n0hagonada", - "count": 36, - "languages": 3 + "name": "asjordi", + "count": 37, + "languages": 1 }, { "order": 34, - "name": "rauldoezon", + "name": "n0hagonada", "count": 36, - "languages": 1 + "languages": 3 }, { "order": 35, - "name": "emmanuelmmontesinos", + "name": "rauldoezon", "count": 36, "languages": 1 }, @@ -704,21 +704,21 @@ }, { "order": 37, - "name": "angelsanchezt", - "count": 34, - "languages": 12 + "name": "oriaj3", + "count": 35, + "languages": 1 }, { "order": 38, - "name": "rikmij", + "name": "angelsanchezt", "count": 34, - "languages": 2 + "languages": 12 }, { "order": 39, - "name": "oriaj3", + "name": "rikmij", "count": 34, - "languages": 1 + "languages": 2 }, { "order": 40, @@ -776,46 +776,46 @@ }, { "order": 49, - "name": "alanshakir", + "name": "eulogioep", "count": 30, "languages": 1 }, { "order": 50, - "name": "soohav", + "name": "alanshakir", "count": 30, "languages": 1 }, { "order": 51, + "name": "soohav", + "count": 30, + "languages": 1 + }, + { + "order": 52, "name": "raynerpv2022", "count": 29, "languages": 2 }, { - "order": 52, + "order": 53, "name": "any7dev", "count": 29, "languages": 2 }, { - "order": 53, + "order": 54, "name": "adra-dev", "count": 29, "languages": 1 }, { - "order": 54, + "order": 55, "name": "bernatcs", "count": 28, "languages": 2 }, - { - "order": 55, - "name": "eulogioep", - "count": 28, - "languages": 1 - }, { "order": 56, "name": "thegera4", @@ -969,7 +969,7 @@ { "order": 81, "name": "simonguzman", - "count": 20, + "count": 21, "languages": 1 }, { @@ -1064,85 +1064,85 @@ }, { "order": 97, + "name": "gordo-master", + "count": 17, + "languages": 1 + }, + { + "order": 98, "name": "rxvlc", "count": 16, "languages": 3 }, { - "order": 98, + "order": 99, "name": "sergiogi99", "count": 16, "languages": 2 }, { - "order": 99, + "order": 100, "name": "mariovelascodev", "count": 16, "languages": 2 }, { - "order": 100, + "order": 101, "name": "kontroldev", "count": 16, "languages": 1 }, { - "order": 101, + "order": 102, "name": "artickun", "count": 16, "languages": 1 }, { - "order": 102, + "order": 103, "name": "oniricoh", "count": 16, "languages": 1 }, { - "order": 103, + "order": 104, "name": "danielhdzr", "count": 16, "languages": 1 }, { - "order": 104, + "order": 105, "name": "kuroz00", "count": 15, "languages": 3 }, { - "order": 105, + "order": 106, "name": "alvaro-neyra", "count": 15, "languages": 2 }, { - "order": 106, + "order": 107, "name": "tofedev", "count": 15, "languages": 2 }, { - "order": 107, + "order": 108, "name": "eugeniasoria", "count": 15, "languages": 2 }, - { - "order": 108, - "name": "seandsun", - "count": 15, - "languages": 1 - }, { "order": 109, - "name": "jafeito", + "name": "seandsun", "count": 15, "languages": 1 }, { "order": 110, - "name": "gordo-master", + "name": "jafeito", "count": 15, "languages": 1 }, @@ -1196,73 +1196,73 @@ }, { "order": 119, - "name": "paula2409", + "name": "mvidalb", "count": 14, "languages": 1 }, { "order": 120, - "name": "volumidev", - "count": 13, - "languages": 3 + "name": "paula2409", + "count": 14, + "languages": 1 }, { "order": 121, - "name": "diegoibb", + "name": "volumidev", "count": 13, "languages": 3 }, { "order": 122, - "name": "manjaitan", + "name": "diegoibb", "count": 13, - "languages": 2 + "languages": 3 }, { "order": 123, - "name": "jesuses1312", + "name": "manjaitan", "count": 13, "languages": 2 }, { "order": 124, - "name": "ocram1304", + "name": "jesuses1312", "count": 13, - "languages": 1 + "languages": 2 }, { "order": 125, - "name": "dan-corbo", + "name": "ocram1304", "count": 13, "languages": 1 }, { "order": 126, - "name": "juanchernandezdev", + "name": "dan-corbo", "count": 13, "languages": 1 }, { "order": 127, - "name": "c-gabs", + "name": "juanchernandezdev", "count": 13, "languages": 1 }, { "order": 128, - "name": "jav-mol", + "name": "c-gabs", "count": 13, "languages": 1 }, { "order": 129, - "name": "tomu98", + "name": "jav-mol", "count": 13, "languages": 1 }, { "order": 130, - "name": "mvidalb", + "name": "tomu98", "count": 13, "languages": 1 }, @@ -1916,157 +1916,157 @@ }, { "order": 239, - "name": "luisk0706", + "name": "oixild", "count": 6, "languages": 2 }, { "order": 240, - "name": "rserradev", + "name": "luisk0706", "count": 6, "languages": 2 }, { "order": 241, - "name": "roswer13", + "name": "rserradev", "count": 6, "languages": 2 }, { "order": 242, - "name": "glossypath", + "name": "roswer13", "count": 6, - "languages": 1 + "languages": 2 }, { "order": 243, - "name": "guillemduno", + "name": "glossypath", "count": 6, "languages": 1 }, { "order": 244, - "name": "mxtrar23", + "name": "guillemduno", "count": 6, "languages": 1 }, { "order": 245, - "name": "dannymarperone", + "name": "mxtrar23", "count": 6, "languages": 1 }, { "order": 246, - "name": "facundo-muoio", + "name": "dannymarperone", "count": 6, "languages": 1 }, { "order": 247, - "name": "lazar171717ech", + "name": "facundo-muoio", "count": 6, "languages": 1 }, { "order": 248, - "name": "eduhumanes91", + "name": "lazar171717ech", "count": 6, "languages": 1 }, { "order": 249, - "name": "abascal92", + "name": "eduhumanes91", "count": 6, "languages": 1 }, { "order": 250, - "name": "blancowilson", + "name": "abascal92", "count": 6, "languages": 1 }, { "order": 251, - "name": "eamartin96", + "name": "blancowilson", "count": 6, "languages": 1 }, { "order": 252, - "name": "dafi02", + "name": "eamartin96", "count": 6, "languages": 1 }, { "order": 253, - "name": "gliadev", + "name": "dafi02", "count": 6, "languages": 1 }, { "order": 254, - "name": "wolffcode", + "name": "gliadev", "count": 6, "languages": 1 }, { "order": 255, - "name": "yeisonagm", + "name": "wolffcode", "count": 6, "languages": 1 }, { "order": 256, - "name": "bryan112094", - "count": 5, - "languages": 3 + "name": "yeisonagm", + "count": 6, + "languages": 1 }, { "order": 257, - "name": "alabacw74", + "name": "bryan112094", "count": 5, "languages": 3 }, { "order": 258, - "name": "jalivur", + "name": "alabacw74", "count": 5, - "languages": 2 + "languages": 3 }, { "order": 259, - "name": "icedrek", + "name": "jalivur", "count": 5, "languages": 2 }, { "order": 260, - "name": "vmatmarco", + "name": "icedrek", "count": 5, "languages": 2 }, { "order": 261, - "name": "alejandrodave", + "name": "vmatmarco", "count": 5, "languages": 2 }, { "order": 262, - "name": "espinoleandroo", + "name": "alejandrodave", "count": 5, "languages": 2 }, { "order": 263, - "name": "andresmendozaf", + "name": "espinoleandroo", "count": 5, "languages": 2 }, { "order": 264, - "name": "oixild", + "name": "andresmendozaf", "count": 5, "languages": 2 }, @@ -2264,421 +2264,421 @@ }, { "order": 297, - "name": "boterop", + "name": "mohamedelderkaoui", "count": 5, "languages": 1 }, { "order": 298, - "name": "rafacv23", + "name": "boterop", "count": 5, "languages": 1 }, { "order": 299, - "name": "zarakilancelot", - "count": 4, - "languages": 3 + "name": "rafacv23", + "count": 5, + "languages": 1 }, { "order": 300, - "name": "eonozux", + "name": "zarakilancelot", "count": 4, - "languages": 2 + "languages": 3 }, { "order": 301, - "name": "yablik", + "name": "eonozux", "count": 4, "languages": 2 }, { "order": 302, - "name": "fullovellas", + "name": "yablik", "count": 4, "languages": 2 }, { "order": 303, - "name": "k3nvd", + "name": "fullovellas", "count": 4, "languages": 2 }, { "order": 304, - "name": "josefuentes-dev", + "name": "k3nvd", "count": 4, "languages": 2 }, { "order": 305, - "name": "willr30", + "name": "josefuentes-dev", "count": 4, "languages": 2 }, { "order": 306, - "name": "ruthmp", + "name": "willr30", "count": 4, "languages": 2 }, { "order": 307, - "name": "daeduol", + "name": "ruthmp", "count": 4, "languages": 2 }, { "order": 308, - "name": "mendozalz", + "name": "daeduol", "count": 4, "languages": 2 }, { "order": 309, - "name": "salkalero", + "name": "mendozalz", "count": 4, "languages": 2 }, { "order": 310, - "name": "drvito1977", + "name": "salkalero", "count": 4, - "languages": 1 + "languages": 2 }, { "order": 311, - "name": "elhacedordecosas", + "name": "drvito1977", "count": 4, "languages": 1 }, { "order": 312, - "name": "andeveling", + "name": "elhacedordecosas", "count": 4, "languages": 1 }, { "order": 313, - "name": "santiago-munoz-garcia", + "name": "andeveling", "count": 4, "languages": 1 }, { "order": 314, - "name": "deivitdev", + "name": "santiago-munoz-garcia", "count": 4, "languages": 1 }, { "order": 315, - "name": "joshbaez", + "name": "deivitdev", "count": 4, "languages": 1 }, { "order": 316, - "name": "marcoslombardo", + "name": "joshbaez", "count": 4, "languages": 1 }, { "order": 317, - "name": "lrpeset", + "name": "marcoslombardo", "count": 4, "languages": 1 }, { "order": 318, - "name": "dieswae", + "name": "lrpeset", "count": 4, "languages": 1 }, { "order": 319, - "name": "mateo423", + "name": "dieswae", "count": 4, "languages": 1 }, { "order": 320, - "name": "joaquinlopez14", + "name": "mateo423", "count": 4, "languages": 1 }, { "order": 321, - "name": "angelurrutdev", + "name": "joaquinlopez14", "count": 4, "languages": 1 }, { "order": 322, - "name": "elianisdev", + "name": "angelurrutdev", "count": 4, "languages": 1 }, { "order": 323, - "name": "omegatroy", + "name": "elianisdev", "count": 4, "languages": 1 }, { "order": 324, - "name": "socramwd", + "name": "omegatroy", "count": 4, "languages": 1 }, { "order": 325, - "name": "carzep09", + "name": "socramwd", "count": 4, "languages": 1 }, { "order": 326, - "name": "mayerga", + "name": "carzep09", "count": 4, "languages": 1 }, { "order": 327, - "name": "hugovrc", + "name": "mayerga", "count": 4, "languages": 1 }, { "order": 328, - "name": "cdbiancotti", + "name": "hugovrc", "count": 4, "languages": 1 }, { "order": 329, - "name": "h4ckxel", + "name": "cdbiancotti", "count": 4, "languages": 1 }, { "order": 330, - "name": "tobibordino", + "name": "h4ckxel", "count": 4, "languages": 1 }, { "order": 331, - "name": "guillermo-k", + "name": "tobibordino", "count": 4, "languages": 1 }, { "order": 332, - "name": "zakkdrte", + "name": "guillermo-k", "count": 4, "languages": 1 }, { "order": 333, - "name": "sarismejiasanchez", + "name": "zakkdrte", "count": 4, "languages": 1 }, { "order": 334, - "name": "buriticasara", + "name": "sarismejiasanchez", "count": 4, "languages": 1 }, { "order": 335, - "name": "davstudy", + "name": "buriticasara", "count": 4, "languages": 1 }, { "order": 336, - "name": "zerek247", + "name": "davstudy", "count": 4, "languages": 1 }, { "order": 337, - "name": "vicman-182", + "name": "zerek247", "count": 4, "languages": 1 }, { "order": 338, - "name": "dlgai12", + "name": "vicman-182", "count": 4, "languages": 1 }, { "order": 339, - "name": "rodrigoghr", + "name": "dlgai12", "count": 4, "languages": 1 }, { "order": 340, - "name": "txuky", + "name": "rodrigoghr", "count": 4, "languages": 1 }, { "order": 341, - "name": "nox456", + "name": "txuky", "count": 4, "languages": 1 }, { "order": 342, - "name": "mplatab", + "name": "nox456", "count": 4, "languages": 1 }, { "order": 343, - "name": "angell4s", + "name": "mplatab", "count": 4, "languages": 1 }, { "order": 344, - "name": "quejuan52", + "name": "angell4s", "count": 4, "languages": 1 }, { "order": 345, - "name": "axelprz", + "name": "quejuan52", "count": 4, "languages": 1 }, { "order": 346, - "name": "javirub", + "name": "axelprz", "count": 4, "languages": 1 }, { "order": 347, - "name": "mallcca", + "name": "javirub", "count": 4, "languages": 1 }, { "order": 348, - "name": "sunjamer", + "name": "mallcca", "count": 4, "languages": 1 }, { "order": 349, - "name": "carrenoalexander", + "name": "sunjamer", "count": 4, "languages": 1 }, { "order": 350, - "name": "jadraz", + "name": "carrenoalexander", "count": 4, "languages": 1 }, { "order": 351, - "name": "anvildestroyer", + "name": "jadraz", "count": 4, "languages": 1 }, { "order": 352, - "name": "luissssoto", + "name": "anvildestroyer", "count": 4, "languages": 1 }, { "order": 353, - "name": "albertorevel", + "name": "luissssoto", "count": 4, "languages": 1 }, { "order": 354, - "name": "juanca2805", + "name": "albertorevel", "count": 4, "languages": 1 }, { "order": 355, - "name": "bladi23", + "name": "juanca2805", "count": 4, "languages": 1 }, { "order": 356, - "name": "blasbarragan", + "name": "bladi23", "count": 4, "languages": 1 }, { "order": 357, - "name": "jerrysantana", + "name": "blasbarragan", "count": 4, "languages": 1 }, { "order": 358, - "name": "abel-ade", + "name": "jerrysantana", "count": 4, "languages": 1 }, { "order": 359, - "name": "jairo-alejandro", + "name": "abel-ade", "count": 4, "languages": 1 }, { "order": 360, - "name": "sbs24", + "name": "jairo-alejandro", "count": 4, "languages": 1 }, { "order": 361, - "name": "traver79", + "name": "sbs24", "count": 4, "languages": 1 }, { "order": 362, - "name": "ramxv", + "name": "traver79", "count": 4, "languages": 1 }, { "order": 363, - "name": "inkhemi", + "name": "ramxv", "count": 4, "languages": 1 }, { "order": 364, - "name": "juperdev", + "name": "inkhemi", "count": 4, "languages": 1 }, { "order": 365, - "name": "d1d4cum", + "name": "juperdev", "count": 4, "languages": 1 }, { "order": 366, - "name": "mohamedelderkaoui", + "name": "d1d4cum", "count": 4, "languages": 1 }, @@ -7028,408 +7028,420 @@ }, { "order": 1091, - "name": "pvigo10", + "name": "password1989", "count": 1, "languages": 1 }, { "order": 1092, - "name": "clespinosa2024", + "name": "pvigo10", "count": 1, "languages": 1 }, { "order": 1093, - "name": "danisaurio94", + "name": "clespinosa2024", "count": 1, "languages": 1 }, { "order": 1094, - "name": "jaquelinetorres", + "name": "danisaurio94", "count": 1, "languages": 1 }, { "order": 1095, - "name": "javosss", + "name": "jaquelinetorres", "count": 1, "languages": 1 }, { "order": 1096, - "name": "eduardo282", + "name": "javosss", "count": 1, "languages": 1 }, { "order": 1097, - "name": "franespina", + "name": "eduardo282", "count": 1, "languages": 1 }, { "order": 1098, - "name": "davidbastosg", + "name": "franespina", "count": 1, "languages": 1 }, { "order": 1099, - "name": "carlosmares", + "name": "davidbastosg", "count": 1, "languages": 1 }, { "order": 1100, - "name": "rawc1nnamon", + "name": "carlosmares", "count": 1, "languages": 1 }, { "order": 1101, - "name": "deivisaherreraj", + "name": "rawc1nnamon", "count": 1, "languages": 1 }, { "order": 1102, - "name": "alfaroo1", + "name": "deivisaherreraj", "count": 1, "languages": 1 }, { "order": 1103, - "name": "astrarothdlcxvi", + "name": "alfaroo1", "count": 1, "languages": 1 }, { "order": 1104, - "name": "kerunaru", + "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { "order": 1105, - "name": "marcosalvarezcalabria", + "name": "kerunaru", "count": 1, "languages": 1 }, { "order": 1106, - "name": "orzefox", + "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { "order": 1107, - "name": "acirdeveloper", + "name": "orzefox", "count": 1, "languages": 1 }, { "order": 1108, - "name": "emiliordev", + "name": "acirdeveloper", "count": 1, "languages": 1 }, { "order": 1109, - "name": "sve-nnn", + "name": "emiliordev", "count": 1, "languages": 1 }, { "order": 1110, - "name": "edgarmedranoa", + "name": "sve-nnn", "count": 1, "languages": 1 }, { "order": 1111, - "name": "rafapg93", + "name": "edgarmedranoa", "count": 1, "languages": 1 }, { "order": 1112, - "name": "vickalc", + "name": "rafapg93", "count": 1, "languages": 1 }, { "order": 1113, - "name": "riukac", + "name": "vickalc", "count": 1, "languages": 1 }, { "order": 1114, - "name": "rusian69", + "name": "riukac", "count": 1, "languages": 1 }, { "order": 1115, - "name": "wijimenezz", + "name": "rusian69", "count": 1, "languages": 1 }, { "order": 1116, - "name": "albertovf", + "name": "wijimenezz", "count": 1, "languages": 1 }, { "order": 1117, - "name": "markayala13", + "name": "albertovf", "count": 1, "languages": 1 }, { "order": 1118, - "name": "rocha30", + "name": "markayala13", "count": 1, "languages": 1 }, { "order": 1119, - "name": "righelch", + "name": "rocha30", "count": 1, "languages": 1 }, { "order": 1120, - "name": "deathbat00", + "name": "righelch", "count": 1, "languages": 1 }, { "order": 1121, - "name": "nicoloboo02", + "name": "deathbat00", "count": 1, "languages": 1 }, { "order": 1122, - "name": "sergiopq", + "name": "nicoloboo02", "count": 1, "languages": 1 }, { "order": 1123, - "name": "angeloro", + "name": "sergiopq", "count": 1, "languages": 1 }, { "order": 1124, - "name": "jony-english22", + "name": "angeloro", "count": 1, "languages": 1 }, { "order": 1125, - "name": "lordzzz", + "name": "jony-english22", "count": 1, "languages": 1 }, { "order": 1126, - "name": "alinares94", + "name": "tilordqwerty", "count": 1, "languages": 1 }, { "order": 1127, - "name": "jferchotorres", + "name": "lordzzz", "count": 1, "languages": 1 }, { "order": 1128, - "name": "713avo", + "name": "alinares94", "count": 1, "languages": 1 }, { "order": 1129, - "name": "micendev", + "name": "jferchotorres", "count": 1, "languages": 1 }, { "order": 1130, - "name": "ingjavierpinilla", + "name": "713avo", "count": 1, "languages": 1 }, { "order": 1131, - "name": "batmarc91", + "name": "micendev", "count": 1, "languages": 1 }, { "order": 1132, - "name": "angel-agis", + "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { "order": 1133, - "name": "lesterdavid31", + "name": "batmarc91", "count": 1, "languages": 1 }, { "order": 1134, - "name": "joancharles07", + "name": "angel-agis", "count": 1, "languages": 1 }, { "order": 1135, - "name": "mauricioobgo", + "name": "lesterdavid31", "count": 1, "languages": 1 }, { "order": 1136, - "name": "cuervo23alpha", + "name": "joancharles07", "count": 1, "languages": 1 }, { "order": 1137, - "name": "h4cker54n", + "name": "mauricioobgo", "count": 1, "languages": 1 }, { "order": 1138, - "name": "derobpe", + "name": "cuervo23alpha", "count": 1, "languages": 1 }, { "order": 1139, - "name": "willypaz243", + "name": "h4cker54n", "count": 1, "languages": 1 }, { "order": 1140, - "name": "emersonxinay", + "name": "derobpe", "count": 1, "languages": 1 }, { "order": 1141, - "name": "alecraft8", + "name": "willypaz243", "count": 1, "languages": 1 }, { "order": 1142, - "name": "greenalpak", + "name": "emersonxinay", "count": 1, "languages": 1 }, { "order": 1143, - "name": "juampaweb", + "name": "alecraft8", "count": 1, "languages": 1 }, { "order": 1144, - "name": "girngoma", + "name": "greenalpak", "count": 1, "languages": 1 }, { "order": 1145, - "name": "jjaljuria", + "name": "juampaweb", "count": 1, "languages": 1 }, { "order": 1146, - "name": "ddaniel27", + "name": "girngoma", "count": 1, "languages": 1 }, { "order": 1147, - "name": "dfc201692", + "name": "jjaljuria", "count": 1, "languages": 1 }, { "order": 1148, - "name": "angelramirez02", + "name": "ddaniel27", "count": 1, "languages": 1 }, { "order": 1149, - "name": "lesclaz", + "name": "dfc201692", "count": 1, "languages": 1 }, { "order": 1150, - "name": "giovannipeirone", + "name": "angelramirez02", "count": 1, "languages": 1 }, { "order": 1151, - "name": "whiterbb", + "name": "lesclaz", "count": 1, "languages": 1 }, { "order": 1152, - "name": "adridiazz", + "name": "giovannipeirone", "count": 1, "languages": 1 }, { "order": 1153, - "name": "jesus2421", + "name": "whiterbb", "count": 1, "languages": 1 }, { "order": 1154, - "name": "euu92", + "name": "adridiazz", "count": 1, "languages": 1 }, { "order": 1155, - "name": "santyjl44", + "name": "jesus2421", "count": 1, "languages": 1 }, { "order": 1156, - "name": "luism95", + "name": "euu92", "count": 1, "languages": 1 }, { "order": 1157, - "name": "ouendinga", + "name": "santyjl44", "count": 1, "languages": 1 }, { "order": 1158, + "name": "luism95", + "count": 1, + "languages": 1 + }, + { + "order": 1159, + "name": "ouendinga", + "count": 1, + "languages": 1 + }, + { + "order": 1160, "name": "melonconyogurt", "count": 1, "languages": 1 From e415ac03eca9e7d69398725efcbcbc46ce6f5d46 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Tue, 10 Sep 2024 19:15:03 -0500 Subject: [PATCH 117/539] Ejemplo de callback completado --- Roadmap/21 - CALLBACKS/java/simonguzman.java | 28 ++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Roadmap/21 - CALLBACKS/java/simonguzman.java diff --git a/Roadmap/21 - CALLBACKS/java/simonguzman.java b/Roadmap/21 - CALLBACKS/java/simonguzman.java new file mode 100644 index 0000000000..e63cfb2378 --- /dev/null +++ b/Roadmap/21 - CALLBACKS/java/simonguzman.java @@ -0,0 +1,28 @@ +public class simonguzman { + public static void main(String[] args) { + callbackExample(); + } + + public static void callbackExample(){ + System.out.println("Iniciando el programa..."); + Processor processor = new Processor(); + processor.process(message -> System.out.println("Callback recibido: " + message)); + System.out.println("Programa finalizado."); + } + + public static interface Callback{ + void execute(String message); + } + + public static class Processor{ + public void process(Callback callback){ + System.out.println("Procesando..."); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + callback.execute("Proceso completo"); + } + } +} From 1c310cdaccf1148cf1f4f164b203e7522b0add05 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Tue, 10 Sep 2024 19:41:04 -0500 Subject: [PATCH 118/539] ejercicio #21 completado --- Roadmap/21 - CALLBACKS/java/simonguzman.java | 56 +++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/Roadmap/21 - CALLBACKS/java/simonguzman.java b/Roadmap/21 - CALLBACKS/java/simonguzman.java index e63cfb2378..c913c50b58 100644 --- a/Roadmap/21 - CALLBACKS/java/simonguzman.java +++ b/Roadmap/21 - CALLBACKS/java/simonguzman.java @@ -1,8 +1,62 @@ +import java.util.Random; +import java.util.concurrent.TimeUnit; + public class simonguzman { public static void main(String[] args) { - callbackExample(); + //callbackExample(); + restaurantExercise(); + } + + /********************** Ejercicio adicional **********************/ + + public static void restaurantExercise(){ + RestaurantOrder order = new RestaurantOrder(); + + // Procesar pedido con callbacks + order.processOrder("Pizza", + (dish) -> System.out.println("Confirmación: Se ha confirmado el pedido de " + dish), + (dish) -> System.out.println("Listo: El plato " + dish + " está listo para ser servido"), + (dish) -> System.out.println("Entregado: El plato " + dish + " ha sido entregado") + ); + } + public static interface ConfirmCallback{ + void OnConfirm(String dish); + } + + public static interface ReadyCallback{ + void OnReady(String dish); + } + + public static interface DeliveryCallback{ + void OnDelivery(String dish); + } + + public static class RestaurantOrder{ + private Random random = new Random(); + public void processOrder(String dish, ConfirmCallback confirmcallback, ReadyCallback readyCallback, DeliveryCallback deliveryCallback){ + confirmcallback.OnConfirm(dish); + proccessRestaurant(dish, confirmcallback, readyCallback, deliveryCallback); + } + + public void proccessRestaurant(String dish, ConfirmCallback confirmcallback, ReadyCallback readyCallback, DeliveryCallback deliveryCallback){ + + try { + int preparationTime = random.nextInt(10) + 1; + TimeUnit.SECONDS.sleep(preparationTime); + + readyCallback.OnReady(dish); + + int deliveryTime = random.nextInt(10) + 1; + TimeUnit.SECONDS.sleep(deliveryTime); + + deliveryCallback.OnDelivery(dish); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } + /********************** Ejercicio principal - Ejemplo de Callback **********************/ public static void callbackExample(){ System.out.println("Iniciando el programa..."); Processor processor = new Processor(); From be7268ef4b6033abe0e1a69172d493f4ee08a7b0 Mon Sep 17 00:00:00 2001 From: Erysnell Gonzalez Perez <118245971+Erysnell@users.noreply.github.com> Date: Tue, 10 Sep 2024 21:37:40 -0400 Subject: [PATCH 119/539] Create #01-Javascript --- .../javascript/#01-Javascript | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/#01-Javascript diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/#01-Javascript b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/#01-Javascript new file mode 100644 index 0000000000..04a44a6371 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/#01-Javascript @@ -0,0 +1,99 @@ +// Aritméticos +console.log(5 + 3); +console.log(7 - 2); +console.log(4 * 6); +console.log(9 % 4); + +// Lógicos +let x = true; +let y = false; + +console.log(x && y); +console.log(x || y); +console.log(!x); + +// Comparación +console.log(5 > 3); +console.log(3 < 5); +console.log(5 >= 3); +console.log(3 <= 5); +console.log(5 == 3); +console.log(5 != 3); +console.log(5 === 3); +console.log(5 !== 3); + +// Asignación +let z = 0; +z += 5; +z -= 3; +z *= 2; +z /= 2; + +// Identidad +console.log(z === z); + +// Pertenencia +const array = [1, 2, 3, 4, 5]; +console.log(array.includes(3)); + +// Bits +console.log(5 & 3); +console.log(5 | 3); +console.log(~5); + +// Condicionales +if (true) { + console.log("Esta es una condición verdadera"); +} else { + console.log("Esta es una condición falsa"); +} + +switch (2) { + case 1: + console.log("Es 1"); + break; + case 2: + console.log("Es 2"); + break; + default: + console.log("No es 1 ni 2"); +} + +// Iterativas +for (let i = 0; i < 5; i++) { + console.log(i); +} + +while (true) { + console.log("Este bucle mientras sea cierto"); + break; // Para evitar un bucle infinito +} + +do { + console.log("Este bucle se ejecuta al menos una vez"); +} while (false); + +// Excepciones +try { + throw new Error("Excepción lanzada intencionalmente"); +} catch (error) { + console.error(error.message); +} + +function isEven(num) { + return num % 2 === 0; +} + +function isNotMultipleOfThree(num) { + return num % 3 !== 0; +} + +function isNotSixteen(num) { + return num !== 16; +} + +for (let i = 10; i <= 55; i++) { + if (isEven(i) && isNotMultipleOfThree(i) && isNotSixteen(i)) { + console.log(i); + } +} From 553fbe18a1de32551862518d752c3f0941aebef5 Mon Sep 17 00:00:00 2001 From: GordoMaster Date: Wed, 11 Sep 2024 00:01:14 -0400 Subject: [PATCH 120/539] #19-Python --- .../19 - ENUMERACIONES/python/Gordo-Master.py | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 Roadmap/19 - ENUMERACIONES/python/Gordo-Master.py diff --git a/Roadmap/19 - ENUMERACIONES/python/Gordo-Master.py b/Roadmap/19 - ENUMERACIONES/python/Gordo-Master.py new file mode 100644 index 0000000000..f818ac3eb7 --- /dev/null +++ b/Roadmap/19 - ENUMERACIONES/python/Gordo-Master.py @@ -0,0 +1,93 @@ +# 19 - Enumeraciones +from enum import Enum + +class WeekDay(Enum): + LUNES = 1 + MARTES = 2 + MIERCOLES = 3 + JUEVES = 4 + VIERNES = 5 + SABADO = 6 + DOMINGO = 7 + +def show_day(num): + print(WeekDay(num).name) + +show_day(2) + +""" +Ejercicio Extra +""" +class State(Enum): + PENDIENTE = 1 + ENVIADO = 2 + ENTREGADO = 3 + CANCELADO = 4 + +class Request(): + + def __init__(self,id: int, state: State = State(1)) -> None: + self.id = id + self.state = state + + def send(self): + if self.state == State.PENDIENTE: + self.state = State.ENVIADO + print(f"Se ha {State(self.state).name} el pedido {self.id}") + + elif self.state == State.ENVIADO: + print(f"El pedido ({self.id}) ya se encuentra: {State(self.state).name}") + + else: + print(f"No se pudo ejecutar el envio de {self.id}, porque esta: {State(self.state).name}") + + def cancel(self): + if self.state != State.ENTREGADO and self.state != State.CANCELADO: + self.state = State.CANCELADO + print(f"Se ha {State(self.state).name} el pedido {self.id}") + + elif self.state == State.CANCELADO: + print(f"El pedido ({self.id}) ya se encuentra: {State(self.state).name}") + + else: + print(f"No se pudo cancelar pedido ({self.id}), porque esta: {State(self.state).name}") + + def delivered(self): + if self.state == State.ENVIADO: + self.state = State.ENTREGADO + print(f"Se ha {State(self.state).name} el pedido {self.id}") + + elif self.state == State.ENTREGADO: + print(f"El pedido ({self.id}) ya se encuentra: {State(self.state).name}") + + else: + print(f"No se pudo entregar el pedido ({self.id}), porque esta: {State(self.state).name}") + + def show_state(self): + print(f"El estado del pedido {self.id} es: {State(self.state).name}") + +requet_1 = Request("r_1") +requet_2 = Request("r_2") + +print(requet_1.id) +print(requet_1.state) + +# Pendiente +requet_1.send() +# Enviado +requet_1.cancel() +# Cancelado +requet_1.send() +requet_1.delivered() +requet_1.show_state() + +# Pendiente +requet_2.delivered() +requet_2.send() +# Enviado +requet_2.send() +requet_2.delivered() +# Entregado +requet_2.send() +requet_2.cancel() +requet_2.delivered() From ffb60f6c8847a7def3bf8da69fe127c60c5f0d85 Mon Sep 17 00:00:00 2001 From: Copamire <147555790+Copamire@users.noreply.github.com> Date: Wed, 11 Sep 2024 00:37:11 -0500 Subject: [PATCH 121/539] Create Copamire.py #00 - Python --- .../python/Copamire.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Copamire.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Copamire.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Copamire.py new file mode 100644 index 0000000000..0652542738 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Copamire.py @@ -0,0 +1,29 @@ +# https://www.python.org + +#Comentario en una linea + +""" +Esto tambien es +un comentario +en varias lineas +""" + +''' +Esto tambien es +un comentario +varias lineas +''' + +my_variable = "Mi variable" +my_variable = "Nuevo valor de mi variable" + +MY_CONSTANT = "Mi constante" #por convención + +my_int = 1 +my_float = 1.5 +my_bool = True +my_bool = False +my_string = 'Mi cadena de texto' + + +print("¡Hola, Python!") From e223a576fe9eb793973ca1293143e4502127c3f3 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Wed, 11 Sep 2024 11:24:55 +0200 Subject: [PATCH 122/539] #32 Kotlin --- .../kotlin/eulogioep.kt | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/kotlin/eulogioep.kt diff --git a/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/kotlin/eulogioep.kt b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/kotlin/eulogioep.kt new file mode 100644 index 0000000000..258c32c269 --- /dev/null +++ b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/kotlin/eulogioep.kt @@ -0,0 +1,84 @@ +import kotlin.random.Random +import kotlinx.coroutines.* + +// Clase para representar a un personaje +data class Character( + val name: String, + var health: Int, + val minDamage: Int, + val maxDamage: Int, + val evasionChance: Double, + var canAttack: Boolean = true +) + +// Función principal +suspend fun main() = coroutineScope { + // Solicitar la vida inicial de los personajes + println("Ingrese la vida inicial de Deadpool:") + val deadpoolHealth = readLine()?.toIntOrNull() ?: 1000 + println("Ingrese la vida inicial de Wolverine:") + val wolverineHealth = readLine()?.toIntOrNull() ?: 1000 + + // Crear los personajes + val deadpool = Character("Deadpool", deadpoolHealth, 10, 100, 0.25) + val wolverine = Character("Wolverine", wolverineHealth, 10, 120, 0.20) + + var turn = 1 + + // Bucle principal de la batalla + while (deadpool.health > 0 && wolverine.health > 0) { + println("\nTurno $turn") + + // Simular el ataque de Deadpool + if (deadpool.canAttack) { + attack(deadpool, wolverine) + } else { + println("${deadpool.name} se está regenerando y no puede atacar este turno.") + deadpool.canAttack = true + } + + // Verificar si Wolverine ha sido derrotado + if (wolverine.health <= 0) break + + // Simular el ataque de Wolverine + if (wolverine.canAttack) { + attack(wolverine, deadpool) + } else { + println("${wolverine.name} se está regenerando y no puede atacar este turno.") + wolverine.canAttack = true + } + + // Mostrar la vida restante de ambos personajes + println("Vida de ${deadpool.name}: ${deadpool.health}") + println("Vida de ${wolverine.name}: ${wolverine.health}") + + turn++ + delay(1000) // Pausa de 1 segundo entre turnos + } + + // Mostrar el resultado final + val winner = if (deadpool.health > 0) deadpool.name else wolverine.name + println("\n¡$winner ha ganado la batalla!") +} + +// Función para simular un ataque +fun attack(attacker: Character, defender: Character) { + // Determinar si el defensor evade el ataque + if (Random.nextDouble() < defender.evasionChance) { + println("${defender.name} ha evadido el ataque de ${attacker.name}!") + return + } + + // Calcular el daño + val damage = Random.nextInt(attacker.minDamage, attacker.maxDamage + 1) + + // Aplicar el daño + defender.health -= damage + println("${attacker.name} ha causado $damage de daño a ${defender.name}!") + + // Verificar si el daño es máximo + if (damage == attacker.maxDamage) { + println("¡Golpe crítico! ${defender.name} no podrá atacar en el próximo turno.") + defender.canAttack = false + } +} \ No newline at end of file From 4eae9b89fa5184de1f1e691a3d0174c6aa651673 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Wed, 11 Sep 2024 11:28:02 +0200 Subject: [PATCH 123/539] #00 javascript --- .../javascript/eulogioep.js | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/eulogioep.js diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/eulogioep.js b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/eulogioep.js new file mode 100644 index 0000000000..bf19d99028 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/eulogioep.js @@ -0,0 +1,51 @@ +// URL del sitio web oficial de JavaScript +// https://developer.mozilla.org/es/docs/Web/JavaScript + +// Diferentes formas de crear comentarios en JavaScript: + +// 1. Comentario de una línea + +/* + 2. Comentario + de varias + líneas +*/ + +/** + * 3. Comentario de documentación + * Usado frecuentemente para describir funciones y clases + */ + +// Creación de una variable +let miVariable = "Soy una variable"; + +// Creación de una constante +const MI_CONSTANTE = "Soy una constante"; + +// Variables representando tipos de datos primitivos en JavaScript + +// String (cadena de texto) +let cadena = "Hola, mundo"; + +// Number (número) +let entero = 42; +let decimal = 3.14; + +// Boolean (booleano) +let verdadero = true; +let falso = false; + +// Undefined (indefinido) +let indefinido; + +// Null (nulo) +let nulo = null; + +// Symbol (símbolo) +let simbolo = Symbol("descripción"); + +// BigInt (entero grande) +let enteroGrande = BigInt(9007199254740991); + +// Imprimir por terminal +console.log("¡Hola, JavaScript!"); \ No newline at end of file From 5105ff3a4a3f84c74f08861d1a2632ad2e774b96 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Wed, 11 Sep 2024 11:31:26 +0200 Subject: [PATCH 124/539] #00 typescript --- .../typescript/eulogioep.ts | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/eulogioep.ts diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/eulogioep.ts b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/eulogioep.ts new file mode 100644 index 0000000000..e8c92dcdca --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/eulogioep.ts @@ -0,0 +1,77 @@ +// URL del sitio web oficial de TypeScript +// https://www.typescriptlang.org/ + +// Diferentes formas de crear comentarios en TypeScript: + +// 1. Comentario de una línea + +/* + 2. Comentario + de varias + líneas +*/ + +/** + * 3. Comentario de documentación + * Usado frecuentemente para describir funciones, clases e interfaces + */ + +// Creación de una variable con tipo inferido +let miVariable = "Soy una variable"; + +// Creación de una constante con tipo explícito +const MI_CONSTANTE: string = "Soy una constante"; + +// Variables representando tipos de datos en TypeScript + +// String (cadena de texto) +let cadena: string = "Hola, mundo"; + +// Number (número) +let entero: number = 42; +let decimal: number = 3.14; + +// Boolean (booleano) +let verdadero: boolean = true; +let falso: boolean = false; + +// Undefined (indefinido) +let indefinido: undefined = undefined; + +// Null (nulo) +let nulo: null = null; + +// Symbol (símbolo) +let simbolo: symbol = Symbol("descripción"); + +// BigInt (entero grande) +let enteroGrande: bigint = BigInt(9007199254740991); + +// Any (cualquier tipo) +let cualquiera: any = "Puedo ser cualquier cosa"; + +// Unknown (desconocido) +let desconocido: unknown = 4; + +// Void (vacío, típicamente para funciones sin retorno) +function sinRetorno(): void { + console.log("Esta función no retorna nada"); +} + +// Never (nunca, para funciones que nunca retornan) +function error(mensaje: string): never { + throw new Error(mensaje); +} + +// Tuple (tupla) +let tupla: [string, number] = ["hola", 42]; + +// Enum (enumeración) +enum Color { + Rojo, + Verde, + Azul +} + +// Imprimir por terminal +console.log("¡Hola, TypeScript!"); \ No newline at end of file From 35efaf4d3b8831b1d6db5bae38c544efce6d2e58 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Wed, 11 Sep 2024 11:35:17 +0200 Subject: [PATCH 125/539] #00 java --- .../java/eulogioep.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/eulogioep.java diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/eulogioep.java b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/eulogioep.java new file mode 100644 index 0000000000..53c834bf2f --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/eulogioep.java @@ -0,0 +1,52 @@ +// URL del sitio web oficial de Java +// https://www.oracle.com/java/ + +// Diferentes formas de crear comentarios en Java: + +// 1. Comentario de una línea + +/* + * 2. Comentario + * de varias + * líneas + */ + +/** + * 3. Comentario de documentación (Javadoc) + * Se usa para generar documentación automática del código + */ + + public class eulogioep { + public static void main(String[] args) { + // Creación de una variable + String miVariable = "Hola, Java!"; + + // Creación de una constante + final int MI_CONSTANTE = 42; + + // Variables representando tipos de datos primitivos en Java + byte miByte = 127; + short miShort = 32767; + int miInt = 2147483647; + long miLong = 9223372036854775807L; + float miFloat = 3.14f; + double miDouble = 3.14159265359; + boolean miBoolean = true; + char miChar = 'A'; + + // Impresión del texto solicitado + System.out.println("¡Hola, Java!"); + + // Impresión de los valores de las variables (opcional, para verificación) + System.out.println("miVariable: " + miVariable); + System.out.println("MI_CONSTANTE: " + MI_CONSTANTE); + System.out.println("miByte: " + miByte); + System.out.println("miShort: " + miShort); + System.out.println("miInt: " + miInt); + System.out.println("miLong: " + miLong); + System.out.println("miFloat: " + miFloat); + System.out.println("miDouble: " + miDouble); + System.out.println("miBoolean: " + miBoolean); + System.out.println("miChar: " + miChar); + } +} \ No newline at end of file From 7cfe641a2a6f6ce6af6b34eaba73f645dff421d8 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Wed, 11 Sep 2024 11:36:05 +0200 Subject: [PATCH 126/539] #00 sql --- .../sql/eulogioep.sql | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/sql/eulogioep.sql diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/sql/eulogioep.sql b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/sql/eulogioep.sql new file mode 100644 index 0000000000..332ffd8a01 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/sql/eulogioep.sql @@ -0,0 +1,60 @@ +-- URL del sitio web oficial de SQL (estándar ANSI) +-- https://www.iso.org/standard/63555.html + +-- Diferentes formas de crear comentarios en SQL: + +-- 1. Comentario de una línea + +/* + * 2. Comentario + * de varias + * líneas + */ + +-- Creación de una tabla para demostrar los tipos de datos +CREATE TABLE EjemploTipos ( + id INT PRIMARY KEY, + texto VARCHAR(50), + numero_entero INT, + numero_decimal DECIMAL(10, 2), + fecha DATE, + hora TIME, + fecha_hora DATETIME, + booleano BOOLEAN +); + +-- Inserción de datos para demostrar los tipos +INSERT INTO EjemploTipos (id, texto, numero_entero, numero_decimal, fecha, hora, fecha_hora, booleano) +VALUES (1, 'Hola, SQL!', 42, 3.14, '2024-09-11', '12:00:00', '2024-09-11 12:00:00', TRUE); + +-- Consulta para mostrar los datos (equivalente a "imprimir") +SELECT 'Hola, SQL!' AS saludo; + +-- Consulta para mostrar todos los datos insertados +SELECT * FROM EjemploTipos; + +-- Uso de variables (en algunos sistemas de gestión de bases de datos) +-- Nota: La sintaxis puede variar según el sistema que se use + +-- En MySQL: +SET @mi_variable = 'Valor de ejemplo'; +SELECT @mi_variable; + +-- En SQL Server: +DECLARE @mi_variable VARCHAR(50) = 'Valor de ejemplo'; +SELECT @mi_variable; + +-- En PostgreSQL: +DO $$ +DECLARE + mi_variable VARCHAR(50) := 'Valor de ejemplo'; +BEGIN + RAISE NOTICE 'Mi variable: %', mi_variable; +END $$; + +-- Creación de una constante (simulada mediante una vista) +CREATE VIEW ConstanteEjemplo AS +SELECT 42 AS MI_CONSTANTE; + +-- Consulta de la constante +SELECT * FROM ConstanteEjemplo; \ No newline at end of file From fbdb8c143a136fee5664107415ee67e504e2393c Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Wed, 11 Sep 2024 11:37:36 +0200 Subject: [PATCH 127/539] #00 php --- .../php/eulogioep.php | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/php/eulogioep.php diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/php/eulogioep.php b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/php/eulogioep.php new file mode 100644 index 0000000000..e3dc2362fe --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/php/eulogioep.php @@ -0,0 +1,64 @@ + "valor"]; +$miNulo = null; + +// Impresión del texto solicitado +echo "¡Hola, PHP!\n"; + +// Impresión de los valores de las variables (opcional, para verificación) +echo "miVariable: " . $miVariable . "\n"; +echo "MI_CONSTANTE: " . MI_CONSTANTE . "\n"; +echo "miEntero: " . $miEntero . "\n"; +echo "miFlotante: " . $miFlotante . "\n"; +echo "miBooleano: " . ($miBooleano ? "true" : "false") . "\n"; +echo "miCadena: " . $miCadena . "\n"; +echo "miArray: " . print_r($miArray, true) . "\n"; +echo "miArrayAsociativo: " . print_r($miArrayAsociativo, true) . "\n"; +echo "miNulo: " . var_export($miNulo, true) . "\n"; + +// Demostración de tipos de datos adicionales en PHP +$miObjeto = new stdClass(); +$miObjeto->propiedad = "valor"; +echo "miObjeto: " . print_r($miObjeto, true) . "\n"; + +$miCallable = function() { return "Soy una función anónima"; }; +echo "miCallable: " . $miCallable() . "\n"; + +// Demostración de tipado fuerte (disponible desde PHP 7) +function sumaEntera(int $a, int $b): int { + return $a + $b; +} +echo "Suma entera: " . sumaEntera(5, 3) . "\n"; + +?> \ No newline at end of file From d9b877e393454095c6907fb1d77b4fa39506e0cc Mon Sep 17 00:00:00 2001 From: fborjalv Date: Wed, 11 Sep 2024 14:49:57 +0200 Subject: [PATCH 128/539] #33 - Python --- .../python/fborjalv.py | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 Roadmap/33 - RESCATANDO A MICKEY/python/fborjalv.py diff --git a/Roadmap/33 - RESCATANDO A MICKEY/python/fborjalv.py b/Roadmap/33 - RESCATANDO A MICKEY/python/fborjalv.py new file mode 100644 index 0000000000..18642681db --- /dev/null +++ b/Roadmap/33 - RESCATANDO A MICKEY/python/fborjalv.py @@ -0,0 +1,116 @@ +""" +/* + * EJERCICIO: + * ¡Disney ha presentado un montón de novedades en su D23! + * Pero... ¿Dónde está Mickey? + * Mickey Mouse ha quedado atrapado en un laberinto mágico + * creado por Maléfica. + * Desarrolla un programa para ayudarlo a escapar. + * Requisitos: + * 1. El laberinto está formado por un cuadrado de 6x6 celdas. + * 2. Los valores de las celdas serán: + * - ⬜️ Vacío + * - ⬛️ Obstáculo + * - 🐭 Mickey + * - 🚪 Salida + * Acciones: + * 1. Crea una matriz que represente el laberinto (no hace falta + * que se genere de manera automática). + * 2. Interactúa con el usuario por consola para preguntarle hacia + * donde se tiene que desplazar (arriba, abajo, izquierda o derecha). + * 3. Muestra la actualización del laberinto tras cada desplazamiento. + * 4. Valida todos los movimientos, teniendo en cuenta los límites + * del laberinto y los obtáculos. Notifica al usuario. + * 5. Finaliza el programa cuando Mickey llegue a la salida. + */ + +""" +MICKEY = "🐭" +EXIT = "🚪" +VACIO = "⬜️" +OBSTACULO = "⬛️" + +class Mickey: + def __init__(self) -> None: + self.position_x = 0 + self.position_y = 0 + def move_down(self): + self.position_y += 1 + print("Movimiento: hacia abajo") + def move_up(self): + self.position_y -= 1 + print("Movimiento: hacia arriba") + def move_right(self): + self.position_x += 1 + print("Movimiento: hacia la derecha") + def move_left(self): + self.position_x -= 1 + print("Movimiento: hacia la izquierda") + + +class Game: + def __init__(self) -> None: + self.maze = [ + [MICKEY, VACIO, VACIO, VACIO, OBSTACULO, VACIO], + [OBSTACULO, VACIO, OBSTACULO, VACIO, VACIO, VACIO], + [OBSTACULO, VACIO, OBSTACULO, OBSTACULO, OBSTACULO, VACIO], + [OBSTACULO, VACIO, VACIO, VACIO, OBSTACULO, OBSTACULO], + [VACIO, VACIO, OBSTACULO, VACIO, OBSTACULO, OBSTACULO], + [VACIO, OBSTACULO, OBSTACULO, VACIO, VACIO, EXIT]] + self.player = Mickey() + self.print_maze() + self.exit_x = 5 + self.exit_y = 5 + + def print_maze(self): + print(f"Player position: {self.player.position_x + 1}, {self.player.position_y + 1}") + for fila in self.maze: + print(' '.join(map(str, fila))) + + + def move_player(self): + move = input("Introduce la dirección hacia la que se mueve Mickey: ") + match move: + case "a": + if self.player.position_x > 0 and self.maze[self.player.position_y][self.player.position_x - 1] != OBSTACULO: + self.maze[self.player.position_y][self.player.position_x] = VACIO + self.player.move_left() + self.maze[self.player.position_y][self.player.position_x] = MICKEY + else: + print("No puede seguir avanzado por la izquierda") + case "d": + if self.player.position_x < len(self.maze[0])-1 and self.maze[self.player.position_y][self.player.position_x + 1] != OBSTACULO: + self.maze[self.player.position_y][self.player.position_x] = VACIO + self.player.move_right() + self.maze[self.player.position_y][self.player.position_x] = MICKEY + else: + print("No puede seguir avanzado por la derecha") + case "s": + if self.player.position_y < len(self.maze) -1 and self.maze[self.player.position_y + 1][self.player.position_x] != OBSTACULO: + self.maze[self.player.position_y][self.player.position_x] = VACIO + self.player.move_down() + self.maze[self.player.position_y][self.player.position_x] = MICKEY + else: + print("No puede seguir avanzado hacia abajo") + case "w": + if self.player.position_y > 0 and self.maze[self.player.position_y - 1][self.player.position_x] != OBSTACULO: + self.maze[self.player.position_y][self.player.position_x] = VACIO + self.player.move_up() + self.maze[self.player.position_y][self.player.position_x] = MICKEY + else: + print("No puede seguir avazando hacia arriba") + case _: + print("Introduce un valor correcto") + + def game_on(self): + while True: + if self.player.position_y == self.exit_x and self.player.position_x == self.exit_y: + print("HAS GANADO!!") + break + else: + self.move_player() + self.print_maze() + + +system = Game() +system.game_on() From 12f58bef0c644309aa43a595483e0adbbff8fbf6 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Wed, 11 Sep 2024 09:00:58 -0400 Subject: [PATCH 129/539] 36 - JavaScript --- .../javascript/RicJDev.js | 135 +++++++++--------- 1 file changed, 68 insertions(+), 67 deletions(-) diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RicJDev.js b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RicJDev.js index c32acc46e6..23757543fd 100644 --- a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RicJDev.js +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/RicJDev.js @@ -30,9 +30,7 @@ class Questionary { this.questions = {} } - addQuestion(title) { - const id = Object.keys(this.questions).length + 1 - + addQuestion(id, title) { this.questions[id] = new Question(title) } @@ -49,78 +47,81 @@ class Questionary { const questionary = new Questionary() -questionary.addQuestion('¿Qué parte de un sitio web te llama más la atención?') +questionary.addQuestion(1, '¿Qué parte de un sitio web te llama más la atención?') questionary.addQuestion( + 2, 'Si tuvieras que elegir entre crear una nueva aplicación móvil o diseñar una base de datos, ¿cuál preferirías?' ) -questionary.addQuestion('¿Qué te resulta más fácil de entender?') -questionary.addQuestion('¿Qué tipo de problemas te gusta resolver?') -questionary.addQuestion('¿Qué herramienta te resulta más interesante?') -questionary.addQuestion('¿Qué te gustaría hacer en tu tiempo libre?') -questionary.addQuestion('¿Qué tipo de proyectos te motivan más?') -questionary.addQuestion('¿Qué habilidad consideras más importante para un desarrollador?') -questionary.addQuestion('¿Qué tipo de equipo te gustaría formar parte?') -questionary.addQuestion('¿Qué te gustaría lograr a largo plazo en tu carrera?') +questionary.addQuestion(3, '¿Qué te resulta más fácil de entender?') +questionary.addQuestion(4, '¿Qué tipo de problemas te gusta resolver?') +questionary.addQuestion(5, '¿Qué herramienta te resulta más interesante?') +questionary.addQuestion(6, '¿Qué te gustaría hacer en tu tiempo libre?') +questionary.addQuestion(7, '¿Qué tipo de proyectos te motivan más?') +questionary.addQuestion(8, '¿Qué habilidad consideras más importante para un desarrollador?') +questionary.addQuestion(9, '¿Qué tipo de equipo te gustaría formar parte?') +questionary.addQuestion(10, '¿Qué te gustaría lograr a largo plazo en tu carrera?') // Almacenamos las respuestas separadas por "casas" y las asignamos según las opciones -const frontendHouse = [ - 'El diseño visual y la interfaz de usuario.', - 'Crear una aplicación móvil con una interfaz intuitiva.', - 'Diagramas de flujo y diseños visuales.', - 'Problemas relacionados con la estética y la experiencia del usuario.', - 'Photoshop o Figma.', - 'Diseñar interfaces de usuario para diferentes aplicaciones.', - 'Proyectos que tienen un impacto visual y estético.', - 'La creatividad y el sentido del diseño.', - 'Un equipo de diseño y UX.', - 'Crear productos digitales con una interfaz de usuario excepcional.', -] - -const backendHouse = [ - 'La lógica detrás de cómo funciona el sitio y cómo se conectan las diferentes partes.', - 'Diseñar una base de datos eficiente para almacenar grandes cantidades de información.', - 'Código y algoritmos.', - 'Problemas lógicos y de optimización.', - 'Python o Java.', - 'Desarrollar videojuegos o aplicaciones web.', - 'Proyectos que requieren resolver problemas complejos y optimizar el rendimiento.', - 'La capacidad de resolver problemas y pensar de forma lógica.', - 'Un equipo de desarrollo backend.', - 'Desarrollar aplicaciones escalables y eficientes.', -] - -const mobileHouse = [ - 'Cómo se ve y funciona la aplicación en un teléfono móvil.', - 'Ambas opciones me parecen igualmente interesantes.', - 'Prototipos y maquetas.', - 'Problemas relacionados con la portabilidad y la compatibilidad en diferentes dispositivos.', - 'XCode o Android Studio.', - 'Crear aplicaciones móviles para diferentes plataformas.', - 'Proyectos que pueden ser utilizados por muchas personas en sus dispositivos móviles.', - 'La adaptabilidad y la capacidad de aprender nuevas tecnologías.', - 'Un equipo de desarrollo móvil.', - 'Crear aplicaciones móviles que cambien la forma en que las personas interactúan con el mundo.', -] - -const dataHouse = [ - 'Los datos que se recolectan y cómo se utilizan para mejorar el sitio.', - 'Ninguna de las opciones me llama la atención.', - 'Gráficos y estadísticas.', - 'Problemas relacionados con la extracción de información útil de grandes conjuntos de datos.', - 'SQL o Tableau.', - 'Analizar datos y crear visualizaciones.', - 'Proyectos que utilizan datos para tomar decisiones informadas.', - 'La capacidad de analizar datos y extraer insights.', - 'Un equipo de ciencia de datos.', - 'Utilizar datos para resolver problemas del mundo real y tomar decisiones estratégicas.', -] +const houses = { + frontend: { + 1: 'El diseño visual y la interfaz de usuario.', + 2: 'Crear una aplicación móvil con una interfaz intuitiva.', + 3: 'Diagramas de flujo y diseños visuales.', + 4: 'Problemas relacionados con la estética y la experiencia del usuario.', + 5: 'Photoshop o Figma.', + 6: 'Diseñar interfaces de usuario para diferentes aplicaciones.', + 7: 'Proyectos que tienen un impacto visual y estético.', + 8: 'La creatividad y el sentido del diseño.', + 9: 'Un equipo de diseño y UX.', + 10: 'Crear productos digitales con una interfaz de usuario excepcional.', + }, + + backend: { + 1: 'La lógica detrás de cómo funciona el sitio y cómo se conectan las diferentes partes.', + 2: 'Diseñar una base de datos eficiente para almacenar grandes cantidades de información.', + 3: 'Código y algoritmos.', + 4: 'Problemas lógicos y de optimización.', + 5: 'Python o Java.', + 6: 'Desarrollar videojuegos o aplicaciones web.', + 7: 'Proyectos que requieren resolver problemas complejos y optimizar el rendimiento.', + 8: 'La capacidad de resolver problemas y pensar de forma lógica.', + 9: 'Un equipo de desarrollo backend.', + 10: 'Desarrollar aplicaciones escalables y eficientes.', + }, + + mobile: { + 1: 'Cómo se ve y funciona la aplicación en un teléfono móvil.', + 2: 'Ambas opciones me parecen igualmente interesantes.', + 3: 'Prototipos y maquetas.', + 4: 'Problemas relacionados con la portabilidad y la compatibilidad en diferentes dispositivos.', + 5: 'XCode o Android Studio.', + 6: 'Crear aplicaciones móviles para diferentes plataformas.', + 7: 'Proyectos que pueden ser utilizados por muchas personas en sus dispositivos móviles.', + 8: 'La adaptabilidad y la capacidad de aprender nuevas tecnologías.', + 9: 'Un equipo de desarrollo móvil.', + 10: 'Crear aplicaciones móviles que cambien la forma en que las personas interactúan con el mundo.', + }, + + data: { + 1: 'Los datos que se recolectan y cómo se utilizan para mejorar el sitio.', + 2: 'Ninguna de las opciones me llama la atención.', + 3: 'Gráficos y estadísticas.', + 4: 'Problemas relacionados con la extracción de información útil de grandes conjuntos de datos.', + 5: 'SQL o Tableau.', + 6: 'Analizar datos y crear visualizaciones.', + 7: 'Proyectos que utilizan datos para tomar decisiones informadas.', + 8: 'La capacidad de analizar datos y extraer insights.', + 9: 'Un equipo de ciencia de datos.', + 10: 'Utilizar datos para resolver problemas del mundo real y tomar decisiones estratégicas.', + }, +} for (const id in questionary.questions) { - questionary.addOption(id, 'A', frontendHouse[id - 1]) - questionary.addOption(id, 'B', backendHouse[id - 1]) - questionary.addOption(id, 'C', mobileHouse[id - 1]) - questionary.addOption(id, 'D', dataHouse[id - 1]) + questionary.addOption(id, 'A', houses.frontend[id]) + questionary.addOption(id, 'B', houses.backend[id]) + questionary.addOption(id, 'C', houses.mobile[id]) + questionary.addOption(id, 'D', houses.data[id]) } /* From 53dce2686785a8d00e128b246bf258f489d0f82a Mon Sep 17 00:00:00 2001 From: resbaloso <134111217+raynerpv2022@users.noreply.github.com> Date: Wed, 11 Sep 2024 17:21:14 +0200 Subject: [PATCH 130/539] #16 Python and GO --- .../go/raynerpv2022.go | 124 ++++++++++++++++ .../python/raynerpv2022.py | 134 ++++++++++++++++++ 2 files changed, 258 insertions(+) create mode 100644 Roadmap/16 - EXPRESIONES REGULARES/go/raynerpv2022.go create mode 100644 Roadmap/16 - EXPRESIONES REGULARES/python/raynerpv2022.py diff --git a/Roadmap/16 - EXPRESIONES REGULARES/go/raynerpv2022.go b/Roadmap/16 - EXPRESIONES REGULARES/go/raynerpv2022.go new file mode 100644 index 0000000000..4b4592b95b --- /dev/null +++ b/Roadmap/16 - EXPRESIONES REGULARES/go/raynerpv2022.go @@ -0,0 +1,124 @@ +// # * DIFICULTAD EXTRA (opcional): +// # * Crea 3 expresiones regulares (a tu criterio) capaces de: +// # * - Validar un email. +// # * - Validar un número de teléfono. +// # * - Validar una url. +// # */ + +package main + +import ( + "fmt" + "regexp" +) + +func check_mail(email string) string { + p := `^[\w.]+@[a-zA-Z.-]+\.[a-zA-Z]{2,}$` + + re := regexp.MustCompile(p) + if re.MatchString(email) { + return email + } else { + return email + " NO VALIDO" + } + +} +func emailsValidate() { + emails := []string{ + "user@example.com", + "firstname.lastname@example.co.uk", + "user+name@example.com", + "user_name@example.org", + "user.name123@example.info", + "user123@example.org", + "user.name+label@example.com", + "username@subdomain.example.com", + "user@example.travel", + "user@example.name", + "user@.com", + "@example.com", + "user@com", + "user@exam_ple.com", + "user@ex-ample.com", + "user@.example.com", + "user@example.c", + "user@-example.com", + "user@example..com", + "user@exa_mple.com", + } + + for _, e := range emails { + fmt.Println(check_mail(e)) + } +} + +func checkPhone(number string) string { + ps := `^(\+34\s)?[\d]{3}\s[\d]{3}\s[\d]{3}$` + result := regexp.MustCompile(ps) + if result.MatchString(number) { + return number + } else { + return number + " NO VALIDO" + } + +} + +func telephonNUmber() { + telefonos := []string{ + "+34 612 345 678", + "612 345 678", + "912 345 678", + "(912) 345 678", + "612345678", + "+34 (612) 345 678", + "612 34 56", + "612-345-678", + "123 456 789", + "9123456789", + "(612)345678", + "612 345678", + } + + for _, n := range telefonos { + fmt.Println(checkPhone(n)) + } + +} + +func checkUrl(url string) string { + + ps := `^https?://[\w.]+\.[a-zA-Z]{2,}$` + result := regexp.MustCompile(ps) + if result.MatchString(url) { + return url + } else { + return url + " NO VALIDA" + } + +} + +func Urls() { + + urls := []string{ + "http://www.example.com", + "https://subdomain.example.org", + "http://example.co.uk", + "http://example.com2", + "http://www.example.c", + "https://www.example.edu", + "http://example", + "ftp://example.com", + "https://example.com/path", + "http://123.456.789.0", + } + + for _, l := range urls { + fmt.Println(checkUrl(l)) + } + +} +func main() { + emailsValidate() + Urls() + telephonNUmber() +} diff --git a/Roadmap/16 - EXPRESIONES REGULARES/python/raynerpv2022.py b/Roadmap/16 - EXPRESIONES REGULARES/python/raynerpv2022.py new file mode 100644 index 0000000000..a65ddb0832 --- /dev/null +++ b/Roadmap/16 - EXPRESIONES REGULARES/python/raynerpv2022.py @@ -0,0 +1,134 @@ +# /* +# * EJERCICIO: +# * Utilizando tu lenguaje, explora el concepto de expresiones regulares, +# * creando una que sea capaz de encontrar y extraer todos los números +# * de un texto. +# * +import re + +pattern = r'\d+' +text = """Utilizando tu lenguaje, explora el concepto de expres67676iones regulares, +# * creando una que sea capaz de encontrar y extraer todos los 333números +# * de un texto.DIFICULTAD334 EXTRA (opcional): +# * Crea 3 expresiones regulares (a tu criterio) ca343434paces de: +# * - Validar un email. +# * - Validar565 un número de teléfono. +# * - Validar una url.""" +result = re.search(pattern,text) +print(result.group()) +result = re.findall(pattern,text) +print(result) + + + + +# * DIFICULTAD EXTRA (opcional): +# * Crea 3 expresiones regulares (a tu criterio) capaces de: +# * - Validar un email. +# * - Validar un número de teléfono. +# * - Validar una url. +# */ + +def check_email(email): + + p = r"^[\w.]+@[a-zA-Z0-9.-]+\.+[a-zA-Z]{2,}$" + + result = re.fullmatch(p,email) + if result: + return email + else: + return f"{email} : "+"".join("No valido") + + + +def emails(): + emails = [ + "user@example.com", + "firstname.lastname@example.co.uk", + "user+name@example.com", + "user_name@example.org", + "user.name123@example.info", + "user123@example.org", + "user.name+label@example.com", + "username@subdomain.example.com", + "user@example.travel", + "user@example.name", + "user@.com", + "@example.com", + "user@com", + "user@exam_ple.com", + "user@ex-ample..com", + "user@.example.com", + "user@example.c", + "user@-example.com", + "user@example..com", + "user@exa_mple.com" + ] + + for e in emails: + print(check_email(e)) + +def check_phone(number): + ps = r"^(\+34\s)?[\d]{3}\s[\d]{3}\s[\d]{3}$" + result = re.fullmatch(ps,number) + if result: + return result.group() + else: + return f"{number} : "+"".join("No valida") + + + +def telephon_NUmber(): + telefonos = [ + '+34 612 345 678', # Válido + '612 345 678', # Válido + '912 345 678', # Válido + '(912) 345 678', # Válido + '612345678', # Válido + '+34 (612) 345 678', # Válido + '612 34 56', # No válido (menos dígitos) + '612-345-678', # No válido (caracteres no permitidos) + '123 456 789', # No válido (no comienza con 6, 7, o 9) + '9123456789', # No válido (demasiados dígitos) + '(612)345678', # No válido (espacio mal ubicado) + '612 345678' # No válido (espacio mal ubicado) +] + + for n in telefonos: + print(check_phone(n)) + +def check_url(url): + + ps = r"^https?://[\w.]+\.[a-zA-Z]{2,}$" + result = re.match(ps,url) + if result: + return result.group() + else: + return f"{url} : "+"".join("No valida") + + +def urls(): + + urls = [ + "http://www.example.com", + "https://subdomain.example.org", + "http://example.co.uk", + "http://example.com2", + "http://www.example.c", + "https://www.example.edu", + "http://example", + "ftp://example.com", + "https://example.com/path", + "http://123.456.789.0" + ] + + for l in urls: + + print(check_url(l)) +urls() +print() +emails() +print() +telephon_NUmber() + + From 7b12ce46eeb745343fc95d6c236b5c46e0eec4a4 Mon Sep 17 00:00:00 2001 From: password1989 <103333457+password1989@users.noreply.github.com> Date: Wed, 11 Sep 2024 17:54:05 +0200 Subject: [PATCH 131/539] #01 - Java --- .../java/Password1989.java | 225 ++++++++++++++++++ 1 file changed, 225 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/Password1989.java diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/Password1989.java b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/Password1989.java new file mode 100644 index 0000000000..10dacc55a1 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/Password1989.java @@ -0,0 +1,225 @@ +package org.roadmap.java.ejercicio.uno; + +public class Password1989 { + + public static void dificultadExtra() + { + /* + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3 + * + */ + + int min = 10; + int max = 55; + + for (int i = 10; i <= max; i++) + { + if( (i%2==0) && (i!=16) && (i%3!= 0)) + { + System.out.println(String.format("El numero %s cumple las condiciones",i)); + } + } + } + public static void main(String[] args) { + /* + * EJERCICIO: + * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: + * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) + * - Utilizando las operaciones con operadores que tú quieras, crea ejemplos + * que representen todos los tipos de estructuras de control que existan + * en tu lenguaje: + * Condicionales, iterativas, excepciones... + * - Debes hacer print por consola del resultado de todos los ejemplos. + * + * DIFICULTAD EXTRA (opcional): + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + * + * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. + */ + + /* + * Operadores: + * Aritmeticos: Suma, Resta, Division, Producto + */ + + System.out.println(String.format("Suma 10+3= %s", 10+3)); + System.out.println(String.format("Resta 10-3= %s", 10-3)); + System.out.println(String.format("Division 10/3= %s", 10/3)); + System.out.println(String.format("Producto 10 x 3= %s", 10*3)); + System.out.println(String.format("Resto 10/3= %s", 10%3)); + //System.out.println(String.format("Exponente 10/3= %s", 10^3)); + + /* + * Operadores: + * Lógicos: disruptivos && || sin disrupción & | ^ + * + * && AND Logico + * || OR Logico + * Los operadores sin disrupción ejecutan todas las expresiones aun cuando el resultado sea claramente false o true. + * + */ + + /* + * Operadores: + * Comparativos: < > <= >= == != + * < menor a < b + * > mayor a > b + * <= menor igual a <= b + * >= mayor igual a >= b + * == igual a == b + * != distinto a != b + */ + + /* + * Operadores: + * Asignación: = --= += *= %= /= >= <=>>= <<= >>>= <<<= + * = Asignación a = b + * += Suma y asignación a += b (a=a + b) + * -= Resta y asignación a -= b (a=a - b) + * *= Multiplicación y asignación a *= b (a=a * b) + * /= División y asignación a / b (a=a / b) + * %= Módulo y asignación a % b (a=a % b) + */ + + int a = 5; + int b = 8; + + int ejemploAsignacion = 0; + + ejemploAsignacion += a; + + System.out.println(String.format("Resultado ejemplo: %s",ejemploAsignacion)); + + + ejemploAsignacion -= b; + + System.out.println(String.format("Resultado ejemplo: %s",ejemploAsignacion)); + + ejemploAsignacion *= a; + + System.out.println(String.format("Resultado ejemplo: %s",ejemploAsignacion)); + + ejemploAsignacion /= b; + + System.out.println(String.format("Resultado ejemplo: %s",ejemploAsignacion)); + + ejemploAsignacion %= a; + + System.out.println(String.format("Resultado ejemplo: %s",ejemploAsignacion)); + + /* + * Operadores: + * Incremento: a++ (postincremento) y ++a (preincremento) + * Decremento: a-- (postdecremento) y --a (predecremento) + * + */ + + int j = 0; + + System.out.println(String.format("EjemploIncremento: %s",j)); + + System.out.println(String.format("J vale: %s, EjemploPOSTIncremento: %s",j,j++)); + System.out.println(String.format("J vale: %s, EjemploPREIncremento: %s",j,++j)); + System.out.println(String.format("J vale: %s, EjemploPOSTDecremento: %s",j,j--)); + System.out.println(String.format("J vale: %s, EjemploPREDecremento: %s",j,--j)); + + /* + * Operadores: + * Ternario: x == y ? x: y; + * + * Si se cumple la primera parte, x valdrá x si no, valdrá y + */ + + int x = 10; + int y = 20; + + System.out.println(x == y ? x: y); + + /* + * Operadores: + * Bit: ^ ! & ~ << >> <<< >>> + * + */ + + /* + * Estructuras de control: Condicionales, iterativas, excepciones + * IF: + * La sentencia if permite llevar a cabo la ejecución condicional de sentencias. + * Se ejecutan las sentencias si al evaluar la expresión se obtiene un valor booleano true. + * + */ + + boolean condicion = true; + if (condicion) + { + System.out.println("True"); + } + else + System.out.println("False"); + + /* + * SWITCH: + * La sentencia switch en la que se indican los posibles valores que puede tomar la variable y las sentencias que se tienen que ejecutar + * sí es que la variable coincide con alguno de dichos valores. + * Cada case ejecutará las sentencias correspondientes, con base en el valor de la variable, que deberá de evaluarse con valores de tipo byte, char, short o int. + * Si el valor de la variable no coincide con ningún valor, entonces se ejecutan las sentencias por default, sí es que las hay. + * La sentencia break al final de cada case transfiere el control al final de la sentencia switch; de esta manera, cada vez que se ejecuta un case todos los enunciados case restantes son ignorados y termina la operación del switch. + * + * + */ + + String cadena = "salir"; + + switch (cadena) + { + case "salir": + System.out.println(cadena); + break; + default: + System.out.println("default"); + break; + } + + /* + * FOR: + * + */ + + for (int iterador=0; iterador < 5; iterador++) + { + System.out.println(iterador); + } + + /* + * WHILE: + * + */ + + boolean condicionWhile = true; + while (condicionWhile) { + System.out.println(condicionWhile); + condicionWhile = false; + } + + /* + * DO WHILE: + * + */ + + do { + System.out.println(condicionWhile); + condicionWhile = false; + } while (condicionWhile); + + /* + * BREAK; CONTINUE; RETURN; + * + */ + + //dificultadExtra(); + } + +} From e5c0a03c54cbd00cf0344bbcbe34be63351f5440 Mon Sep 17 00:00:00 2001 From: ggtorca Date: Wed, 11 Sep 2024 19:25:07 +0200 Subject: [PATCH 132/539] "#01 - Python" --- .../python/ggtorca.py | 155 ++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ggtorca.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ggtorca.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ggtorca.py new file mode 100644 index 0000000000..be000d3cc5 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ggtorca.py @@ -0,0 +1,155 @@ +# #01 OPERADORES Y ESTRUCTURAS DE CONTROL +#### Dificultad: Fácil | Publicación: 02/01/24 | Corrección: 08/01/24 + +## Ejercicio + +""""" +/* + * EJERCICIO: + * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: + * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) + * - Utilizando las operaciones con operadores que tú quieras, crea ejemplos + * que representen todos los tipos de estructuras de control que existan + * en tu lenguaje: + * Condicionales, iterativas, excepciones... + * - Debes hacer print por consola del resultado de todos los ejemplos. + * + * DIFICULTAD EXTRA (opcional): + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + * + * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. + */ +""" +#### Tienes toda la información extendida sobre el roadmap de retos de programación en **[retosdeprogramacion.com/roadmap] + +# Operadores aritmeticos + +print("") +print("Operadores aritemticos") + +mi_suma = 20+5 +mi_resta = 20-5 +mi_multiplicacion = 25*4 +mi_division = 300/2 +mi_division_entera = 10//3 +mi_residuo = 15%4 +mi_exponenciacion = 2**3 + +print(f"resultado suma = {mi_suma}, resultado resta = {mi_resta}, resultado multiplicacion = {mi_multiplicacion}, resultado division = {mi_division}, resultado mi division entera = {mi_division_entera}, resultado de mi residuo = {mi_residuo}, resultado de mi exponienciacion = {mi_exponenciacion}") +# Operadores lógicos + +print("") +print("Operadores logicos") +print("") + +#and +a = True +b = False + +resultado_and = a and b + +print(f"Reslutado and {resultado_and}") + +#or +a = True +b = False + +resultado_or = a or b + +print(f"Reslutado or {resultado_or}") + +#not +a = True + +resultado_not = not a + +print(f"Reslutado not {resultado_not}") +# Operadores de comparación + +print("") +print("Operadores de comparacion") +print("") + +x = 20 +y = 30 +print(x==y)#Igual a +print(x!=y)#No igual a +print(x>y)#Mayor que +print(x=y)#Mayor o igual que +print(x<=y)#Menor o igual que +# Operadores de asignación + +print("") +print("Operadores de asignacion") +print("") + +c = 50 + +c+= 10 #Asignacion de suma +c-= 10 #Asignacion de resta +c*= 10 #Asignacion de multiplicacion +c/= 10 #Asignacion de division +c//= 10 #Asignacion de division entera +c%= 10 #Asignacion de resto +c**= 10 #Asignacion de exponienciacion + +# Operadores de identidad + +print("") +print("Operadores de identidad") +print("") + +g = "xabi" +t = "julen" + +print(g is t) +print(g is not t) + +# Operadores de pertenencia + +print("") +print("Operadores de pertenencia") +print("") + +lista_compra = ["huevos", "haria", "chocolate para fundir"] +print("chocolate para fundir" in lista_compra) +print("levadura" not in lista_compra) + +# Operadores de bits + +print("") +print("Operadores de bits") +print("") + +h = 4 +i = 5 +#AND +print (h & i) +#OR +print (h | i) +#XOR +print (h ^ i) +#NOT +print (~h) +#<< +print(h << 1) +#>> +print(h >> 1) +''' + * DIFICULTAD EXTRA (opcional): + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + * + ''' +def ImprimerNum(): + print("") + print("Ejercicio extra: ") + print("") + + for i in range (10, 56): + if i != 16 and i %2 == 0 and i %3 != 0: + print(i) +ImprimerNum() \ No newline at end of file From 62067d5d44db513ff3ebd3608a21936269572f6a Mon Sep 17 00:00:00 2001 From: javitron100 <86791160+javitron100@users.noreply.github.com> Date: Wed, 11 Sep 2024 19:25:43 +0200 Subject: [PATCH 133/539] #00 - Python --- .../python/javitron100.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/javitron100.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/javitron100.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/javitron100.py new file mode 100644 index 0000000000..90f68b7067 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/javitron100.py @@ -0,0 +1,19 @@ +# https://www.python.org/ + +#Comentario en una línea + +""" +Comentario +en varias +lineas +""" + +mi_variable = 10 + +mi_entero = int() +mi_float = float() +mi_texto = str() +mi_booleano = bool() + +print("!Hola, Python!") + From 29035e0602885d4242a266fe4b905f223f1c16e9 Mon Sep 17 00:00:00 2001 From: ggtorca Date: Wed, 11 Sep 2024 19:31:53 +0200 Subject: [PATCH 134/539] - --- .../python/ggtorca.py | 155 ------------------ 1 file changed, 155 deletions(-) delete mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ggtorca.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ggtorca.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ggtorca.py deleted file mode 100644 index be000d3cc5..0000000000 --- a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ggtorca.py +++ /dev/null @@ -1,155 +0,0 @@ -# #01 OPERADORES Y ESTRUCTURAS DE CONTROL -#### Dificultad: Fácil | Publicación: 02/01/24 | Corrección: 08/01/24 - -## Ejercicio - -""""" -/* - * EJERCICIO: - * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: - * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... - * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) - * - Utilizando las operaciones con operadores que tú quieras, crea ejemplos - * que representen todos los tipos de estructuras de control que existan - * en tu lenguaje: - * Condicionales, iterativas, excepciones... - * - Debes hacer print por consola del resultado de todos los ejemplos. - * - * DIFICULTAD EXTRA (opcional): - * Crea un programa que imprima por consola todos los números comprendidos - * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. - * - * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. - */ -""" -#### Tienes toda la información extendida sobre el roadmap de retos de programación en **[retosdeprogramacion.com/roadmap] - -# Operadores aritmeticos - -print("") -print("Operadores aritemticos") - -mi_suma = 20+5 -mi_resta = 20-5 -mi_multiplicacion = 25*4 -mi_division = 300/2 -mi_division_entera = 10//3 -mi_residuo = 15%4 -mi_exponenciacion = 2**3 - -print(f"resultado suma = {mi_suma}, resultado resta = {mi_resta}, resultado multiplicacion = {mi_multiplicacion}, resultado division = {mi_division}, resultado mi division entera = {mi_division_entera}, resultado de mi residuo = {mi_residuo}, resultado de mi exponienciacion = {mi_exponenciacion}") -# Operadores lógicos - -print("") -print("Operadores logicos") -print("") - -#and -a = True -b = False - -resultado_and = a and b - -print(f"Reslutado and {resultado_and}") - -#or -a = True -b = False - -resultado_or = a or b - -print(f"Reslutado or {resultado_or}") - -#not -a = True - -resultado_not = not a - -print(f"Reslutado not {resultado_not}") -# Operadores de comparación - -print("") -print("Operadores de comparacion") -print("") - -x = 20 -y = 30 -print(x==y)#Igual a -print(x!=y)#No igual a -print(x>y)#Mayor que -print(x=y)#Mayor o igual que -print(x<=y)#Menor o igual que -# Operadores de asignación - -print("") -print("Operadores de asignacion") -print("") - -c = 50 - -c+= 10 #Asignacion de suma -c-= 10 #Asignacion de resta -c*= 10 #Asignacion de multiplicacion -c/= 10 #Asignacion de division -c//= 10 #Asignacion de division entera -c%= 10 #Asignacion de resto -c**= 10 #Asignacion de exponienciacion - -# Operadores de identidad - -print("") -print("Operadores de identidad") -print("") - -g = "xabi" -t = "julen" - -print(g is t) -print(g is not t) - -# Operadores de pertenencia - -print("") -print("Operadores de pertenencia") -print("") - -lista_compra = ["huevos", "haria", "chocolate para fundir"] -print("chocolate para fundir" in lista_compra) -print("levadura" not in lista_compra) - -# Operadores de bits - -print("") -print("Operadores de bits") -print("") - -h = 4 -i = 5 -#AND -print (h & i) -#OR -print (h | i) -#XOR -print (h ^ i) -#NOT -print (~h) -#<< -print(h << 1) -#>> -print(h >> 1) -''' - * DIFICULTAD EXTRA (opcional): - * Crea un programa que imprima por consola todos los números comprendidos - * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. - * - ''' -def ImprimerNum(): - print("") - print("Ejercicio extra: ") - print("") - - for i in range (10, 56): - if i != 16 and i %2 == 0 and i %3 != 0: - print(i) -ImprimerNum() \ No newline at end of file From 9fdeec50602c4abf768281a3e2f37645758ad7ff Mon Sep 17 00:00:00 2001 From: Gerard <150106339+ggtorca@users.noreply.github.com> Date: Wed, 11 Sep 2024 19:34:53 +0200 Subject: [PATCH 135/539] Delete Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ggtorca.py --- .../python/ggtorca.py | 155 ------------------ 1 file changed, 155 deletions(-) delete mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ggtorca.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ggtorca.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ggtorca.py deleted file mode 100644 index be000d3cc5..0000000000 --- a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ggtorca.py +++ /dev/null @@ -1,155 +0,0 @@ -# #01 OPERADORES Y ESTRUCTURAS DE CONTROL -#### Dificultad: Fácil | Publicación: 02/01/24 | Corrección: 08/01/24 - -## Ejercicio - -""""" -/* - * EJERCICIO: - * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: - * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... - * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) - * - Utilizando las operaciones con operadores que tú quieras, crea ejemplos - * que representen todos los tipos de estructuras de control que existan - * en tu lenguaje: - * Condicionales, iterativas, excepciones... - * - Debes hacer print por consola del resultado de todos los ejemplos. - * - * DIFICULTAD EXTRA (opcional): - * Crea un programa que imprima por consola todos los números comprendidos - * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. - * - * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. - */ -""" -#### Tienes toda la información extendida sobre el roadmap de retos de programación en **[retosdeprogramacion.com/roadmap] - -# Operadores aritmeticos - -print("") -print("Operadores aritemticos") - -mi_suma = 20+5 -mi_resta = 20-5 -mi_multiplicacion = 25*4 -mi_division = 300/2 -mi_division_entera = 10//3 -mi_residuo = 15%4 -mi_exponenciacion = 2**3 - -print(f"resultado suma = {mi_suma}, resultado resta = {mi_resta}, resultado multiplicacion = {mi_multiplicacion}, resultado division = {mi_division}, resultado mi division entera = {mi_division_entera}, resultado de mi residuo = {mi_residuo}, resultado de mi exponienciacion = {mi_exponenciacion}") -# Operadores lógicos - -print("") -print("Operadores logicos") -print("") - -#and -a = True -b = False - -resultado_and = a and b - -print(f"Reslutado and {resultado_and}") - -#or -a = True -b = False - -resultado_or = a or b - -print(f"Reslutado or {resultado_or}") - -#not -a = True - -resultado_not = not a - -print(f"Reslutado not {resultado_not}") -# Operadores de comparación - -print("") -print("Operadores de comparacion") -print("") - -x = 20 -y = 30 -print(x==y)#Igual a -print(x!=y)#No igual a -print(x>y)#Mayor que -print(x=y)#Mayor o igual que -print(x<=y)#Menor o igual que -# Operadores de asignación - -print("") -print("Operadores de asignacion") -print("") - -c = 50 - -c+= 10 #Asignacion de suma -c-= 10 #Asignacion de resta -c*= 10 #Asignacion de multiplicacion -c/= 10 #Asignacion de division -c//= 10 #Asignacion de division entera -c%= 10 #Asignacion de resto -c**= 10 #Asignacion de exponienciacion - -# Operadores de identidad - -print("") -print("Operadores de identidad") -print("") - -g = "xabi" -t = "julen" - -print(g is t) -print(g is not t) - -# Operadores de pertenencia - -print("") -print("Operadores de pertenencia") -print("") - -lista_compra = ["huevos", "haria", "chocolate para fundir"] -print("chocolate para fundir" in lista_compra) -print("levadura" not in lista_compra) - -# Operadores de bits - -print("") -print("Operadores de bits") -print("") - -h = 4 -i = 5 -#AND -print (h & i) -#OR -print (h | i) -#XOR -print (h ^ i) -#NOT -print (~h) -#<< -print(h << 1) -#>> -print(h >> 1) -''' - * DIFICULTAD EXTRA (opcional): - * Crea un programa que imprima por consola todos los números comprendidos - * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. - * - ''' -def ImprimerNum(): - print("") - print("Ejercicio extra: ") - print("") - - for i in range (10, 56): - if i != 16 and i %2 == 0 and i %3 != 0: - print(i) -ImprimerNum() \ No newline at end of file From 52906681a566da232447467fefcf70d399defe69 Mon Sep 17 00:00:00 2001 From: ggtorca Date: Wed, 11 Sep 2024 19:41:03 +0200 Subject: [PATCH 136/539] #02 - Python --- .../python/ggtorca.py | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/python/ggtorca.py diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/python/ggtorca.py b/Roadmap/02 - FUNCIONES Y ALCANCE/python/ggtorca.py new file mode 100644 index 0000000000..592d200992 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/python/ggtorca.py @@ -0,0 +1,146 @@ +''' +/* + * EJERCICIO: + * - Crea ejemplos de funciones básicas que representen las diferentes + * posibilidades del lenguaje: + * Sin parámetros ni retorno, con uno o varios parámetros, con retorno... + * - Comprueba si puedes crear funciones dentro de funciones. + * - Utiliza algún ejemplo de funciones ya creadas en el lenguaje. + * - Pon a prueba el concepto de variable LOCAL y GLOBAL. + * - Debes hacer print por consola del resultado de todos los ejemplos. + * (y tener en cuenta que cada lenguaje puede poseer más o menos posibilidades) + * + * DIFICULTAD EXTRA (opcional): + * Crea una función que reciba dos parámetros de tipo cadena de texto y retorne un número. + * - La función imprime todos los números del 1 al 100. Teniendo en cuenta que: + * - Si el número es múltiplo de 3, muestra la cadena de texto del primer parámetro. + * - Si el número es múltiplo de 5, muestra la cadena de texto del segundo parámetro. + * - Si el número es múltiplo de 3 y de 5, muestra las dos cadenas de texto concatenadas. + * - La función retorna el número de veces que se ha impreso el número en lugar de los textos. + * + * Presta especial atención a la sintaxis que debes utilizar en cada uno de los casos. + * Cada lenguaje sigue una convenciones que debes de respetar para que el código se entienda. + */ + ''' +print("Ejercicio #02 - Funciones y Alcance") +print("-----------------------------------") +print("") + +#Funcion sin parámetros ni retorno + +def holaMundo(): + print("Hola mundo!") + +print("Funcion sin parámetros ni retorno") +print("") +holaMundo() #Llamada a la función, se imprime "Hola mundo!" +print("") + +#Funcion con un parametro + +def holaPersona(nombre): + print("Hola " +nombre +"!") + +print("Funcion con un parametro") +print("") +holaPersona("Pedro") #Llamada a la función, se imprime "Hola Pedro!" +print("") + +#Funcion con varios parametros y retorno + +def multiplicacion (val1, val2): + return val1 * val2 + +print("Funcion con varios parametros") +print("") + +val1 = int(input("Introduce el primer valor: ")) + +val2 = int(input("Introduce el segundo valor: ")) + + +print(f"\nEl resultado de la multiplicación es: {multiplicacion (val1, val2)}") #Llamada a la función, se imprime el resultado de multiplicacion. + +#¿Se pueden crear funciones dentro de funciones? + +def funcionPrincipal(x, y): + def funcionInterna(y): + return y + y + return funcionInterna(x) * y + +x = int(input("Establece el valor de x: ")) +y = int(input("Establece el valor de y: ")) + +resultadoOperacion = funcionPrincipal(x, y) + +print(f"\n El resutlado final es: {resultadoOperacion}") #Llamada a la función, se imprime el resultado de x*(y+y) + +#Funciones propias del lenguaje + +#len() +palabra = "aerodromo" +longitud =len(palabra) + +print(longitud) #Imprime la longitud de la palabra "aerodromo" + +#type() +print(type(24)) #Imprime que es un int +print(type("reactor")) #Imprime que es un string + +#range() +for i in range(4): + print (i) # Imprime una lista del 0 al 3 + +#sum() +numeros = [10, 20, 30] +total = sum(numeros) +print(total) #Imprime el total de la suma de los numeros establecidos previamente + +#Variables LOCALES y GLOBALES + +#Variable LOCAL + +def sumar (a, b): + total = a + b #total es una variable local ya que unicamente es accesible dentro de la funcion sumar + return total +print(sumar(1, 2)) + +#Variable GLOBAL +contador = 0 # La variable contador se declara fuera de una funcion +def incrementar(): + global contador # Se establece que se va a usar la variable global "contador" + contador += 1 + +def imprimirContador(): + print(contador) + +print(f"el contador esta a {contador}") +vecesIncrementar = int(input("Cuantas veces quieres incrementar el contador? ")) +for i in range(vecesIncrementar): + incrementar() +print(f"\n El contador ahora está a ", end="") + +imprimirContador() + +#Dificultad extra + +def dificultadExtra(cadena1, cadena2): + contarNumeros = 0 + + for numero in range(1, 101): + if numero % 3 == 0 & numero % 5 == 0: + print(cadena1 + cadena2) + elif numero % 3 == 0: + print(cadena1) + elif numero % 5 == 0: + print(cadena2) + else: + print(numero) + contarNumeros += 1 + + return contarNumeros +cadena1 = "hey" +cadena2 = "ho" +resultado = dificultadExtra(cadena1, cadena2) + +print(f"Se imprimio un numero {resultado} veces") \ No newline at end of file From abfdac604a40e10bbe86df3ed7faf48d33ae1860 Mon Sep 17 00:00:00 2001 From: Jesus Antonio Escamilla Date: Wed, 11 Sep 2024 12:30:03 -0600 Subject: [PATCH 137/539] 09 - Java & Python --- .../java/JesusAntonioEEscamilla.java | 87 +++++++++++++++++++ .../python/JesusAntonioEEscamilla.py | 44 ++++++++++ 2 files changed, 131 insertions(+) create mode 100644 Roadmap/09 - HERENCIA/java/JesusAntonioEEscamilla.java create mode 100644 Roadmap/09 - HERENCIA/python/JesusAntonioEEscamilla.py diff --git a/Roadmap/09 - HERENCIA/java/JesusAntonioEEscamilla.java b/Roadmap/09 - HERENCIA/java/JesusAntonioEEscamilla.java new file mode 100644 index 0000000000..f4d20c31a8 --- /dev/null +++ b/Roadmap/09 - HERENCIA/java/JesusAntonioEEscamilla.java @@ -0,0 +1,87 @@ + + +/** #09 - Java -> Jesus Antonio Escamilla */ + +public class JesusAntonioEEscamilla { + public static void main(String[] args) { + //---EJERCIÓ--- + Animal perro = new Perro(); + Animal gato = new Gato(); + Animal pajaro = new Pajaro(); + + System.out.println("Herencia"); + imprimirSonido(perro); + imprimirSonido(gato); + imprimirSonido(pajaro); + + System.out.println("\n"); + + System.out.println("Extra Métodos"); + // Extra: Mostrar acciones adicionales + ((Perro) perro).correr(); + ((Gato) gato).cazar(); + ((Pajaro) pajaro).volar(); + //---EXTRA--- + // Pendiente + } + + //---EJERCIÓ--- + // Superclase Animal + static class Animal { + public void hacerSonido(){ + System.out.println("El animal hace ruido"); + } + } + + // Subclases Perro + static class Perro extends Animal { + @Override + public void hacerSonido(){ + System.out.println("El perro ladra: ¡Guau Guau!"); + } + + // Método adicional para perro + public void correr(){ + System.out.println("Esta corriendo felizmente"); + } + } + + // Subclases Gato + static class Gato extends Animal { + @Override + public void hacerSonido(){ + System.out.println("El gato maúlla: ¡Miau Miau!"); + } + + // Método adicional para gato + public void cazar(){ + System.out.println("Esta cazando un ratón"); + } + } + + // Nueva Subclases Pájaro + static class Pajaro extends Animal { + @Override + public void hacerSonido(){ + System.out.println("El pájaro canta: ¡Pio Pio!"); + } + + // Método adicional para gato + public void volar(){ + System.out.println("Esta volando alto en el cielo"); + } + } + + // Función que recibe un objeto de tipo Animal y llama a su método hacerSonido + public static void imprimirSonido(Animal animal){ + animal.hacerSonido(); + } + + + + /**-----DIFICULTAD EXTRA-----*/ + + // Pendientes + + /**-----DIFICULTAD EXTRA-----*/ +} \ No newline at end of file diff --git a/Roadmap/09 - HERENCIA/python/JesusAntonioEEscamilla.py b/Roadmap/09 - HERENCIA/python/JesusAntonioEEscamilla.py new file mode 100644 index 0000000000..2c24ee2c73 --- /dev/null +++ b/Roadmap/09 - HERENCIA/python/JesusAntonioEEscamilla.py @@ -0,0 +1,44 @@ +# #09 - Python -> Jesus Antonio Escamilla + +""" +EJERCIÓ +""" +# Definimos la superclase Animal +class Animal: + def hacer_sonido(self): + raise NotImplemented("Este método debe ser implementado por las subclases") + +# Definimos la subclase Perro +class Perro(Animal): + def hacer_sonido(self): + return "El perro dice: ¡Guau Guau!" + +# Definimos la subclase Gato +class Gato(Animal): + def hacer_sonido(self): + return "El gato dice: ¡Miau Miau!" + +# Definimos la subclase Pájaro +class Pajaro(Animal): + def hacer_sonido(self): + return "El pájaro dice: ¡Pio Pio!" + +# Función para imprimir el sonido de cualquier animal +def imprimir_sonido(animal): + print(f"{animal.hacer_sonido()}") + +# Crear instancias +perro = Perro() +gato = Gato() +pajaro = Pajaro() + +imprimir_sonido(perro) +imprimir_sonido(gato) +imprimir_sonido(pajaro) + + + +""" +EXTRA +""" +# Pendientes \ No newline at end of file From 4c519186707d524ecb8bb8b02dd02b85c0e78312 Mon Sep 17 00:00:00 2001 From: neslarra <31991788+neslarra@users.noreply.github.com> Date: Wed, 11 Sep 2024 15:32:21 -0300 Subject: [PATCH 138/539] Reto# 37 --- .../python/neslarra.py | 196 ++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/neslarra.py diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/neslarra.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/neslarra.py new file mode 100644 index 0000000000..35f81b7985 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/neslarra.py @@ -0,0 +1,196 @@ +""" + EJERCICIO: + ¡Dos de las bandas más grandes de la historia están de vuelta! + Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? + Desarrolla un programa que se conecte al API de Spotify y los compare. + Requisitos: + 1. Crea una cuenta de desarrollo en https://developer.spotify.com. + 2. Conéctate al API utilizando tu lenguaje de programación. + 3. Recupera datos de los endpoint que tú quieras. + Acciones: + 1. Accede a las estadísticas de las dos bandas. + Por ejemplo: número total de seguidores, escuchas mensuales, + canción con más reproducciones... + 2. Compara los resultados de, por lo menos, 3 endpoint. + 3. Muestra todos los resultados por consola para notificar al usuario. + 4. Desarrolla un criterio para seleccionar qué banda es más popular. +""" +import spotipy +from spotipy.oauth2 import SpotifyClientCredentials + + +class Artist: + + def __init__(self, name: str): + artists = spotify.search(q='artist:' + name, type='artist')['artists'] + for art in artists['items']: + if art['name'] == name: + self.artist_name = name + self.artist_id = art['id'] + self.artist_image = art['images'][0]['url'] + self.artist_followers = art['followers']['total'] + self.artist_genres = art['genres'] + self.artist_popularity = art['popularity'] + self.artist_songs_url = art['external_urls']['spotify'] + break + if not self.artist_name: + raise "Exception: Artista NO encontrado." + + def get_name(self): + return self.artist_name + + def get_popularity(self): + return self.artist_popularity + + def get_id(self): + return self.artist_id + + def get_followers(self): + return self.artist_followers + + def get_genres(self): + return self.artist_genres + + def get_image(self): + return self.artist_image + + def get_albums(self): + albums = spotify.artist_albums(self.artist_id, country='AR') + return [x['name'] for x in albums['items'] if x['album_type'] == 'album'] + + def get_most_popular_song(self): + top_tracks = spotify.artist_top_tracks(self.artist_id) + track = top_tracks["tracks"][0] + return [track["name"], track["popularity"]] + + def where_listen(self): + return self.artist_songs_url + + +class Comparision: + + def __init__(self, artist_1: Artist, artist_2: Artist): + self.artist_1 = artist_1 + self.artist_2 = artist_2 + self.rank = [0, 0] + + def add_point(self, artist: int): + self.rank[artist] += 1 + + def get_common_genres(self): + g1 = self.artist_1.get_genres() + g2 = self.artist_2.get_genres() + genres = set.intersection(set(g1), set(g2)) + return genres + + def get_most_popular_band(self): + f1 = self.artist_1.get_popularity() + f2 = self.artist_2.get_popularity() + if f1 > f2: + self.add_point(0) + return self.artist_1.get_name() + elif f2 > f1: + self.add_point(1) + return self.artist_2.get_name() + else: + self.add_point(0) + self.add_point(1) + return "" + + def get_most_popular_song(self): + s1 = self.artist_1.get_most_popular_song() + s2 = self.artist_2.get_most_popular_song() + if s1[1] > s2[1]: + self.add_point(0) + return [s1[0], self.artist_1.get_name()] + elif s2[1] > s1[1]: + self.add_point(1) + return [s2[0], self.artist_2.get_name()] + else: + self.add_point(0) + self.add_point(1) + return [s1[0], self.artist_1.get_name(), s2[0], self.artist_2.get_name()] + + def get_most_follwed(self): + f1 = self.artist_1.get_followers() + f2 = self.artist_2.get_followers() + if f1 > f2: + self.add_point(0) + return self.artist_1.get_name() + elif f2 > f1: + self.add_point(1) + return self.artist_2.get_name() + else: + self.add_point(0) + self.add_point(1) + return "" + + def get_greater_number_of_albums(self): + a1 = self.artist_1.get_albums() + a2 = self.artist_2.get_albums() + if a1.__len__() > a2.__len__(): + self.add_point(0) + return [self.artist_1.get_name(), a1.__len__()] + elif a2.__len__() > a1.__len__(): + self.add_point(1) + return [self.artist_2.get_name(), a2.__len__()] + else: + self.add_point(0) + self.add_point(1) + return [a1.__len__()] + + def get_better_band(self): + if self.rank[0] > self.rank[1]: + return self.artist_1.get_name() + elif self.rank[1] > self.rank[0]: + return self.artist_2.get_name() + else: + return "" + + def get_report(self): + report = [] + message = f"Las bandas {self.artist_1.get_name()} y {self.artist_2.get_name()} " + common_genres = "" + for genre in self.get_common_genres(): + common_genres += genre + ", " + report.append(message + "tocan en común " + common_genres[:-2] if common_genres else message + "no tienen géneros en común.") + + band = self.get_most_follwed() + report.append(band + " es la más seguida." if band else "Ambas bandas son igual de seguidas.") + + band = self.get_most_popular_band() + report.append(band + " es la más popular." if band else "Ambas bandas son igual de populares.") + + song = self.get_most_popular_song() + if song.__len__() == 2: + report.append(f"La canción más popular es {song[0]} de {song[1]}") + else: + report.append(f"Las canciones más populares son {song[0]} de {song[1]} y {song[2]} de {song[3]}") + + albums = self.get_greater_number_of_albums() + if albums.__len__() == 2: + report.append(f"La banda {albums[0]} editó más álbumes ({albums[1]}).") + else: + report.append(f"Ambas bandas editaron ({albums[1]}) álbumes.") + + band = self.get_better_band() + report.append(band + " es la mejor banda." if band else "Ambas bandas son igual de buenas.") + + report.append(f"Escuchá a {self.artist_1.get_name()} en {self.artist_1.where_listen()}") + report.append(f"Escuchá a {self.artist_2.get_name()} en {self.artist_2.where_listen()}") + + return report + + +my_client_id = input("Ingresá tu Spotify client_id: ") +my_client_secret = input("Ingresa tu Spotify client_secret: ") + +my_creds = SpotifyClientCredentials(client_id=my_client_id, client_secret=my_client_secret) +spotify = spotipy.Spotify(client_credentials_manager=my_creds) + +oasis = Artist('Oasis') +lpark = Artist('Linkin Park') + +comparision = Comparision(oasis, lpark) +for result in comparision.get_report(): + print(result) From 94cf9e767fd6e3eda5971a0ecc4691beec304614 Mon Sep 17 00:00:00 2001 From: password1989 <103333457+password1989@users.noreply.github.com> Date: Wed, 11 Sep 2024 20:39:30 +0200 Subject: [PATCH 139/539] #02 - Java --- .../java/Password1989.java | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/java/Password1989.java diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/java/Password1989.java b/Roadmap/02 - FUNCIONES Y ALCANCE/java/Password1989.java new file mode 100644 index 0000000000..8565690be0 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/java/Password1989.java @@ -0,0 +1,102 @@ +package org.roadmap.java.ejercicio.dos; + +public class Password1989 { + public static void sinRetorno() + { + System.out.println("Sin retorno"); + } + + public static int devuelveEntero() + { + return 0; + } + + public static void sinRetornoConParametro(String cadena1) + { + System.out.println("cadena1"); + } + + public static void funcion1() + { + /* ERROR + public static int funcion2() { + System.out.println("F2"); + } + */ + } + + public static int dificultadExtra(String cadena1, String cadena2) + { + /* + * DIFICULTAD EXTRA (opcional): + * Crea una función que reciba dos parámetros de tipo cadena de texto y retorne un número. + * - La función imprime todos los números del 1 al 100. Teniendo en cuenta que: + * - Si el número es múltiplo de 3, muestra la cadena de texto del primer parámetro. + * - Si el número es múltiplo de 5, muestra la cadena de texto del segundo parámetro. + * - Si el número es múltiplo de 3 y de 5, muestra las dos cadenas de texto concatenadas. + * - La función retorna el número de veces que se ha impreso el número en lugar de los textos. + * + */ + int resultado = 0; + + try { + for (int i = 1; i <= 100; i++) + { + if ((i%3==0) && (i%5==0)) + { + System.out.println("i:" + i + "-Cadenas:" + cadena1+cadena2); + resultado++; + } + else if(i%3==0) + { + System.out.println("i:" + i + "-Cadenas:" + cadena1); + resultado++; + } + else if(i%5==0) + { + System.out.println("i:" + i + "-Cadenas:" + cadena2); + resultado++; + } + + } + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + } + return resultado; + } + public static void main(String[] args) { + /* + * EJERCICIO: + * - Crea ejemplos de funciones básicas que representen las diferentes + * posibilidades del lenguaje: + * Sin parámetros ni retorno, con uno o varios parámetros, con retorno... + * - Comprueba si puedes crear funciones dentro de funciones. + * - Utiliza algún ejemplo de funciones ya creadas en el lenguaje. + * - Pon a prueba el concepto de variable LOCAL y GLOBAL. + * - Debes hacer print por consola del resultado de todos los ejemplos. + * (y tener en cuenta que cada lenguaje puede poseer más o menos posibilidades) + * + * DIFICULTAD EXTRA (opcional): + * Crea una función que reciba dos parámetros de tipo cadena de texto y retorne un número. + * - La función imprime todos los números del 1 al 100. Teniendo en cuenta que: + * - Si el número es múltiplo de 3, muestra la cadena de texto del primer parámetro. + * - Si el número es múltiplo de 5, muestra la cadena de texto del segundo parámetro. + * - Si el número es múltiplo de 3 y de 5, muestra las dos cadenas de texto concatenadas. + * - La función retorna el número de veces que se ha impreso el número en lugar de los textos. + * + * Presta especial atención a la sintaxis que debes utilizar en cada uno de los casos. + * Cada lenguaje sigue una convenciones que debes de respetar para que el código se entienda. + * + * + * El título de la Pull Request también debe seguir este formato: "#[número] - [lenguaje_utilizado]". + * En el ejemplo anterior sería "#00 - Python". + * + * En mi caso seria: "#02 - Java" + */ + int nVeces; + System.out.println(String.format("Se han escrito las cadenas %s veces", nVeces = dificultadExtra("cadena1", "cadena2"))); + + } + +} From f0ee877149d094c364bdecfb6cdb5182b402596c Mon Sep 17 00:00:00 2001 From: Andry Rodriguez Perez <30348096+arperezinf@users.noreply.github.com> Date: Wed, 11 Sep 2024 15:58:52 -0300 Subject: [PATCH 140/539] subiendo solucion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #36 - Python - Añadido archivo andry.py --- .../python/andry.py | 261 ++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/andry.py diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/andry.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/andry.py new file mode 100644 index 0000000000..ae55dac442 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/andry.py @@ -0,0 +1,261 @@ +import random + +houses = { + "Frontend": 0, + "Backend": 0, + "Mobile": 0, + "Data": 0 +} + +questions = [ + { + "question": "¿Qué tipo de proyectos te interesa más desarrollar?", + "answers": [ + { + "option": "Aplicaciones móviles nativas para múltiples plataformas.", + "house": "Mobile" + }, + { + "option": "Interfaces visualmente atractivas y responsivas.", + "house": "Frontend" + }, + { + "option": "Procesamiento y análisis de grandes volúmenes de datos.", + "house": "Data" + }, + { + "option": "Sistemas robustos y optimización de rendimiento del servidor.", + "house": "Backend" + } + ] + }, + { + "question": "¿Qué aspecto del desarrollo disfrutas más?", + "answers": [ + { + "option": "Resolver problemas complejos de lógica y escalabilidad.", + "house": "Backend" + }, + { + "option": "Analizar datos para tomar decisiones basadas en estadísticas.", + "house": "Data" + }, + { + "option": "Crear aplicaciones móviles eficientes y funcionales.", + "house": "Mobile" + }, + { + "option": "Trabajar en el diseño y la experiencia de usuario.", + "house": "Frontend" + } + ] + }, + { + "question": "¿Qué herramienta prefieres usar en tu día a día?", + "answers": [ + { + "option": "Kotlin o Swift para desarrollar apps móviles nativas.", + "house": "Mobile" + }, + { + "option": "Python o R para análisis de datos.", + "house": "Data" + }, + { + "option": "Frameworks como React o Angular.", + "house": "Frontend" + }, + { + "option": "Lenguajes como Node.js o Python para la gestión de servidores.", + "house": "Backend" + } + ] + }, + { + "question": "¿Cómo te ves en un equipo de desarrollo?", + "answers": [ + { + "option": "Modelando datos y construyendo dashboards de análisis.", + "house": "Data" + }, + { + "option": "Encargado de la lógica del servidor y las APIs.", + "house": "Backend" + }, + { + "option": "Desarrollando la interfaz y funcionalidad de una app móvil.", + "house": "Mobile" + }, + { + "option": "Diseñando las interacciones y los componentes visuales.", + "house": "Frontend" + } + ] + }, + { + "question": "¿Qué te motiva más al trabajar en un proyecto?", + "answers": [ + { + "option": "Ver cómo el diseño cobra vida en la pantalla.", + "house": "Frontend" + }, + { + "option": "Descubrir insights a partir del análisis de datos.", + "house": "Data" + }, + { + "option": "Optimizar el rendimiento y escalabilidad del sistema.", + "house": "Backend" + }, + { + "option": "Lograr que una aplicación móvil funcione perfectamente en cualquier dispositivo.", + "house": "Mobile" + } + ] + }, + { + "question": "¿Cuál es tu enfoque al aprender nuevas tecnologías?", + "answers": [ + { + "option": "Explorar técnicas avanzadas de análisis de datos y machine learning.", + "house": "Data" + }, + { + "option": "Aprender sobre nuevas arquitecturas y lenguajes de servidor.", + "house": "Backend" + }, + { + "option": "Probar nuevas plataformas y herramientas para desarrollo móvil.", + "house": "Mobile" + }, + { + "option": "Experimentar con nuevas librerías y frameworks de interfaz de usuario.", + "house": "Frontend" + } + ] + }, + { + "question": "¿Qué tipo de desafíos disfrutas más resolver?", + "answers": [ + { + "option": "Solución de problemas de concurrencia y carga en servidores.", + "house": "Backend" + }, + { + "option": "Optimización de interfaces para que se vean bien en cualquier dispositivo.", + "house": "Frontend" + }, + { + "option": "Análisis de grandes volúmenes de datos para detectar patrones ocultos.", + "house": "Data"}, + { + "option": "Creación de experiencias de usuario fluídas en dispositivos móviles.", + "house": "Mobile" + } + ] + }, + { + "question": "¿Cómo te gusta medir el éxito de tu trabajo?", + "answers": [ + { + "option": "Por la estabilidad y rapidez del sistema bajo carga.", + "house": "Backend" + }, + { + "option": "Mediante la satisfacción del usuario con la interfaz visual.", + "house": "Frontend" + }, + { + "option": "Por la fluidez y buen rendimiento de la app móvil en diferentes dispositivos.", + "house": "Mobile"}, + { + "option": "Por la precisión y relevancia de los resultados obtenidos en el análisis de datos.", + "house": "Data" + } + ] + }, + { + "question": "¿Qué te resulta más interesante al trabajar con tecnologías emergentes?", + "answers": [ + { + "option": "Trabajar con tecnologías de big data o inteligencia artificial.", + "house": "Data" + }, + { + "option": "Explorar nuevas arquitecturas para mejorar el rendimiento del servidor.", + "house": "Backend" + }, + { + "option": "Probar nuevas herramientas y metodologías para mejorar el diseño y la UX.", + "house": "Frontend" + }, + { + "option": "Desarrollar apps móviles que aprovechen nuevas capacidades de hardware.", + "house": "Mobile" + } + ] + }, + { + "question": "¿Cómo te enfrentas a un nuevo problema en un proyecto?", + "answers": [ + { + "option": "Buscando patrones y soluciones basadas en análisis de datos.", + "house": "Data" + }, + { + "option": "Replanteando la estructura visual y funcional de la interfaz.", + "house": "Frontend" + }, + { + "option": "Explorando cómo mejorar la experiencia del usuario en dispositivos móviles.", + "house": "Mobile" + }, + { + "option": "Analizando la estructura de datos y la lógica del backend.", + "house": "Backend" + } + ] + } +] + +print("\n¡Bienvenido a Hogwarts, la escuela de programación para magos y brujas del código!") +print("El sombrero seleccionador decidirá cuál es tu casa como programador.") + +name = input("\n¿Cuál es tu nombre? ") + +for index, question in enumerate(questions): + + print(f"\nPregunta {index + 1}: {question["question"]}\n") + + for i, answer in enumerate(question["answers"]): + print(f"{i + 1}. {answer["option"]}") + + # Solicitar una opción válida + choice = None + while choice not in range(1, 5): # Verificar si el número está en el rango correcto + try: + choice = int(input("\nSelecciona una respuesta entre 1 y 4: ")) + if choice not in range(1, 5): # Verifica si la opción es válida + print("Por favor, selecciona un número válido entre 1 y 4.") + except ValueError: # En caso de que el input no sea un número + print("Entrada inválida. Por favor ingresa un número entre 1 y 4.") + + selected_answer = question["answers"][choice - 1] + houses[selected_answer["house"]] += 1 + +assigned_house = max(houses, key=houses.get) +scores = list(houses.values()) + +if scores.count(max(scores)) > 1: + possible_houses = [ + house for house, + points in houses.items() if points == max(scores) + ] + assigned_house = random.choice(possible_houses) + + print( + f"""\nHmmmm... Ha sido una decisión muy complicada, { + name}.\n¡Pero finalmente tu casa será {assigned_house}!""" + ) +else: + print(f"\nEnhorabuena, {name}.\n¡Tu casa será {assigned_house}!") From 75135ca7c4f451b662199566b759fa77851a10b9 Mon Sep 17 00:00:00 2001 From: drvito1977 Date: Wed, 11 Sep 2024 21:04:27 +0200 Subject: [PATCH 141/539] actualizacion del repo --- .../bash/drvito1977.sh | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 Roadmap/04 - CADENAS DE CARACTERES/bash/drvito1977.sh diff --git a/Roadmap/04 - CADENAS DE CARACTERES/bash/drvito1977.sh b/Roadmap/04 - CADENAS DE CARACTERES/bash/drvito1977.sh new file mode 100644 index 0000000000..6600d8f8bb --- /dev/null +++ b/Roadmap/04 - CADENAS DE CARACTERES/bash/drvito1977.sh @@ -0,0 +1,114 @@ +#!/bin/bash + +# Función para mostrar ejemplos de operaciones con cadenas de caracteres +function ejemplos_cadenas { + cadena="Hola Mundo" + + # Acceso a caracteres específicos + primer_caracter=${cadena:0:1} # Obtiene el primer carácter de la cadena + ultimo_caracter=${cadena: -1} # Obtiene el último carácter de la cadena + echo "Primer carácter: $primer_caracter" + echo "Último carácter: $ultimo_caracter" + + # Subcadenas + subcadena=${cadena:0:4} # Obtiene una subcadena desde el inicio hasta el cuarto carácter + echo "Subcadena: $subcadena" + + # Longitud de la cadena + longitud=${#cadena} # Calcula la longitud de la cadena + echo "Longitud de la cadena: $longitud" + + # Concatenación + concatenada="${cadena}!" # Concatenación de la cadena con un signo de exclamación + echo "Concatenación: $concatenada" + + # Repetición (simulación) + repetida=$(printf "%.0sHa" {1..3}) # Repite "Ha" tres veces + echo "Repetición: $repetida" + + # Recorrido de la cadena + echo "Recorrido de la cadena:" + for (( i=0; i<${#cadena}; i++ )); do + echo "${cadena:$i:1}" # Imprime cada carácter de la cadena en una nueva línea + done + + # Conversión a mayúsculas y minúsculas + mayusculas=${cadena^^} # Convierte la cadena a mayúsculas + minusculas=${cadena,,} # Convierte la cadena a minúsculas + echo "Mayúsculas: $mayusculas" + echo "Minúsculas: $minusculas" + + # Reemplazo + reemplazo=${cadena/Mundo/Bash} # Reemplaza "Mundo" por "Bash" en la cadena + echo "Reemplazo: $reemplazo" + + # División + IFS=' ' read -r -a palabras <<< "$cadena" # Divide la cadena en palabras usando el espacio como delimitador + echo "División en palabras: ${palabras[@]}" + + # Unión + unidas=$(IFS=,; echo "${palabras[*]}") # Une las palabras con una coma como separador + echo "Unión de palabras: $unidas" + + # Interpolación + interpolacion="La cadena es: $cadena" # Interpolación de la cadena en otra cadena + echo "Interpolación: $interpolacion" + + # Verificación + if [[ $cadena == *"Mundo"* ]]; then + echo "La cadena contiene 'Mundo'" # Verifica si la cadena contiene la palabra "Mundo" + fi +} + +# Función para comprobar si una palabra es un palíndromo +function es_palindromo { + palabra=$1 + invertida=$(echo $palabra | rev) # Invierte la palabra + if [[ $palabra == $invertida ]]; then + echo "$palabra es un palíndromo" # Comprueba si la palabra es igual a su versión invertida + else + echo "$palabra no es un palíndromo" + fi +} + +# Función para comprobar si dos palabras son anagramas +function son_anagramas { + palabra1=$(echo $1 | grep -o . | sort | tr -d "\n") # Ordena las letras de la primera palabra + palabra2=$(echo $2 | grep -o . | sort | tr -d "\n") # Ordena las letras de la segunda palabra + if [[ $palabra1 == $palabra2 ]]; then + echo "$1 y $2 son anagramas" # Comprueba si las palabras ordenadas son iguales + else + echo "$1 y $2 no son anagramas" + fi +} + +# Función para comprobar si una palabra es un isograma +function es_isograma { + palabra=$1 + letras=$(echo $palabra | grep -o . | sort | uniq -d) # Busca letras duplicadas + if [[ -z $letras ]]; then + echo "$palabra es un isograma" # Comprueba si no hay letras duplicadas + else + echo "$palabra no es un isograma" + fi +} + +# Llamada a la función de ejemplos de cadenas +ejemplos_cadenas + +# Comprobaciones de palabras +palabra1="radar" +palabra2="dormir" +palabra3="amor" +palabra4="roma" +palabra5="isograma" + +echo +es_palindromo $palabra1 +es_palindromo $palabra2 + +echo +son_anagramas $palabra3 $palabra4 + +echo +es_isograma $palabra5 \ No newline at end of file From 483b7066f93e3ffd8c2fb0652a48c0f4f47c32d9 Mon Sep 17 00:00:00 2001 From: Abel Lazaro Date: Wed, 11 Sep 2024 13:13:32 -0600 Subject: [PATCH 142/539] #00-Swift --- .../swift/DevM0nk3y.swift | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/swift/DevM0nk3y.swift diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/swift/DevM0nk3y.swift b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/swift/DevM0nk3y.swift new file mode 100644 index 0000000000..2403570a72 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/swift/DevM0nk3y.swift @@ -0,0 +1,53 @@ +/* +* EJERCICIO: + * - Crea un comentario en el código y coloca la URL del sitio web oficial del + * lenguaje de programación que has seleccionado. + * - Representa las diferentes sintaxis que existen de crear comentarios + * en el lenguaje (en una línea, varias...). + * - Crea una variable (y una constante si el lenguaje lo soporta). + * - Crea variables representando todos los tipos de datos primitivos + * del lenguaje (cadenas de texto, enteros, booleanos...). + * - Imprime por terminal el texto: "¡Hola, [y el nombre de tu lenguaje]!" + */ + +import Foundation + +// sitio web oficial de swift https://www.swift.org + +//comentario de una linea + +/* + comentarios + de multiples + lineas + */ + +/* + /* comentario anidado */ +*/ + +var myVariable = "Im a variable" +let myConstant = "Im a constant" + +//Int: Un entero con signo, que puede ser positivo, negativo o cero. Su tamaño depende de la plataforma (32 o 64 bits). +var myInt = 1 + +//UInt: Un entero sin signo, que solo puede ser positivo o cero. +var myUInt = 100 + +//Float: Número de punto flotante de precisión simple (32 bits). +var myFloat = 1.12345 + +//Double: Número de punto flotante de precisión doble (64 bits). Se usa cuando necesitas más precisión que Float. +var myFloat = 1.1234567890 + +//Boolean: Valores que representan verdadero o falso (true o false). +var myBool = true + +//String: Tipo de dato que almacena texto. +var myString = "Swift" + +//Character: Almacena un solo carácter. +var myChar = "a" + +print("¡Hola, \(myString)!") From cccba5b4a008916397ba23ebce751031e58a18ae Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Wed, 11 Sep 2024 14:31:56 -0500 Subject: [PATCH 143/539] Ejercicio conceptual completo --- .../java/simonguzman.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/java/simonguzman.java diff --git a/Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/java/simonguzman.java b/Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/java/simonguzman.java new file mode 100644 index 0000000000..60d193b4ad --- /dev/null +++ b/Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/java/simonguzman.java @@ -0,0 +1,43 @@ + +import java.util.Arrays; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +public class simonguzman { + public static void main(String[] args) { + ejercicioPrincipal(); + } + + public static void ejercicioPrincipal(){ + List numeros = Arrays.asList(1,2,3,4,5,6,7,8,9,10); + List numerosMultiplicados = multiplicarXDos(numeros); + List numerosPares = filtrarNumerosPares(numerosMultiplicados); + imprimirNumeros(numerosPares); + int suma = sumarNumeros(numerosPares); + System.out.println("Suma de los números pares multiplicados por 2: " + suma); + } + + public static List multiplicarXDos(List numeros){ + Function multiplicar = (n) -> n * 2; + return numeros.stream().map(multiplicar).collect(Collectors.toList()); + } + + public static List filtrarNumerosPares(List numeros){ + Predicate esPar = (n) -> n % 2 == 0; + return numeros.stream().filter(esPar).collect(Collectors.toList()); + } + + public static int sumarNumeros(List numeros){ + Supplier sumar = () -> numeros.stream().mapToInt(Integer::intValue).sum(); + return sumar.get(); + } + + public static void imprimirNumeros(List numeros){ + Consumer imprimir = (n) -> System.out.println("Numero: "+n); + numeros.forEach(imprimir); + } +} From ded88347141fb400977f17f354396f554ed162d4 Mon Sep 17 00:00:00 2001 From: Andry Rodriguez Perez Date: Wed, 11 Sep 2024 16:49:51 -0300 Subject: [PATCH 144/539] Update --- Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/andry.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/andry.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/andry.py index ae55dac442..4dea81cbd6 100644 --- a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/andry.py +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/andry.py @@ -230,14 +230,13 @@ for i, answer in enumerate(question["answers"]): print(f"{i + 1}. {answer["option"]}") - # Solicitar una opción válida choice = None - while choice not in range(1, 5): # Verificar si el número está en el rango correcto + while choice not in range(1, 5): try: choice = int(input("\nSelecciona una respuesta entre 1 y 4: ")) - if choice not in range(1, 5): # Verifica si la opción es válida + if choice not in range(1, 5): print("Por favor, selecciona un número válido entre 1 y 4.") - except ValueError: # En caso de que el input no sea un número + except ValueError: print("Entrada inválida. Por favor ingresa un número entre 1 y 4.") selected_answer = question["answers"][choice - 1] From 1e21684637ebd06f518fd2ded0ccea0f991abf46 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Wed, 11 Sep 2024 15:01:41 -0500 Subject: [PATCH 145/539] Ejercicio #22 completado --- .../java/simonguzman.java | 81 ++++++++++++++++++- 1 file changed, 79 insertions(+), 2 deletions(-) diff --git a/Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/java/simonguzman.java b/Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/java/simonguzman.java index 60d193b4ad..ad92d57778 100644 --- a/Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/java/simonguzman.java +++ b/Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/java/simonguzman.java @@ -1,4 +1,4 @@ - +import java.time.LocalDate; import java.util.Arrays; import java.util.List; import java.util.function.Consumer; @@ -9,9 +9,86 @@ public class simonguzman { public static void main(String[] args) { - ejercicioPrincipal(); + //ejercicioPrincipal(); + ejercicioAdicional(); + } + + /******************** Ejercicio adicional ********************/ + public static void ejercicioAdicional(){ + List estudiantes = Arrays.asList( + new Estudiante("Juan", LocalDate.of(2000, 5, 15), Arrays.asList(8.0, 9.0, 10.0)), + new Estudiante("Ana", LocalDate.of(1998, 11, 3), Arrays.asList(9.5, 9.0, 9.7)), + new Estudiante("Carlos", LocalDate.of(2002, 6, 21), Arrays.asList(6.0, 7.5, 8.0)) + ); + operaciones(estudiantes); } + public static void operaciones(List estudiantes){ + promedioCalificaciones(estudiantes); + + List mejores = mejoresEstudiantes(estudiantes); + System.out.println("Mejores estudiantes: "+mejores); + + List ordenados = ordenarPorNacimiento(estudiantes); + System.out.println("Estudiantes ordenados por nacimiento:"); + ordenados.forEach(est -> System.out.println(est.getNombre())); + + double mayorCalificacion = obtenerMayorCalificacion(estudiantes); + System.out.println("Mayor calificación: " + mayorCalificacion); + } + + public static void promedioCalificaciones(List estudiantes){ + estudiantes.forEach(estudiante -> { + double promedio = estudiante.getPromedio(); + System.out.println("Estudiante: "+estudiante.getNombre()+ " ,promedio: "+promedio); + }); + } + + public static List mejoresEstudiantes(List estudiantes){ + return estudiantes.stream().filter(est -> est.getPromedio() >= 9).map(Estudiante::getNombre).toList(); + } + + public static List ordenarPorNacimiento(List estudiantes){ + return estudiantes.stream().sorted((e1, e2) -> e2.getFechaNacimiento().compareTo(e1.getFechaNacimiento())).toList(); + } + + public static double obtenerMayorCalificacion(List estudiantes){ + return estudiantes.stream().flatMap(est -> est.getCalificaciones().stream()).max(Double::compareTo).orElse(0.0); + } + public static class Estudiante { + private String nombre; + private LocalDate fechaNacimiento; + private List calificaciones; + + public Estudiante(){ + + } + + public Estudiante(String nombre, LocalDate fechaNacimiento, List calificaciones){ + this.nombre = nombre; + this.fechaNacimiento = fechaNacimiento; + this.calificaciones = calificaciones; + } + + public String getNombre() { + return nombre; + } + + public LocalDate getFechaNacimiento() { + return fechaNacimiento; + } + + public List getCalificaciones() { + return calificaciones; + } + + public double getPromedio(){ + return calificaciones.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); + } + } + + /******************** Ejercicio conceptual ********************/ + public static void ejercicioPrincipal(){ List numeros = Arrays.asList(1,2,3,4,5,6,7,8,9,10); List numerosMultiplicados = multiplicarXDos(numeros); From 465c29a4673105819e88e671c649b07c3db99255 Mon Sep 17 00:00:00 2001 From: odin3 Date: Wed, 11 Sep 2024 23:05:58 +0200 Subject: [PATCH 146/539] Sol #36 - Python --- .../python/oriaj3.py | 152 ++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/oriaj3.py diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/oriaj3.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/oriaj3.py new file mode 100644 index 0000000000..6fd0bb53a3 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/oriaj3.py @@ -0,0 +1,152 @@ +""" +/* + * EJERCICIO: + * Cada 1 de septiembre, el Hogwarts Express parte hacia la escuela + * de programación de Hogwarts para magos y brujas del código. + * En ella, su famoso sombrero seleccionador ayuda a los programadores + * a encontrar su camino... + * Desarrolla un programa que simule el comportamiento del sombrero. + * Requisitos: + * 1. El sombrero realizará 10 preguntas para determinar la casa del alumno. + * 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data. + * (Puedes elegir las que quieras) + * Acciones: + * 1. Crea un programa que solicite el nombre del alumno y realice 10 + * preguntas, con cuatro posibles respuestas cada una. + * 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección). + * 3. Una vez finalizado, el sombrero indica el nombre del alumno + * y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria, + * pero indicándole al alumno que la decisión ha sido complicada). + */ +""" +#Introduction to the program +print("¡Bienvenido al Sombrero Seleccionador de Hogwarts para personalidades!") +print("Responde a las siguientes preguntas para descubrir a qué casa perteneces según tu personalidad.") +print("Por favor, elige la opción que mejor te describa en cada pregunta.") +print("Las opciones siempre son: A, B, C, D.") +print("Para responder, escribe la letra correspondiente y pulsa Enter.") +input("Pulsa Enter para comenzar...") + +# Dictionary with the questions and answers +questions_answers = { + "¿Cómo te enfrentas a los problemas complejos?": { + "Analítico": "Divido el problema en partes y analizo cada una.", + "Creativo": "Busco soluciones fuera de lo común.", + "Pragmático": "Me concentro en resolverlo de la manera más efectiva y directa.", + "Emocional": "Sigo mis instintos para encontrar la solución." + }, + "¿Qué te motiva en tu trabajo?": { + "Analítico": "Resolver problemas difíciles con lógica.", + "Creativo": "Innovar y crear nuevas ideas.", + "Pragmático": "Cumplir con las expectativas y ser eficiente.", + "Emocional": "Trabajar en algo que me apasione." + }, + "¿Cómo organizas tu día?": { + "Analítico": "Creo un plan detallado y lo sigo estrictamente.", + "Creativo": "Prefiero dejar espacio para la espontaneidad.", + "Pragmático": "Me aseguro de completar las tareas esenciales primero.", + "Emocional": "Organizo mi día según mi estado de ánimo." + }, + "¿Cómo manejas la presión?": { + "Analítico": "Mantengo la calma y analizo la situación lógicamente.", + "Creativo": "Encuentro formas creativas de lidiar con ella.", + "Pragmático": "Me enfoco en las prioridades y actúo con eficacia.", + "Emocional": "Me apoyo en mis emociones para superar el estrés." + }, + "¿Qué prefieres hacer en tu tiempo libre?": { + "Analítico": "Resolver acertijos o problemas lógicos.", + "Creativo": "Hacer arte o actividades creativas.", + "Pragmático": "Realizar actividades prácticas y productivas.", + "Emocional": "Conectar con amigos o actividades que me hagan sentir bien." + }, + "¿Cómo tomas decisiones importantes?": { + "Analítico": "Analizo todos los datos antes de decidir.", + "Creativo": "Pienso en soluciones innovadoras.", + "Pragmático": "Tomo decisiones rápidas y eficaces.", + "Emocional": "Dejo que mis emociones me guíen." + }, + "¿Qué prefieres en un proyecto de grupo?": { + "Analítico": "Organizar y dividir las tareas por lógica.", + "Creativo": "Aportar ideas nuevas y creativas.", + "Pragmático": "Asegurar que el proyecto se mantenga en el camino correcto.", + "Emocional": "Motivarme a través de las emociones del equipo." + }, + "¿Cómo reaccionas cuando algo no sale según lo planeado?": { + "Analítico": "Reevalúo el problema y busco una solución lógica.", + "Creativo": "Pienso en alternativas fuera de lo común.", + "Pragmático": "Busco la forma más práctica de corregirlo.", + "Emocional": "Me dejo llevar por la frustración o tristeza pero luego encuentro una forma de avanzar." + }, + "¿Qué prefieres en un ambiente laboral?": { + "Analítico": "Tener claro qué hacer y cómo hacerlo.", + "Creativo": "Espacio para innovar y explorar nuevas ideas.", + "Pragmático": "Procesos organizados y eficientes.", + "Emocional": "Un ambiente en el que se valoren los sentimientos y la colaboración." + }, + "¿Cómo manejas el fracaso?": { + "Analítico": "Lo analizo para aprender de los errores.", + "Creativo": "Lo uso como inspiración para pensar de manera diferente.", + "Pragmático": "Acepto el fracaso y busco la manera de corregirlo rápidamente.", + "Emocional": "Me afecta emocionalmente, pero lo uso como motivación para mejorar." + } +} + +#Print the questions and answers to the user and save the answers +answers_user = [] + +# Lista de letras válidas +letter_index = ["A", "B", "C", "D"] + +def ask_answer() -> str: + # Bucle para pedir opciones al usuario + while True: + # Solicita la entrada del usuario + option = input("Introduce una opción (A, B, C, D): ").upper() + + # Comprueba si la opción es válida + if option in letter_index: + # Devuelve la opción válida + return option + else: + # Si la opción no es válida, muestra un mensaje y repite el bucle + print("Opción inválida. Inténtalo de nuevo.") + +for index, (question, answers) in enumerate(questions_answers.items()): + print(f"{index + 1}. {question}") + for index, (_, answer) in enumerate(answers.items()): + print(f" - {letter_index[index]}: {answer}") + answers_user.append(ask_answer()) + +#Count answers +count ={ + "Analítico": 0, + "Creativo": 0, + "Pragmático": 0, + "Emocional": 0 +} + +#Mapping the answers a, b, c, d to the personality types +count_mapping = { + "A": "Analítico", + "B": "Creativo", + "C": "Pragmático", + "D": "Emocional" +} + +for answer in answers_user: + count[count_mapping[answer]] += 1 + +#Check if there is a tie +max_value = max(count.values()) +if list(count.values()).count(max_value) > 1: + print("La decisión ha sido complicada, pero...") +else: + print("El sombrero seleccionador ha decidido que...") +print("Tu casa es:") +print(max(count, key=count.get)) + + + + + + From ece9848f98d4313e33a0f4619228c97843785fa2 Mon Sep 17 00:00:00 2001 From: Abel Lazaro Date: Wed, 11 Sep 2024 16:18:01 -0600 Subject: [PATCH 147/539] Update DevM0nk3y.swift cambio de nombre variable myFloat en tipo de dato double --- .../swift/DevM0nk3y.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/swift/DevM0nk3y.swift b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/swift/DevM0nk3y.swift index 2403570a72..2e8759705a 100644 --- a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/swift/DevM0nk3y.swift +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/swift/DevM0nk3y.swift @@ -39,7 +39,7 @@ var myUInt = 100 var myFloat = 1.12345 //Double: Número de punto flotante de precisión doble (64 bits). Se usa cuando necesitas más precisión que Float. -var myFloat = 1.1234567890 +var myDouble = 1.1234567890 //Boolean: Valores que representan verdadero o falso (true o false). var myBool = true From a4a10e7bd0c79986ce97d8a2fca500934ceb8c98 Mon Sep 17 00:00:00 2001 From: Josue-py Date: Wed, 11 Sep 2024 18:33:26 -0400 Subject: [PATCH 148/539] #01 - Python --- .../python/Josue-py.py | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/Josue-py.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/Josue-py.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/Josue-py.py new file mode 100644 index 0000000000..c09d8f4699 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/Josue-py.py @@ -0,0 +1,123 @@ +""" +Operadores +""" + +def operadores_aritmeticos(a,b): + print(f"Este es el operador de suma '+'\nmira el resultado de a y b de los dos numeros que proporcionaste: {a + b}") + print(f"Este es el operador de resta '-'\nmira el resultado de a y b de los dos numeros que proporcionaste: {a - b}") + print(f"Este es el operador de multiplicacion '*'\nmira el resultado de a y b de los dos numeros que proporcionaste: {a * b}") + print(f"Este es el operador de division '/'\nmira el resultado de a y b de los dos numeros que proporcionaste: {a / b}") + print(f"Este es el operador de potencia '**'\nmira el resultado de a y b de los dos numeros que proporcionaste: {a ** b}") + print(f"Este es el operador llamado modulo '%'\nmira el resultado de a y b de los dos numeros que proporcionaste: {a % b}") + print(f"Este es el operador de division entera '//' \nmira el resultado de a y b de los dos numeros que proporcionaste: {a // b}") +operadores_aritmeticos(20,80) # coloca dos numeros que quieras + +# Operadores logicos: son and,or y not + +def operadores_logicos(x,y): + print(x==y and x > y) + print(x >= y or x != y) + print(not(x < y and x == y)) + +operadores_logicos(40,50) + +#Operadores de comparacion: + +def operadores_de_comparacion(a,b): + print(f"IGUAL: a == b, seran iguales? {a==b}") + print(f"DIFERENTE: a != b, seran distintos? {a != b} ") + print(f"Mayor: a > b,es 'a' mayor que b? {a > b}") + print(f"Menor: a < b es 'a' menor que b? {a < b}") + print(f"Menor o igual: a <= b es 'a' menor o igual que 'b'? {a <= b}") + print(f"Mayor o igual: a >= b es 'a' mayor o igual que 'b'? {a <= b}") + +operadores_de_comparacion(90,50) + +# Operadores de asignacion + +a = 5 +a += 3 +print(f"Suma y asignación (a += 3): {a}") +a -= 2 +print(f"Resta y asignación (a -= 2): {a}") +a *= 4 +print(f"Multiplicación y asignación (a *= 4): {a}") +a /= 2 +print(f"División y asignación (a /= 2): {a}") +a **= 2 +print(f"Potencia y asignación (a **= 2): {a}") +a //= 3 +print(f"División entera y asignación (a //= 3): {a}") +a %= 2 +print(f"Módulo y asignación (a %= 2): {a}") + +# Operadores de identidad: son is y is not,algo parecidos a los de comparacion + +def operadores_de_identidad(a,b): + print(f"'is' me devuelve true si estos son iguales,sera cierto que {a} is {b}? {a is b}") + print(f"'is not' me devuelve true si estos son diferentes,sera cierto que {a} is not {b}? {a is not b}") +operadores_de_identidad('HOLA','HUESO') + +# Operadores de pertenencia: in y not in + +def operadores_de_pertenencia(a,b): + print(f" '{a} in {b}' in devolvera True si '{a}' no esta en la frase {b}, veamos si es cierto {a in b}") + print(f" '{a} not in {b}' not in devolvera True si '{a}' no esta en la frase {b}, veamos si es cierto {a not in b}") + +operadores_de_pertenencia("a","barcelona") + +def operadores_de_bit(a,b): # Parecidos a los operadores logicos + print(f"AND: {a} & {b} = {a & b} ") + print(f"OR: {a} | {b} = {a | b} ") # + print(f"XOR: {a} ^ {b} = {a ^ b} ") + print(f"NOT: ~{a} = {~a}") + print(f"Desplazamiento a la derecha: {a} >> {b} = {a >> b} ") + print(f"Desplazamiento a la izquierda: {a} << {b} = {a << b} ") + +operadores_de_bit(10,3) + +""" +Estructuras de control +""" + +# Estructura de control condicional +def condicionales(): + prompt1 = input("escriba un numero: ") + prompt2 = input("Escriba otro numero: ") + if prompt1 < prompt2: + print(f" Si {prompt1} es menor que {prompt2}") + elif prompt1 > prompt2: + print(f" en este caso {prompt1} es mayor que {prompt1}") + else: + print("los numeros son iguales") +condicionales() + +# Iterativas +for i in range (6): + print("Hola Brais,esto es un bucle for") + +n = 20 +while n != 3: + print(n) + n -= 1 + +# excepciones +try: + print(0/0) +except: + print("Hay un error") +finally: + print("Como vas a dividr 0/0?") +""" +EXTRA +""" + +for j in range(9,56): + if j == 16: + continue + elif j % 3 == 0: + print(j) + else: + continue + +print("WALAAAAAAA!") \ No newline at end of file From c7f8f92d6e758400e2c74453a14f4bbb945efc0d Mon Sep 17 00:00:00 2001 From: adra-dev Date: Wed, 11 Sep 2024 17:47:06 -0600 Subject: [PATCH 149/539] #29 - Python --- Roadmap/29 - SOLID ISP/python/adra-dev.py | 198 ++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 Roadmap/29 - SOLID ISP/python/adra-dev.py diff --git a/Roadmap/29 - SOLID ISP/python/adra-dev.py b/Roadmap/29 - SOLID ISP/python/adra-dev.py new file mode 100644 index 0000000000..e2d696a96e --- /dev/null +++ b/Roadmap/29 - SOLID ISP/python/adra-dev.py @@ -0,0 +1,198 @@ +""" +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. + +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. + +by adra-dev +""" + +""" +Interface Segregation Principle (ISP): +El Principio de Segregación de Interfaces también fue propuesto por +uncle bob. la idea central del principio es: + + "Los clientes no deberían ser forzados a depender de métodos que + ellos no usan. las interfaces pertenecen a los clientes no a sus + herencias." + +documentacion:"https://realpython.com/solid-principles-python/" + +En este caso, los clientes son las clases y las subclases y las +interfaces consisten en los métodos y atributos. En otras palabras, +si una clase utiliza métodos en particular o atributos entonces esos +métodos y atributos deberían ser segregados a clases más específicas. + +Considera el siguiente ejemplo. +""" + +# printers_isp.py + +from abc import ABC, abstractmethod + +class Printer(ABC): + @abstractmethod + def print(self, document): + pass + + @abstractmethod + def fax(self, document): + pass + + @abstractmethod + def scan(self, document): + pass + +class OldPrinter(Printer): + def print(self, document): + print(f"Printing {document} in black and white...") + + def fax(self, document): + raise NotImplementedError("Fax functionality not supported") + + def scan(self, document): + raise NotImplementedError("Scan functionality not supported") + +class ModernPrinter(Printer): + def print(self, document): + print(f"Printing {document} in color...") + + def fax(self, document): + print(f"Faxing {document}...") + + def scan(self, document): + print(f"Scanning {document}...") + +""" +En este ejemplo, la clase base, impresora, provee las interfaces que +sus subclases deben implementar. OldPrinter hereda de printer y debe +implementar la misma interfaz. Sin embargo, OldPrinter no utiliza los + métodos .fax() y .scan() porque este tipo de impresora no soporta + estas funcionalidades. + +Esta implementación viola el ISP porque obliga a OldPrinter a mostrar +una interfaz que la subclase no implementa o necesita. Para +solucionar este problema, deberías separar las interfaces en clases +más pequeñas y más específicas. Así después puedes crear subclases +más concretas por medio de la herencia de múltiples interfaces que +dicha subclase necesite. + +""" + +# printers_isp.py + +from abc import ABC, abstractmethod + +class Printer(ABC): + @abstractmethod + def print(self, document): + pass + +class Fax(ABC): + @abstractmethod + def fax(self, document): + pass + +class Scanner(ABC): + @abstractmethod + def scan(self, document): + pass + +class OldPrinter(Printer): + def print(self, document): + print(f"Printing {document} in black and white...") + +class NewPrinter(Printer, Fax, Scanner): + def print(self, document): + print(f"Printing {document} in color...") + + def fax(self, document): + print(f"Faxing {document}...") + + def scan(self, document): + print(f"Scanning {document}...") + +""" + +Ahora Printer, Fax y Scanner son clases base que proveen interfaces +específicas con una única responsabilidad cada una. Para crear +OldPrinter, ya solo necesitas heredar la interfaz de Printer. De este +modo, la clase no tendrá métodos que no se utilicen. Para crear la +clase ModernPrinter, solo necesitas heredar de todas las interfaces +en resumen haz segregado la interfaz de Printer. + +""" + +""" +Extra +""" + +from abc import ABC, abstractmethod + +class Printer(ABC): + @abstractmethod + def print(self, document): + pass + +class Fax(ABC): + @abstractmethod + def fax(self, document): + pass + +class Scanner(ABC): + @abstractmethod + def scan(self, document): + pass + + +class BlackWhitePrinter(Printer): + def print(self, document): + print(f"Printing {document} in black and white...") + + +class ColorPrinter(Printer): + def print(self, document): + print(f"Printing {document} in color...") + + +class LastModelPrinter(Printer, Fax, Scanner): + def print(self, document): + print(f"Printing {document} in black and white...") + + def print_color(self, document): + print(f"Printing {document} in color...") + + def fax(self, document): + print(f"Faxing {document}...") + + def scan(self, document): + print(f"Scanning {document}...") + + +def test_printers(): + + printer = BlackWhitePrinter() + color_printer = ColorPrinter() + multifunction_printer = LastModelPrinter() + + printer.print("doc.pdf") + color_printer.print("doc.pdf") + multifunction_printer.print("doc.pdf") + multifunction_printer.print_color("doc.pdf") + multifunction_printer.scan("doc.pdf") + multifunction_printer.fax("doc.pdf") + + +test_printers() \ No newline at end of file From 8e43d061d92edb5540abd397c6d1327680976af7 Mon Sep 17 00:00:00 2001 From: kenysdev Date: Wed, 11 Sep 2024 19:53:33 -0500 Subject: [PATCH 150/539] 37 - Python - OASIS VS LINKIN PARK --- .../python/kenysdev.py | 159 ++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/kenysdev.py diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/kenysdev.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/kenysdev.py new file mode 100644 index 0000000000..116a9c6856 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/kenysdev.py @@ -0,0 +1,159 @@ +# _____________________________________ +# https://github.com/kenysdev +# 2024 - Python +# _____________________________________ +# 37 OASIS VS LINKIN PARK +# ------------------------------------ +""" +* ¡Dos de las bandas más grandes de la historia están de vuelta! +* Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? +* Desarrolla un programa que se conecte al API de Spotify y los compare. +* Requisitos: +* 1. Crea una cuenta de desarrollo en https://developer.spotify.com. +* 2. Conéctate al API utilizando tu lenguaje de programación. +* 3. Recupera datos de los endpoint que tú quieras. +* Acciones: +* 1. Accede a las estadísticas de las dos bandas. +* Por ejemplo: número total de seguidores, escuchas mensuales, +* canción con más reproducciones... +* 2. Compara los resultados de, por lo menos, 3 endpoint. +* 3. Muestra todos los resultados por consola para notificar al usuario. +* 4. Desarrolla un criterio para seleccionar qué banda es más popular. +""" + +# https://spotipy.readthedocs.io/en/2.24.0/ +import spotipy +from spotipy.oauth2 import SpotifyClientCredentials + +# https://pypi.org/project/python-dotenv/ +from dotenv import load_dotenv + +class Spotify: + def __init__(self): + load_dotenv() # SPOTIPY_CLIENT_ID, SPOTIPY_CLIENT_SECRET + self.sp = spotipy.Spotify(client_credentials_manager=SpotifyClientCredentials()) + + def get_artists(self, name: str) -> dict: + results = self.sp.search(q='artist:' + name, type='artist', limit=3) + if not results: + return {} + + artists = results['artists']['items'] + return artists + + def get_most_popular_artist(self, name: str) -> dict: + artists: dict = self.get_artists(name) + if not artists: + return {} + + artists_sorted = sorted(artists, key=lambda x: x['popularity'], reverse=True) + most_popular_artist = artists_sorted[0] + return most_popular_artist + + def artist_top_tracks(self, id_artist) -> dict: + top_track = self.sp.artist_top_tracks(id_artist) + if not top_track: + return {} + return top_track + + def artist_albums(self, id_artist) -> dict: + albums = self.sp.artist_albums(id_artist, album_type='album') + if not albums: + return {} + return albums + +class Versus: + def __init__(self, artist1: dict, artist2: dict, spotify_instance): + self.a1 = artist1 + self.a2 = artist2 + self.sp = spotify_instance + self.a1_score = 0 + self.a2_score = 0 + + def __popularity(self): + a1_pop: int = self.a1['popularity'] + a2_pop: int = self.a2['popularity'] + + print(f"Popularidad: {a1_pop} vs {a2_pop}") + if a1_pop > a2_pop: + self.a1_score += 1 + elif a2_pop > a1_pop: + self.a2_score += 1 + + def __followers(self): + a1_foll: int = self.a1['followers']['total'] + a2_foll: int = self.a2['followers']['total'] + + print(f"Seguidores: {a1_foll} vs {a2_foll}") + if a1_foll > a2_foll: + self.a1_score += 1 + elif a2_foll > a1_foll: + self.a2_score += 1 + + def __top3_tracks(self): + a1_top: dict = self.sp.artist_top_tracks(self.a1['id']) + a2_top: dict = self.sp.artist_top_tracks(self.a2['id']) + a1_pop: int = sum(track['popularity'] for track in a1_top['tracks'][:3]) + a2_pop: int = sum(track['popularity'] for track in a2_top['tracks'][:3]) + print(f"Popularidad Top 3 canciones: {a1_pop} vs {a2_pop}") + + if a1_pop > a2_pop: + self.a1_score += 1 + elif a2_pop > a1_pop: + self.a2_score += 1 + + def __albums_and_active_years(self): + a1_albums: list = self.sp.artist_albums(self.a1['id'])['items'] + a2_albums: list = self.sp.artist_albums(self.a2['id'])['items'] + print(f"Número de álbumes: {len(a1_albums)} vs {len(a2_albums)}") + if len(a1_albums) > len(a2_albums): + self.a1_score += 1 + elif len(a2_albums) > len(a1_albums): + self.a2_score += 1 + + a1_years = set(album['release_date'][:4] for album in a1_albums) + a2_years = set(album['release_date'][:4] for album in a2_albums) + print(f"Años activos: {len(a1_years)} vs {len(a2_years)}") + if len(a1_years) > len(a2_years): + self.a1_score += 1 + elif len(a2_years) > len(a1_years): + self.a2_score += 1 + + def __final_result(self): + print("\nRESULTADO FINAL:") + print(f"{self.a1['name']}: {self.a1_score} puntos") + print(f"{self.a2['name']}: {self.a2_score} puntos") + + if self.a1_score > self.a2_score: + print(f"\n¡'{self.a1['name']}' gana el versus!") + elif self.a2_score > self.a1_score: + print(f"\n¡'{self.a2['name']}' gana el versus!") + else: + print("\n¡Es un empate!") + + def start(self): + print(f"{self.a1['name']} vs {self.a2['name']}") + self.__popularity() + self.__followers() + self.__top3_tracks() + self.__albums_and_active_years() + self.__final_result() + + +def main(): + print("VERSUS") + sp = Spotify() + artist1: dict = sp.get_most_popular_artist(name="Oasis") + artist2: dict = sp.get_most_popular_artist(name="Linkin Park") + + if not artist1 and not artist2: + print("Artistas no encontrados") + return + + vs = Versus(artist1, artist2, sp) + vs.start() + + +if __name__ == "__main__": + main() + From 9c1008090a6562d206e60ef39b6de386fcc2bf79 Mon Sep 17 00:00:00 2001 From: mouredev Date: Thu, 12 Sep 2024 00:15:24 +0000 Subject: [PATCH 151/539] Update stats --- Roadmap/stats.json | 1726 ++++++++++++++++++++++---------------------- 1 file changed, 875 insertions(+), 851 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index f796199d6f..5391ad2274 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,18 +1,18 @@ { "challenges_total": 38, "languages_total": 48, - "files_total": 6933, - "users_total": 1160, + "files_total": 6958, + "users_total": 1164, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1262 + "count": 1271 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 765 + "count": 767 }, { "order": 3, @@ -66,12 +66,12 @@ }, { "order": 13, - "name": "14 - FECHAS", - "count": 130 + "name": "13 - PRUEBAS UNITARIAS", + "count": 131 }, { "order": 14, - "name": "13 - PRUEBAS UNITARIAS", + "name": "14 - FECHAS", "count": 130 }, { @@ -92,12 +92,12 @@ { "order": 18, "name": "17 - ITERACIONES", - "count": 114 + "count": 115 }, { "order": 19, "name": "18 - CONJUNTOS", - "count": 112 + "count": 113 }, { "order": 20, @@ -112,12 +112,12 @@ { "order": 22, "name": "21 - CALLBACKS", - "count": 87 + "count": 88 }, { "order": 23, "name": "22 - FUNCIONES DE ORDEN SUPERIOR", - "count": 81 + "count": 82 }, { "order": 24, @@ -157,32 +157,32 @@ { "order": 31, "name": "32 - BATALLA DEADPOOL Y WOLVERINE", - "count": 47 + "count": 49 }, { "order": 32, "name": "30 - SOLID DIP", - "count": 46 + "count": 47 }, { "order": 33, "name": "33 - RESCATANDO A MICKEY", - "count": 41 + "count": 42 }, { "order": 34, - "name": "35 - REPARTIENDO LOS ANILLOS DE PODER", - "count": 38 + "name": "31 - SIMULADOR JUEGOS OL\u00cdMPICOS", + "count": 39 }, { "order": 35, - "name": "31 - SIMULADOR JUEGOS OL\u00cdMPICOS", + "name": "36 - EL SOMBRERO SELECCIONADOR", "count": 38 }, { "order": 36, - "name": "36 - EL SOMBRERO SELECCIONADOR", - "count": 37 + "name": "35 - REPARTIENDO LOS ANILLOS DE PODER", + "count": 38 }, { "order": 37, @@ -192,51 +192,51 @@ { "order": 38, "name": "37 - OASIS VS LINKIN PARK", - "count": 3 + "count": 6 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 2985, - "percentage": 43.05 + "count": 2995, + "percentage": 43.04 }, { "order": 2, "name": "javascript", - "count": 1379, - "percentage": 19.89 + "count": 1382, + "percentage": 19.86 }, { "order": 3, "name": "java", - "count": 622, - "percentage": 8.97 + "count": 626, + "percentage": 9.0 }, { "order": 4, "name": "typescript", - "count": 305, - "percentage": 4.4 + "count": 308, + "percentage": 4.43 }, { "order": 5, "name": "c#", "count": 253, - "percentage": 3.65 + "percentage": 3.64 }, { "order": 6, "name": "kotlin", - "count": 217, - "percentage": 3.13 + "count": 220, + "percentage": 3.16 }, { "order": 7, "name": "go", "count": 213, - "percentage": 3.07 + "percentage": 3.06 }, { "order": 8, @@ -247,32 +247,32 @@ { "order": 9, "name": "php", - "count": 152, - "percentage": 2.19 + "count": 153, + "percentage": 2.2 }, { "order": 10, "name": "c++", "count": 115, - "percentage": 1.66 + "percentage": 1.65 }, { "order": 11, "name": "rust", "count": 113, - "percentage": 1.63 + "percentage": 1.62 }, { "order": 12, "name": "c", "count": 67, - "percentage": 0.97 + "percentage": 0.96 }, { "order": 13, "name": "dart", "count": 49, - "percentage": 0.71 + "percentage": 0.7 }, { "order": 14, @@ -296,7 +296,7 @@ "order": 17, "name": "ruby", "count": 33, - "percentage": 0.48 + "percentage": 0.47 }, { "order": 18, @@ -343,8 +343,8 @@ { "order": 25, "name": "sql", - "count": 7, - "percentage": 0.1 + "count": 8, + "percentage": 0.11 }, { "order": 26, @@ -495,7 +495,7 @@ { "order": 2, "name": "kenysdev", - "count": 148, + "count": 149, "languages": 4 }, { @@ -650,136 +650,136 @@ }, { "order": 28, - "name": "alexdevrep", - "count": 38, - "languages": 3 + "name": "neslarra", + "count": 39, + "languages": 2 }, { "order": 29, - "name": "neslarra", + "name": "eulogioep", "count": 38, - "languages": 2 + "languages": 6 }, { "order": 30, + "name": "alexdevrep", + "count": 38, + "languages": 3 + }, + { + "order": 31, "name": "luishendrix92", "count": 37, "languages": 2 }, { - "order": 31, + "order": 32, "name": "emmanuelmmontesinos", "count": 37, "languages": 1 }, { - "order": 32, + "order": 33, "name": "mouredev", "count": 37, "languages": 1 }, { - "order": 33, + "order": 34, "name": "asjordi", "count": 37, "languages": 1 }, { - "order": 34, + "order": 35, "name": "n0hagonada", "count": 36, "languages": 3 }, { - "order": 35, + "order": 36, "name": "rauldoezon", "count": 36, "languages": 1 }, { - "order": 36, + "order": 37, "name": "rigo93acosta", "count": 36, "languages": 1 }, { - "order": 37, + "order": 38, "name": "oriaj3", "count": 35, "languages": 1 }, { - "order": 38, + "order": 39, "name": "angelsanchezt", "count": 34, "languages": 12 }, { - "order": 39, + "order": 40, "name": "rikmij", "count": 34, "languages": 2 }, { - "order": 40, + "order": 41, + "name": "fborjalv", + "count": 34, + "languages": 1 + }, + { + "order": 42, "name": "qv1ko", "count": 33, "languages": 4 }, { - "order": 41, + "order": 43, "name": "worlion", "count": 33, "languages": 2 }, { - "order": 42, + "order": 44, "name": "avcenal", "count": 33, "languages": 1 }, { - "order": 43, + "order": 45, "name": "juandaherrera", "count": 32, "languages": 5 }, { - "order": 44, + "order": 46, "name": "pedroomar23", "count": 32, "languages": 3 }, { - "order": 45, + "order": 47, "name": "pyramsd", "count": 32, "languages": 1 }, { - "order": 46, - "name": "fborjalv", - "count": 32, - "languages": 1 - }, - { - "order": 47, + "order": 48, "name": "ronipg", "count": 31, "languages": 4 }, { - "order": 48, + "order": 49, "name": "marcode24", "count": 30, "languages": 3 }, - { - "order": 49, - "name": "eulogioep", - "count": 30, - "languages": 1 - }, { "order": 50, "name": "alanshakir", @@ -914,61 +914,61 @@ }, { "order": 72, + "name": "simonguzman", + "count": 23, + "languages": 1 + }, + { + "order": 73, "name": "victor-casta", "count": 22, "languages": 3 }, { - "order": 73, + "order": 74, "name": "ycanas", "count": 22, "languages": 2 }, { - "order": 74, + "order": 75, "name": "emedevelopa", "count": 22, "languages": 1 }, { - "order": 75, + "order": 76, "name": "jptxaya", "count": 22, "languages": 1 }, { - "order": 76, + "order": 77, "name": "giovanyosorio", "count": 21, "languages": 2 }, - { - "order": 77, - "name": "igledev", - "count": 21, - "languages": 1 - }, { "order": 78, - "name": "davidmoralesdeveloper", + "name": "igledev", "count": 21, "languages": 1 }, { "order": 79, - "name": "gringoam", + "name": "davidmoralesdeveloper", "count": 21, "languages": 1 }, { "order": 80, - "name": "restevean", + "name": "gringoam", "count": 21, "languages": 1 }, { "order": 81, - "name": "simonguzman", + "name": "restevean", "count": 21, "languages": 1 }, @@ -992,79 +992,79 @@ }, { "order": 85, - "name": "saezmd", + "name": "gordo-master", "count": 19, "languages": 1 }, { "order": 86, - "name": "juandaw37", + "name": "saezmd", "count": 19, "languages": 1 }, { "order": 87, - "name": "trufoplus", + "name": "juandaw37", "count": 19, "languages": 1 }, { "order": 88, + "name": "trufoplus", + "count": 19, + "languages": 1 + }, + { + "order": 89, "name": "pguillo02", "count": 18, "languages": 5 }, { - "order": 89, + "order": 90, "name": "estuardodev", "count": 18, "languages": 4 }, { - "order": 90, + "order": 91, "name": "lumanet", "count": 18, "languages": 1 }, { - "order": 91, + "order": 92, "name": "mensius87", "count": 17, "languages": 4 }, { - "order": 92, + "order": 93, "name": "kevined11", "count": 17, "languages": 3 }, { - "order": 93, + "order": 94, "name": "raulfauli", "count": 17, "languages": 2 }, { - "order": 94, + "order": 95, "name": "saicobys", "count": 17, "languages": 2 }, - { - "order": 95, - "name": "andreavzqz", - "count": 17, - "languages": 1 - }, { "order": 96, - "name": "hyromy", + "name": "andreavzqz", "count": 17, "languages": 1 }, { "order": 97, - "name": "gordo-master", + "name": "hyromy", "count": 17, "languages": 1 }, @@ -1148,55 +1148,55 @@ }, { "order": 111, - "name": "sniker1223", - "count": 14, - "languages": 4 + "name": "mvidalb", + "count": 15, + "languages": 1 }, { "order": 112, - "name": "redom69", + "name": "sniker1223", "count": 14, "languages": 4 }, { "order": 113, - "name": "andresgcastillo", + "name": "redom69", "count": 14, - "languages": 2 + "languages": 4 }, { "order": 114, - "name": "ygriegasb", + "name": "andresgcastillo", "count": 14, "languages": 2 }, { "order": 115, - "name": "gonzadev28", + "name": "ygriegasb", "count": 14, "languages": 2 }, { "order": 116, - "name": "elmer125", + "name": "gonzadev28", "count": 14, - "languages": 1 + "languages": 2 }, { "order": 117, - "name": "vincentrodriguezr", + "name": "elmer125", "count": 14, "languages": 1 }, { "order": 118, - "name": "mikelm2020", + "name": "vincentrodriguezr", "count": 14, "languages": 1 }, { "order": 119, - "name": "mvidalb", + "name": "mikelm2020", "count": 14, "languages": 1 }, @@ -2282,403 +2282,403 @@ }, { "order": 300, + "name": "d1d4cum", + "count": 5, + "languages": 1 + }, + { + "order": 301, "name": "zarakilancelot", "count": 4, "languages": 3 }, { - "order": 301, + "order": 302, "name": "eonozux", "count": 4, "languages": 2 }, { - "order": 302, + "order": 303, "name": "yablik", "count": 4, "languages": 2 }, { - "order": 303, + "order": 304, "name": "fullovellas", "count": 4, "languages": 2 }, { - "order": 304, + "order": 305, "name": "k3nvd", "count": 4, "languages": 2 }, { - "order": 305, + "order": 306, "name": "josefuentes-dev", "count": 4, "languages": 2 }, { - "order": 306, + "order": 307, "name": "willr30", "count": 4, "languages": 2 }, { - "order": 307, + "order": 308, "name": "ruthmp", "count": 4, "languages": 2 }, { - "order": 308, + "order": 309, "name": "daeduol", "count": 4, "languages": 2 }, { - "order": 309, + "order": 310, "name": "mendozalz", "count": 4, "languages": 2 }, { - "order": 310, + "order": 311, "name": "salkalero", "count": 4, "languages": 2 }, { - "order": 311, + "order": 312, "name": "drvito1977", "count": 4, "languages": 1 }, { - "order": 312, + "order": 313, "name": "elhacedordecosas", "count": 4, "languages": 1 }, { - "order": 313, + "order": 314, "name": "andeveling", "count": 4, "languages": 1 }, { - "order": 314, + "order": 315, "name": "santiago-munoz-garcia", "count": 4, "languages": 1 }, { - "order": 315, + "order": 316, "name": "deivitdev", "count": 4, "languages": 1 }, { - "order": 316, + "order": 317, "name": "joshbaez", "count": 4, "languages": 1 }, { - "order": 317, + "order": 318, "name": "marcoslombardo", "count": 4, "languages": 1 }, { - "order": 318, + "order": 319, "name": "lrpeset", "count": 4, "languages": 1 }, { - "order": 319, + "order": 320, "name": "dieswae", "count": 4, "languages": 1 }, { - "order": 320, + "order": 321, "name": "mateo423", "count": 4, "languages": 1 }, { - "order": 321, + "order": 322, "name": "joaquinlopez14", "count": 4, "languages": 1 }, { - "order": 322, + "order": 323, "name": "angelurrutdev", "count": 4, "languages": 1 }, { - "order": 323, + "order": 324, "name": "elianisdev", "count": 4, "languages": 1 }, { - "order": 324, + "order": 325, "name": "omegatroy", "count": 4, "languages": 1 }, { - "order": 325, + "order": 326, "name": "socramwd", "count": 4, "languages": 1 }, { - "order": 326, + "order": 327, "name": "carzep09", "count": 4, "languages": 1 }, { - "order": 327, + "order": 328, "name": "mayerga", "count": 4, "languages": 1 }, { - "order": 328, + "order": 329, "name": "hugovrc", "count": 4, "languages": 1 }, { - "order": 329, + "order": 330, "name": "cdbiancotti", "count": 4, "languages": 1 }, { - "order": 330, + "order": 331, "name": "h4ckxel", "count": 4, "languages": 1 }, { - "order": 331, + "order": 332, "name": "tobibordino", "count": 4, "languages": 1 }, { - "order": 332, + "order": 333, "name": "guillermo-k", "count": 4, "languages": 1 }, { - "order": 333, + "order": 334, "name": "zakkdrte", "count": 4, "languages": 1 }, { - "order": 334, + "order": 335, "name": "sarismejiasanchez", "count": 4, "languages": 1 }, { - "order": 335, + "order": 336, "name": "buriticasara", "count": 4, "languages": 1 }, { - "order": 336, + "order": 337, "name": "davstudy", "count": 4, "languages": 1 }, { - "order": 337, + "order": 338, "name": "zerek247", "count": 4, "languages": 1 }, { - "order": 338, + "order": 339, "name": "vicman-182", "count": 4, "languages": 1 }, { - "order": 339, + "order": 340, "name": "dlgai12", "count": 4, "languages": 1 }, - { - "order": 340, - "name": "rodrigoghr", - "count": 4, - "languages": 1 - }, { "order": 341, - "name": "txuky", + "name": "rodrigoghr", "count": 4, "languages": 1 }, { "order": 342, - "name": "nox456", + "name": "txuky", "count": 4, "languages": 1 }, { "order": 343, - "name": "mplatab", + "name": "nox456", "count": 4, "languages": 1 }, { "order": 344, - "name": "angell4s", + "name": "mplatab", "count": 4, "languages": 1 }, { "order": 345, - "name": "quejuan52", + "name": "angell4s", "count": 4, "languages": 1 }, { "order": 346, - "name": "axelprz", + "name": "quejuan52", "count": 4, "languages": 1 }, { "order": 347, - "name": "javirub", + "name": "axelprz", "count": 4, "languages": 1 }, { "order": 348, - "name": "mallcca", + "name": "javirub", "count": 4, "languages": 1 }, { "order": 349, - "name": "sunjamer", + "name": "mallcca", "count": 4, "languages": 1 }, { "order": 350, - "name": "carrenoalexander", + "name": "sunjamer", "count": 4, "languages": 1 }, { "order": 351, - "name": "jadraz", + "name": "carrenoalexander", "count": 4, "languages": 1 }, { "order": 352, - "name": "anvildestroyer", + "name": "jadraz", "count": 4, "languages": 1 }, { "order": 353, - "name": "luissssoto", + "name": "anvildestroyer", "count": 4, "languages": 1 }, { "order": 354, - "name": "albertorevel", + "name": "luissssoto", "count": 4, "languages": 1 }, { "order": 355, - "name": "juanca2805", + "name": "albertorevel", "count": 4, "languages": 1 }, { "order": 356, - "name": "bladi23", + "name": "juanca2805", "count": 4, "languages": 1 }, { "order": 357, - "name": "blasbarragan", + "name": "bladi23", "count": 4, "languages": 1 }, { "order": 358, - "name": "jerrysantana", + "name": "blasbarragan", "count": 4, "languages": 1 }, { "order": 359, - "name": "abel-ade", + "name": "jerrysantana", "count": 4, "languages": 1 }, { "order": 360, - "name": "jairo-alejandro", + "name": "abel-ade", "count": 4, "languages": 1 }, { "order": 361, - "name": "sbs24", + "name": "jairo-alejandro", "count": 4, "languages": 1 }, { "order": 362, - "name": "traver79", + "name": "sbs24", "count": 4, "languages": 1 }, { "order": 363, - "name": "ramxv", + "name": "traver79", "count": 4, "languages": 1 }, { "order": 364, - "name": "inkhemi", + "name": "ramxv", "count": 4, "languages": 1 }, { "order": 365, - "name": "juperdev", + "name": "inkhemi", "count": 4, "languages": 1 }, { "order": 366, - "name": "d1d4cum", + "name": "juperdev", "count": 4, "languages": 1 }, @@ -3512,3936 +3512,3960 @@ }, { "order": 505, - "name": "juxxon23", + "name": "mantaras96", "count": 3, "languages": 1 }, { "order": 506, - "name": "frangarmez21", + "name": "juxxon23", "count": 3, "languages": 1 }, { "order": 507, - "name": "ikeragi05", + "name": "frangarmez21", "count": 3, "languages": 1 }, { "order": 508, - "name": "johnalexguerrero", + "name": "ikeragi05", "count": 3, "languages": 1 }, { "order": 509, - "name": "devvdroid01", - "count": 2, - "languages": 2 + "name": "johnalexguerrero", + "count": 3, + "languages": 1 }, { "order": 510, - "name": "sgb004", + "name": "devvdroid01", "count": 2, "languages": 2 }, { "order": 511, - "name": "chuanmi", + "name": "sgb004", "count": 2, "languages": 2 }, { "order": 512, - "name": "jlcareglio", + "name": "chuanmi", "count": 2, "languages": 2 }, { "order": 513, - "name": "jurgen-alfaro", + "name": "jlcareglio", "count": 2, "languages": 2 }, { "order": 514, - "name": "lydaf", + "name": "jurgen-alfaro", "count": 2, "languages": 2 }, { "order": 515, - "name": "carresoft", + "name": "lydaf", "count": 2, "languages": 2 }, { "order": 516, - "name": "ismaelmatiz", + "name": "carresoft", "count": 2, "languages": 2 }, { "order": 517, - "name": "tecfer", + "name": "ismaelmatiz", "count": 2, "languages": 2 }, { "order": 518, - "name": "elsanty08", + "name": "tecfer", "count": 2, "languages": 2 }, { "order": 519, - "name": "jorgesilencio", + "name": "elsanty08", "count": 2, "languages": 2 }, { "order": 520, - "name": "berentolkien", + "name": "jorgesilencio", "count": 2, "languages": 2 }, { "order": 521, - "name": "felipedev303", + "name": "berentolkien", "count": 2, "languages": 2 }, { "order": 522, - "name": "lemito66", + "name": "felipedev303", "count": 2, "languages": 2 }, { "order": 523, - "name": "alexsamboy", + "name": "lemito66", "count": 2, "languages": 2 }, { "order": 524, - "name": "enrgarvic", + "name": "alexsamboy", "count": 2, "languages": 2 }, { "order": 525, - "name": "jovany-java", + "name": "enrgarvic", "count": 2, "languages": 2 }, { "order": 526, - "name": "raul-progr", + "name": "jovany-java", "count": 2, "languages": 2 }, { "order": 527, - "name": "jmofuture", + "name": "raul-progr", "count": 2, "languages": 2 }, { "order": 528, - "name": "angel-alvarez-dev", + "name": "jmofuture", "count": 2, "languages": 2 }, { "order": 529, - "name": "lilberick", + "name": "angel-alvarez-dev", "count": 2, "languages": 2 }, { "order": 530, - "name": "camiloforero1997", + "name": "lilberick", "count": 2, "languages": 2 }, { "order": 531, - "name": "alejosor", + "name": "camiloforero1997", "count": 2, "languages": 2 }, { "order": 532, - "name": "juan-wills", + "name": "alejosor", "count": 2, "languages": 2 }, { "order": 533, - "name": "lurtur", + "name": "juan-wills", "count": 2, "languages": 2 }, { "order": 534, - "name": "jhonatanmustiolacas", + "name": "lurtur", "count": 2, "languages": 2 }, { "order": 535, - "name": "elmarqueli", + "name": "jhonatanmustiolacas", "count": 2, - "languages": 1 + "languages": 2 }, { "order": 536, - "name": "tiaguiito3", + "name": "elmarqueli", "count": 2, "languages": 1 }, { "order": 537, - "name": "angelargumedo", + "name": "tiaguiito3", "count": 2, "languages": 1 }, { "order": 538, - "name": "reaien", + "name": "angelargumedo", "count": 2, "languages": 1 }, { "order": 539, - "name": "rikar20", + "name": "reaien", "count": 2, "languages": 1 }, { "order": 540, - "name": "vdroiid", + "name": "rikar20", "count": 2, "languages": 1 }, { "order": 541, - "name": "frannmv", + "name": "vdroiid", "count": 2, "languages": 1 }, { "order": 542, - "name": "rrcoder", + "name": "frannmv", "count": 2, "languages": 1 }, { "order": 543, - "name": "diegosilval", + "name": "rrcoder", "count": 2, "languages": 1 }, { "order": 544, - "name": "nandaalf", + "name": "diegosilval", "count": 2, "languages": 1 }, { "order": 545, - "name": "hawkbott", + "name": "nandaalf", "count": 2, "languages": 1 }, { "order": 546, - "name": "tomasmarquez81", + "name": "hawkbott", "count": 2, "languages": 1 }, { "order": 547, - "name": "poetry0354", + "name": "tomasmarquez81", "count": 2, "languages": 1 }, { "order": 548, - "name": "santiagocuevas2003", + "name": "poetry0354", "count": 2, "languages": 1 }, { "order": 549, - "name": "lmedina96", + "name": "santiagocuevas2003", "count": 2, "languages": 1 }, { "order": 550, - "name": "lorenamesa", + "name": "lmedina96", "count": 2, "languages": 1 }, { "order": 551, - "name": "raulallue", + "name": "lorenamesa", "count": 2, "languages": 1 }, { "order": 552, - "name": "luciarf", + "name": "raulallue", "count": 2, "languages": 1 }, { "order": 553, - "name": "aserranot", + "name": "luciarf", "count": 2, "languages": 1 }, { "order": 554, - "name": "devcherry1", + "name": "aserranot", "count": 2, "languages": 1 }, { "order": 555, - "name": "yowcloud", + "name": "devcherry1", "count": 2, "languages": 1 }, { "order": 556, - "name": "fefestuve", + "name": "yowcloud", "count": 2, "languages": 1 }, { "order": 557, - "name": "fsfigueroa77", + "name": "fefestuve", "count": 2, "languages": 1 }, { "order": 558, - "name": "nahuelborromeo", + "name": "fsfigueroa77", "count": 2, "languages": 1 }, { "order": 559, - "name": "peibolstrike", + "name": "nahuelborromeo", "count": 2, "languages": 1 }, { "order": 560, - "name": "dararod", + "name": "peibolstrike", "count": 2, "languages": 1 }, { "order": 561, - "name": "waldid32", + "name": "dararod", "count": 2, "languages": 1 }, { "order": 562, - "name": "reanthonyh", + "name": "navarroemiliano", "count": 2, "languages": 1 }, { "order": 563, - "name": "roilhi", + "name": "waldid32", "count": 2, "languages": 1 }, { "order": 564, - "name": "cristiansystem", + "name": "reanthonyh", "count": 2, "languages": 1 }, { "order": 565, - "name": "evelynnobile", + "name": "roilhi", "count": 2, "languages": 1 }, { "order": 566, - "name": "nicolastapiasanz", + "name": "cristiansystem", "count": 2, "languages": 1 }, { "order": 567, - "name": "gomezcamilo9701", + "name": "evelynnobile", "count": 2, "languages": 1 }, { "order": 568, - "name": "vicgallego", + "name": "nicolastapiasanz", "count": 2, "languages": 1 }, { "order": 569, - "name": "freddyasierraj", + "name": "gomezcamilo9701", "count": 2, "languages": 1 }, { "order": 570, - "name": "luis-vb", + "name": "vicgallego", "count": 2, "languages": 1 }, { "order": 571, - "name": "vikkanh", + "name": "freddyasierraj", "count": 2, "languages": 1 }, { "order": 572, - "name": "juaruibr", + "name": "luis-vb", "count": 2, "languages": 1 }, { "order": 573, - "name": "crisdev3", + "name": "vikkanh", "count": 2, "languages": 1 }, { "order": 574, - "name": "frealexandro", + "name": "juaruibr", "count": 2, "languages": 1 }, { "order": 575, - "name": "gamitocu", + "name": "crisdev3", "count": 2, "languages": 1 }, { "order": 576, - "name": "saracorraless", + "name": "frealexandro", "count": 2, "languages": 1 }, { "order": 577, - "name": "cesarocbu", + "name": "gamitocu", "count": 2, "languages": 1 }, { "order": 578, - "name": "jeisonredondo", + "name": "saracorraless", "count": 2, "languages": 1 }, { "order": 579, - "name": "alanox1", + "name": "cesarocbu", "count": 2, "languages": 1 }, { "order": 580, - "name": "christianumb", + "name": "jeisonredondo", "count": 2, "languages": 1 }, { "order": 581, - "name": "jhonf1992", + "name": "alanox1", "count": 2, "languages": 1 }, { "order": 582, - "name": "k4rv3r", + "name": "christianumb", "count": 2, "languages": 1 }, { "order": 583, - "name": "rikar2o", + "name": "jhonf1992", "count": 2, "languages": 1 }, { "order": 584, - "name": "rolo27s", + "name": "k4rv3r", "count": 2, "languages": 1 }, { "order": 585, - "name": "franciscocuminilondero", + "name": "rikar2o", "count": 2, "languages": 1 }, { "order": 586, - "name": "wesborland-github", + "name": "rolo27s", "count": 2, "languages": 1 }, { "order": 587, - "name": "doblea74", + "name": "franciscocuminilondero", "count": 2, "languages": 1 }, { "order": 588, - "name": "matiasfarfan89", + "name": "wesborland-github", "count": 2, "languages": 1 }, { "order": 589, - "name": "nxl22", + "name": "doblea74", "count": 2, "languages": 1 }, { "order": 590, - "name": "valeriatorrealba", + "name": "matiasfarfan89", "count": 2, "languages": 1 }, { "order": 591, - "name": "farthaz", + "name": "nxl22", "count": 2, "languages": 1 }, { "order": 592, - "name": "aleoe01", + "name": "valeriatorrealba", "count": 2, "languages": 1 }, { "order": 593, - "name": "jaimemunozdev", + "name": "farthaz", "count": 2, "languages": 1 }, { "order": 594, - "name": "miguelrejon96", + "name": "aleoe01", "count": 2, "languages": 1 }, { "order": 595, - "name": "jorge186414", + "name": "jaimemunozdev", "count": 2, "languages": 1 }, { "order": 596, - "name": "andnikdev", + "name": "miguelrejon96", "count": 2, "languages": 1 }, { "order": 597, - "name": "soldochris", + "name": "jorge186414", "count": 2, "languages": 1 }, { "order": 598, - "name": "leonardo291024", + "name": "andnikdev", "count": 2, "languages": 1 }, { "order": 599, - "name": "mickel-arroz", + "name": "soldochris", "count": 2, "languages": 1 }, { "order": 600, - "name": "gianbordon", + "name": "leonardo291024", "count": 2, "languages": 1 }, { "order": 601, - "name": "cpcarlosprieto", + "name": "mickel-arroz", "count": 2, "languages": 1 }, { "order": 602, - "name": "juangomezn", + "name": "gianbordon", "count": 2, "languages": 1 }, { "order": 603, - "name": "angelvelasco1", + "name": "cpcarlosprieto", "count": 2, "languages": 1 }, { "order": 604, - "name": "ssanjua", + "name": "juangomezn", "count": 2, "languages": 1 }, { "order": 605, - "name": "murquisdev", + "name": "angelvelasco1", "count": 2, "languages": 1 }, { "order": 606, - "name": "duendeintemporal", + "name": "ssanjua", "count": 2, "languages": 1 }, { "order": 607, - "name": "davhage", + "name": "murquisdev", "count": 2, "languages": 1 }, { "order": 608, - "name": "erikayeah", + "name": "duendeintemporal", "count": 2, "languages": 1 }, { "order": 609, - "name": "misterdan100", + "name": "davhage", "count": 2, "languages": 1 }, { "order": 610, - "name": "memogv", + "name": "erikayeah", "count": 2, "languages": 1 }, { "order": 611, - "name": "glaboryp", + "name": "misterdan100", "count": 2, "languages": 1 }, { "order": 612, - "name": "ovjohn", + "name": "memogv", "count": 2, "languages": 1 }, { "order": 613, - "name": "haryblanco20", + "name": "glaboryp", "count": 2, "languages": 1 }, { "order": 614, - "name": "christianhernandezb", + "name": "ovjohn", "count": 2, "languages": 1 }, { "order": 615, - "name": "akzorla", + "name": "haryblanco20", "count": 2, "languages": 1 }, { "order": 616, - "name": "0pio", + "name": "christianhernandezb", "count": 2, "languages": 1 }, { "order": 617, - "name": "porto1090", + "name": "akzorla", "count": 2, "languages": 1 }, { "order": 618, - "name": "johannhsdev", + "name": "0pio", "count": 2, "languages": 1 }, { "order": 619, - "name": "jago86", + "name": "porto1090", "count": 2, "languages": 1 }, { "order": 620, - "name": "diegokarabin", + "name": "johannhsdev", "count": 2, "languages": 1 }, { "order": 621, - "name": "gugliio", + "name": "jago86", "count": 2, "languages": 1 }, { "order": 622, - "name": "kcx46", + "name": "diegokarabin", "count": 2, "languages": 1 }, { "order": 623, - "name": "nachodev7", + "name": "gugliio", "count": 2, "languages": 1 }, { "order": 624, - "name": "fernandoatello", + "name": "kcx46", "count": 2, "languages": 1 }, { "order": 625, - "name": "pablosalme", + "name": "nachodev7", "count": 2, "languages": 1 }, { "order": 626, - "name": "jsacristanbeltri", + "name": "fernandoatello", "count": 2, "languages": 1 }, { "order": 627, - "name": "baauus", + "name": "pablosalme", "count": 2, "languages": 1 }, { "order": 628, - "name": "s384", + "name": "jsacristanbeltri", "count": 2, "languages": 1 }, { "order": 629, - "name": "lauradiazm29", + "name": "baauus", "count": 2, "languages": 1 }, { "order": 630, - "name": "pakomor", + "name": "s384", "count": 2, "languages": 1 }, { "order": 631, - "name": "adogdev", + "name": "lauradiazm29", "count": 2, "languages": 1 }, { "order": 632, - "name": "eriickm", + "name": "pakomor", "count": 2, "languages": 1 }, { "order": 633, - "name": "christiancoc", + "name": "adogdev", "count": 2, "languages": 1 }, { "order": 634, - "name": "rojasricoo", + "name": "eriickm", "count": 2, "languages": 1 }, { "order": 635, - "name": "inf015", + "name": "christiancoc", "count": 2, "languages": 1 }, { "order": 636, - "name": "csaraugusto2", + "name": "rojasricoo", "count": 2, "languages": 1 }, { "order": 637, - "name": "zalazarmartin", + "name": "inf015", "count": 2, "languages": 1 }, { "order": 638, - "name": "ziellucio01", + "name": "csaraugusto2", "count": 2, "languages": 1 }, { "order": 639, - "name": "dota43ver", + "name": "zalazarmartin", "count": 2, "languages": 1 }, { "order": 640, - "name": "fjsubero", + "name": "ziellucio01", "count": 2, "languages": 1 }, { "order": 641, - "name": "julind0", + "name": "dota43ver", "count": 2, "languages": 1 }, { "order": 642, - "name": "jmontoyac", + "name": "fjsubero", "count": 2, "languages": 1 }, { "order": 643, - "name": "dariangl", + "name": "julind0", "count": 2, "languages": 1 }, { "order": 644, - "name": "ggtorca", + "name": "jmontoyac", "count": 2, "languages": 1 }, { "order": 645, - "name": "soydaviddev", + "name": "dariangl", "count": 2, "languages": 1 }, { "order": 646, - "name": "e-techgod", + "name": "ggtorca", "count": 2, "languages": 1 }, { "order": 647, - "name": "aboredllama", + "name": "soydaviddev", "count": 2, "languages": 1 }, { "order": 648, - "name": "nevaito", + "name": "e-techgod", "count": 2, "languages": 1 }, { "order": 649, - "name": "nach012", + "name": "aboredllama", "count": 2, "languages": 1 }, { "order": 650, - "name": "dans182", + "name": "nevaito", "count": 2, "languages": 1 }, { "order": 651, - "name": "freyfonseca", + "name": "josue-py", "count": 2, "languages": 1 }, { "order": 652, - "name": "aegpgrafologo", + "name": "nach012", "count": 2, "languages": 1 }, { "order": 653, - "name": "alejandrovelasquezr", + "name": "dans182", "count": 2, "languages": 1 }, { "order": 654, - "name": "fabianpa505", + "name": "freyfonseca", "count": 2, "languages": 1 }, { "order": 655, - "name": "carlosmarte23", + "name": "aegpgrafologo", "count": 2, "languages": 1 }, { "order": 656, - "name": "anblackter", + "name": "alejandrovelasquezr", "count": 2, "languages": 1 }, { "order": 657, - "name": "tic4", + "name": "fabianpa505", "count": 2, "languages": 1 }, { "order": 658, - "name": "josephfaster", + "name": "carlosmarte23", "count": 2, "languages": 1 }, { "order": 659, - "name": "gregfc95", + "name": "anblackter", "count": 2, "languages": 1 }, { "order": 660, - "name": "victore16", + "name": "tic4", "count": 2, "languages": 1 }, { "order": 661, - "name": "dokeys28", + "name": "josephfaster", "count": 2, "languages": 1 }, { "order": 662, - "name": "noaregui", + "name": "gregfc95", "count": 2, "languages": 1 }, { "order": 663, - "name": "alejandro-mantilla", + "name": "victore16", "count": 2, "languages": 1 }, { "order": 664, - "name": "gmigues", + "name": "dokeys28", "count": 2, "languages": 1 }, { "order": 665, - "name": "juanseevn", + "name": "noaregui", "count": 2, "languages": 1 }, { "order": 666, - "name": "vesubius", + "name": "alejandro-mantilla", "count": 2, "languages": 1 }, { "order": 667, - "name": "zeti1231", + "name": "gmigues", "count": 2, "languages": 1 }, { "order": 668, - "name": "cipollalucas", + "name": "juanseevn", "count": 2, "languages": 1 }, { "order": 669, - "name": "miguelberrio0810", + "name": "vesubius", "count": 2, "languages": 1 }, { "order": 670, - "name": "santiagodc8", + "name": "zeti1231", "count": 2, "languages": 1 }, { "order": 671, - "name": "pedrojog", + "name": "cipollalucas", "count": 2, "languages": 1 }, { "order": 672, - "name": "culebropalido", + "name": "miguelberrio0810", "count": 2, "languages": 1 }, { "order": 673, - "name": "marioyellowy", + "name": "santiagodc8", "count": 2, "languages": 1 }, { "order": 674, - "name": "jcknot", + "name": "pedrojog", "count": 2, "languages": 1 }, { "order": 675, - "name": "peeanoot", + "name": "culebropalido", "count": 2, "languages": 1 }, { "order": 676, - "name": "coronelsam", + "name": "marioyellowy", "count": 2, "languages": 1 }, { "order": 677, - "name": "arhl2023", + "name": "jcknot", "count": 2, "languages": 1 }, { "order": 678, - "name": "marianoemir", + "name": "peeanoot", "count": 2, "languages": 1 }, { "order": 679, - "name": "isidrojng", + "name": "coronelsam", "count": 2, "languages": 1 }, { "order": 680, - "name": "anaroncero", + "name": "arhl2023", "count": 2, "languages": 1 }, { "order": 681, - "name": "hersac", + "name": "marianoemir", "count": 2, "languages": 1 }, { "order": 682, - "name": "vecinacoo", + "name": "isidrojng", "count": 2, "languages": 1 }, { "order": 683, - "name": "juanmjimenezs", + "name": "anaroncero", "count": 2, "languages": 1 }, { "order": 684, - "name": "armentaangel", + "name": "hersac", "count": 2, "languages": 1 }, { "order": 685, - "name": "lordzzz777", + "name": "vecinacoo", "count": 2, "languages": 1 }, { "order": 686, - "name": "sdm29gh", + "name": "juanmjimenezs", "count": 2, "languages": 1 }, { "order": 687, - "name": "zonnen69", + "name": "armentaangel", "count": 2, "languages": 1 }, { "order": 688, - "name": "jmichael39", + "name": "lordzzz777", "count": 2, "languages": 1 }, { "order": 689, - "name": "davidvilem", + "name": "sdm29gh", "count": 2, "languages": 1 }, { "order": 690, - "name": "mantaras96", + "name": "zonnen69", "count": 2, "languages": 1 }, { "order": 691, - "name": "torvicv", - "count": 1, + "name": "jmichael39", + "count": 2, "languages": 1 }, { "order": 692, - "name": "dgquintero", - "count": 1, + "name": "davidvilem", + "count": 2, "languages": 1 }, { "order": 693, - "name": "c-blskv", + "name": "torvicv", "count": 1, "languages": 1 }, { "order": 694, - "name": "emaerniquez", + "name": "dgquintero", "count": 1, "languages": 1 }, { "order": 695, - "name": "carolhs92", + "name": "c-blskv", "count": 1, "languages": 1 }, { "order": 696, - "name": "leonardo-henao", + "name": "emaerniquez", "count": 1, "languages": 1 }, { "order": 697, - "name": "juancamilofvx", + "name": "carolhs92", "count": 1, "languages": 1 }, { "order": 698, - "name": "vikernes27666", + "name": "leonardo-henao", "count": 1, "languages": 1 }, { "order": 699, - "name": "cub-tor", + "name": "juancamilofvx", "count": 1, "languages": 1 }, { "order": 700, - "name": "nightmare79", + "name": "vikernes27666", "count": 1, "languages": 1 }, { "order": 701, - "name": "carlosmperezm", + "name": "cub-tor", "count": 1, "languages": 1 }, { "order": 702, - "name": "gonzalinuz18", + "name": "nightmare79", "count": 1, "languages": 1 }, { "order": 703, - "name": "qwik-zghieb", + "name": "carlosmperezm", "count": 1, "languages": 1 }, { "order": 704, - "name": "miquelrr", + "name": "gonzalinuz18", "count": 1, "languages": 1 }, { "order": 705, - "name": "miguel2rar", + "name": "qwik-zghieb", "count": 1, "languages": 1 }, { "order": 706, - "name": "eamartin", + "name": "miquelrr", "count": 1, "languages": 1 }, { "order": 707, - "name": "gabriel-dangelo", + "name": "miguel2rar", "count": 1, "languages": 1 }, { "order": 708, - "name": "agustinfccll", + "name": "eamartin", "count": 1, "languages": 1 }, { "order": 709, - "name": "anitandil", + "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { "order": 710, - "name": "evilpodato04", + "name": "agustinfccll", "count": 1, "languages": 1 }, { "order": 711, - "name": "francomyburg", + "name": "anitandil", "count": 1, "languages": 1 }, { "order": 712, - "name": "neicervb", + "name": "evilpodato04", "count": 1, "languages": 1 }, { "order": 713, - "name": "josephinoo", + "name": "francomyburg", "count": 1, "languages": 1 }, { "order": 714, - "name": "arathhh8", + "name": "neicervb", "count": 1, "languages": 1 }, { "order": 715, - "name": "paluzz", + "name": "josephinoo", "count": 1, "languages": 1 }, { "order": 716, - "name": "theposi", + "name": "arathhh8", "count": 1, "languages": 1 }, { "order": 717, - "name": "vinyoles", + "name": "paluzz", "count": 1, "languages": 1 }, { "order": 718, - "name": "omarroman29", + "name": "theposi", "count": 1, "languages": 1 }, { "order": 719, - "name": "1cel4nc3", + "name": "vinyoles", "count": 1, "languages": 1 }, { "order": 720, - "name": "sergio-strazzacappa", + "name": "omarroman29", "count": 1, "languages": 1 }, { "order": 721, - "name": "corvo-99", + "name": "1cel4nc3", "count": 1, "languages": 1 }, { "order": 722, - "name": "danielcastillo1112", + "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { "order": 723, - "name": "malkarmah", + "name": "corvo-99", "count": 1, "languages": 1 }, { "order": 724, - "name": "sirvega83", + "name": "danielcastillo1112", "count": 1, "languages": 1 }, { "order": 725, - "name": "franpua", + "name": "malkarmah", "count": 1, "languages": 1 }, { "order": 726, - "name": "van-02", + "name": "sirvega83", "count": 1, "languages": 1 }, { "order": 727, - "name": "x3mboy", + "name": "franpua", "count": 1, "languages": 1 }, { "order": 728, - "name": "mickysoft", + "name": "van-02", "count": 1, "languages": 1 }, { "order": 729, - "name": "deimoshall", + "name": "x3mboy", "count": 1, "languages": 1 }, { "order": 730, - "name": "palons29", + "name": "mickysoft", "count": 1, "languages": 1 }, { "order": 731, - "name": "serg032", + "name": "deimoshall", "count": 1, "languages": 1 }, { "order": 732, - "name": "seigigim", + "name": "palons29", "count": 1, "languages": 1 }, { "order": 733, - "name": "cibacoa", + "name": "serg032", "count": 1, "languages": 1 }, { "order": 734, - "name": "axelwestman", + "name": "seigigim", "count": 1, "languages": 1 }, { "order": 735, - "name": "javodevon", + "name": "cibacoa", "count": 1, "languages": 1 }, { "order": 736, - "name": "mauricioyair", + "name": "axelwestman", "count": 1, "languages": 1 }, { "order": 737, - "name": "manuhssj", + "name": "javodevon", "count": 1, "languages": 1 }, { "order": 738, - "name": "coletonosh", + "name": "mauricioyair", "count": 1, "languages": 1 }, { "order": 739, - "name": "manugonzalito", + "name": "manuhssj", "count": 1, "languages": 1 }, { "order": 740, - "name": "gizelads", + "name": "coletonosh", "count": 1, "languages": 1 }, { "order": 741, - "name": "lucc4sz", + "name": "manugonzalito", "count": 1, "languages": 1 }, { "order": 742, - "name": "feliaguirre7", + "name": "gizelads", "count": 1, "languages": 1 }, { "order": 743, - "name": "rulo77", + "name": "lucc4sz", "count": 1, "languages": 1 }, { "order": 744, - "name": "is2095", + "name": "feliaguirre7", "count": 1, "languages": 1 }, { "order": 745, - "name": "jancalos", + "name": "rulo77", "count": 1, "languages": 1 }, { "order": 746, - "name": "marcosapodaca", + "name": "is2095", "count": 1, "languages": 1 }, { "order": 747, - "name": "angelcruzg23", + "name": "jancalos", "count": 1, "languages": 1 }, { "order": 748, - "name": "ca2puntosv", + "name": "marcosapodaca", "count": 1, "languages": 1 }, { "order": 749, - "name": "armm77", + "name": "angelcruzg23", "count": 1, "languages": 1 }, { "order": 750, - "name": "afacorroloscos", + "name": "ca2puntosv", "count": 1, "languages": 1 }, { "order": 751, - "name": "rocadev2714", + "name": "armm77", "count": 1, "languages": 1 }, { "order": 752, - "name": "chrisfelixgil", + "name": "afacorroloscos", "count": 1, "languages": 1 }, { "order": 753, - "name": "sandrarg85", + "name": "rocadev2714", "count": 1, "languages": 1 }, { "order": 754, - "name": "rootqui", + "name": "chrisfelixgil", "count": 1, "languages": 1 }, { "order": 755, - "name": "ishimaku", + "name": "sandrarg85", "count": 1, "languages": 1 }, { "order": 756, - "name": "pkmaventura", + "name": "rootqui", "count": 1, "languages": 1 }, { "order": 757, - "name": "miguelgargallo", + "name": "ishimaku", "count": 1, "languages": 1 }, { "order": 758, - "name": "astriebeck", + "name": "pkmaventura", "count": 1, "languages": 1 }, { "order": 759, - "name": "lobogeekmx", + "name": "miguelgargallo", "count": 1, "languages": 1 }, { "order": 760, - "name": "marvinagui", + "name": "astriebeck", "count": 1, "languages": 1 }, { "order": 761, - "name": "marqitos", + "name": "lobogeekmx", "count": 1, "languages": 1 }, { "order": 762, - "name": "nunezlagos", + "name": "marvinagui", "count": 1, "languages": 1 }, { "order": 763, - "name": "jcrobles99", + "name": "marqitos", "count": 1, "languages": 1 }, { "order": 764, - "name": "ledyam", + "name": "nunezlagos", "count": 1, "languages": 1 }, { "order": 765, - "name": "jatomas", + "name": "jcrobles99", "count": 1, "languages": 1 }, { "order": 766, - "name": "jaennova", + "name": "ledyam", "count": 1, "languages": 1 }, { "order": 767, - "name": "luisalberto22", + "name": "jatomas", "count": 1, "languages": 1 }, { "order": 768, - "name": "francisleble", + "name": "jaennova", "count": 1, "languages": 1 }, { "order": 769, - "name": "deiiviitdev", + "name": "luisalberto22", "count": 1, "languages": 1 }, { "order": 770, - "name": "braiso-22", + "name": "francisleble", "count": 1, "languages": 1 }, { "order": 771, - "name": "daniel-cas", + "name": "deiiviitdev", "count": 1, "languages": 1 }, { "order": 772, - "name": "acirdevelper", + "name": "braiso-22", "count": 1, "languages": 1 }, { "order": 773, - "name": "borjadelgadodev", + "name": "daniel-cas", "count": 1, "languages": 1 }, { "order": 774, - "name": "elpeque29", + "name": "acirdevelper", "count": 1, "languages": 1 }, { "order": 775, - "name": "jhordanluyo", + "name": "borjadelgadodev", "count": 1, "languages": 1 }, { "order": 776, - "name": "davidcv-dev", + "name": "elpeque29", "count": 1, "languages": 1 }, { "order": 777, - "name": "mbmaeso", + "name": "jhordanluyo", "count": 1, "languages": 1 }, { "order": 778, - "name": "alvarominarro", + "name": "davidcv-dev", "count": 1, "languages": 1 }, { "order": 779, - "name": "bjchavez", + "name": "mbmaeso", "count": 1, "languages": 1 }, { "order": 780, - "name": "madelefonb", + "name": "alvarominarro", "count": 1, "languages": 1 }, { "order": 781, - "name": "lfwzk", + "name": "bjchavez", "count": 1, "languages": 1 }, { "order": 782, - "name": "ercky1980", + "name": "madelefonb", "count": 1, "languages": 1 }, { "order": 783, - "name": "jsruedatorres", + "name": "lfwzk", "count": 1, "languages": 1 }, { "order": 784, - "name": "jacobrwx", + "name": "ercky1980", "count": 1, "languages": 1 }, { "order": 785, - "name": "abengl", + "name": "jsruedatorres", "count": 1, "languages": 1 }, { "order": 786, - "name": "jd-gm", + "name": "jacobrwx", "count": 1, "languages": 1 }, { "order": 787, - "name": "lucianogriffa", + "name": "abengl", "count": 1, "languages": 1 }, { "order": 788, - "name": "quirogapau", + "name": "jd-gm", "count": 1, "languages": 1 }, { "order": 789, - "name": "joseperesini", + "name": "lucianogriffa", "count": 1, "languages": 1 }, { "order": 790, - "name": "mhrosariom", + "name": "quirogapau", "count": 1, "languages": 1 }, { "order": 791, - "name": "sergioab7", + "name": "joseperesini", "count": 1, "languages": 1 }, { "order": 792, - "name": "santaravena", + "name": "mhrosariom", "count": 1, "languages": 1 }, { "order": 793, - "name": "datrujillog", + "name": "sergioab7", "count": 1, "languages": 1 }, { "order": 794, - "name": "johnniew81", + "name": "santaravena", "count": 1, "languages": 1 }, { "order": 795, - "name": "chriszaldana", + "name": "datrujillog", "count": 1, "languages": 1 }, { "order": 796, - "name": "antonioverdugo", + "name": "johnniew81", "count": 1, "languages": 1 }, { "order": 797, - "name": "kronomio", + "name": "chriszaldana", "count": 1, "languages": 1 }, { "order": 798, - "name": "kevinramirez28", + "name": "antonioverdugo", "count": 1, "languages": 1 }, { "order": 799, - "name": "juanpablo-a", + "name": "kronomio", "count": 1, "languages": 1 }, { "order": 800, - "name": "gerespinosa", + "name": "kevinramirez28", "count": 1, "languages": 1 }, { "order": 801, - "name": "1978acb", + "name": "juanpablo-a", "count": 1, "languages": 1 }, { "order": 802, - "name": "alexxawada", + "name": "gerespinosa", "count": 1, "languages": 1 }, { "order": 803, - "name": "ricarsur", + "name": "1978acb", "count": 1, "languages": 1 }, { "order": 804, - "name": "alemar16", + "name": "alexxawada", "count": 1, "languages": 1 }, { "order": 805, - "name": "pointfs", + "name": "ricarsur", "count": 1, "languages": 1 }, { "order": 806, - "name": "edperez07", + "name": "alemar16", "count": 1, "languages": 1 }, { "order": 807, - "name": "dacronik", + "name": "pointfs", "count": 1, "languages": 1 }, { "order": 808, - "name": "abraham9804", + "name": "edperez07", "count": 1, "languages": 1 }, { "order": 809, - "name": "afl0r3s", + "name": "dacronik", "count": 1, "languages": 1 }, { "order": 810, - "name": "dianelis1", + "name": "abraham9804", "count": 1, "languages": 1 }, { "order": 811, - "name": "fernandofl", + "name": "afl0r3s", "count": 1, "languages": 1 }, { "order": 812, - "name": "conrado85", + "name": "dianelis1", "count": 1, "languages": 1 }, { "order": 813, - "name": "agus-ig", + "name": "fernandofl", "count": 1, "languages": 1 }, { "order": 814, - "name": "alvarommedia", + "name": "conrado85", "count": 1, "languages": 1 }, { "order": 815, - "name": "maximotoro", + "name": "agus-ig", "count": 1, "languages": 1 }, { "order": 816, - "name": "m4xisil", + "name": "alvarommedia", "count": 1, "languages": 1 }, { "order": 817, - "name": "francomoreira", + "name": "maximotoro", "count": 1, "languages": 1 }, { "order": 818, - "name": "aleclto7", + "name": "m4xisil", "count": 1, "languages": 1 }, { "order": 819, - "name": "nnunezmedina", + "name": "francomoreira", "count": 1, "languages": 1 }, { "order": 820, - "name": "codejoss", + "name": "aleclto7", "count": 1, "languages": 1 }, { "order": 821, - "name": "yaojema", + "name": "nnunezmedina", "count": 1, "languages": 1 }, { "order": 822, - "name": "romanocoder", + "name": "codejoss", "count": 1, "languages": 1 }, { "order": 823, - "name": "sixtodev", + "name": "yaojema", "count": 1, "languages": 1 }, { "order": 824, - "name": "cgomezadolfo", + "name": "romanocoder", "count": 1, "languages": 1 }, { "order": 825, - "name": "rojasvargas", + "name": "sixtodev", "count": 1, "languages": 1 }, { "order": 826, - "name": "carlosdiaz-dev", + "name": "cgomezadolfo", "count": 1, "languages": 1 }, { "order": 827, - "name": "l3v1xx", + "name": "rojasvargas", "count": 1, "languages": 1 }, { "order": 828, - "name": "patricioguerra30", + "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { "order": 829, - "name": "lytsar", + "name": "l3v1xx", "count": 1, "languages": 1 }, { "order": 830, - "name": "siuldev", + "name": "patricioguerra30", "count": 1, "languages": 1 }, { "order": 831, - "name": "brayancordova1", + "name": "lytsar", "count": 1, "languages": 1 }, { "order": 832, - "name": "ronnieruuz", + "name": "siuldev", "count": 1, "languages": 1 }, { "order": 833, - "name": "yessikamichelle", + "name": "brayancordova1", "count": 1, "languages": 1 }, { "order": 834, - "name": "vainsito1", + "name": "ronnieruuz", "count": 1, "languages": 1 }, { "order": 835, - "name": "oscarletelier", + "name": "yessikamichelle", "count": 1, "languages": 1 }, { "order": 836, - "name": "kocho03", + "name": "vainsito1", "count": 1, "languages": 1 }, { "order": 837, - "name": "aidicoop", + "name": "oscarletelier", "count": 1, "languages": 1 }, { "order": 838, - "name": "albabp", + "name": "kocho03", "count": 1, "languages": 1 }, { "order": 839, - "name": "nozodev", + "name": "aidicoop", "count": 1, "languages": 1 }, { "order": 840, - "name": "mvillegas18", + "name": "albabp", "count": 1, "languages": 1 }, { "order": 841, - "name": "augustbs", + "name": "nozodev", "count": 1, "languages": 1 }, { "order": 842, - "name": "luchof5", + "name": "mvillegas18", "count": 1, "languages": 1 }, { "order": 843, - "name": "fullstackarlo", + "name": "augustbs", "count": 1, "languages": 1 }, { "order": 844, - "name": "mdemena", + "name": "luchof5", "count": 1, "languages": 1 }, { "order": 845, - "name": "cliverjimny123", + "name": "fullstackarlo", "count": 1, "languages": 1 }, { "order": 846, - "name": "rodmiggithub", + "name": "mdemena", "count": 1, "languages": 1 }, { "order": 847, - "name": "s9code", + "name": "cliverjimny123", "count": 1, "languages": 1 }, { "order": 848, - "name": "javieradev", + "name": "rodmiggithub", "count": 1, "languages": 1 }, { "order": 849, - "name": "xnomada", + "name": "s9code", "count": 1, "languages": 1 }, { "order": 850, - "name": "miguelsarm", + "name": "javieradev", "count": 1, "languages": 1 }, { "order": 851, - "name": "royhuamanavila", + "name": "xnomada", "count": 1, "languages": 1 }, { "order": 852, - "name": "imista", + "name": "miguelsarm", "count": 1, "languages": 1 }, { "order": 853, - "name": "denisortega", + "name": "royhuamanavila", "count": 1, "languages": 1 }, { "order": 854, - "name": "kouski", + "name": "imista", "count": 1, "languages": 1 }, { "order": 855, - "name": "leydimadrid", + "name": "denisortega", "count": 1, "languages": 1 }, { "order": 856, - "name": "frannm29", + "name": "kouski", "count": 1, "languages": 1 }, { "order": 857, - "name": "saintsluis", + "name": "leydimadrid", "count": 1, "languages": 1 }, { "order": 858, - "name": "gc796", + "name": "frannm29", "count": 1, "languages": 1 }, { "order": 859, - "name": "pierre-ol", + "name": "saintsluis", "count": 1, "languages": 1 }, { "order": 860, - "name": "francescoalterio", + "name": "gc796", "count": 1, "languages": 1 }, { "order": 861, - "name": "gustavoguerrero", + "name": "pierre-ol", "count": 1, "languages": 1 }, { "order": 862, - "name": "diegoxxd", + "name": "francescoalterio", "count": 1, "languages": 1 }, { "order": 863, - "name": "walkerlyna", + "name": "gustavoguerrero", "count": 1, "languages": 1 }, { "order": 864, - "name": "erysnell", + "name": "diegoxxd", "count": 1, "languages": 1 }, { "order": 865, - "name": "sejotaz", + "name": "fzcarlitos", "count": 1, "languages": 1 }, { "order": 866, - "name": "frcan89", + "name": "walkerlyna", "count": 1, "languages": 1 }, { "order": 867, - "name": "nicorey89", + "name": "erysnell", "count": 1, "languages": 1 }, { "order": 868, - "name": "alexis0717", + "name": "sejotaz", "count": 1, "languages": 1 }, { "order": 869, - "name": "edgonzz", + "name": "frcan89", "count": 1, "languages": 1 }, { "order": 870, - "name": "vmga09", + "name": "nicorey89", "count": 1, "languages": 1 }, { "order": 871, - "name": "lfam200", + "name": "alexis0717", "count": 1, "languages": 1 }, { "order": 872, - "name": "kenzambrano", + "name": "edgonzz", "count": 1, "languages": 1 }, { "order": 873, - "name": "dmhenaopa", + "name": "vmga09", "count": 1, "languages": 1 }, { "order": 874, - "name": "jpiacaruso", + "name": "lfam200", "count": 1, "languages": 1 }, { "order": 875, - "name": "isnatthy", + "name": "kenzambrano", "count": 1, "languages": 1 }, { "order": 876, - "name": "peticas", + "name": "dmhenaopa", "count": 1, "languages": 1 }, { "order": 877, - "name": "flarien", + "name": "jpiacaruso", "count": 1, "languages": 1 }, { "order": 878, - "name": "franciscokarriere", + "name": "isnatthy", "count": 1, "languages": 1 }, { "order": 879, - "name": "pipeyz21", + "name": "diego-santana23", "count": 1, "languages": 1 }, { "order": 880, - "name": "luisgarm", + "name": "peticas", "count": 1, "languages": 1 }, { "order": 881, - "name": "tetotille", + "name": "flarien", "count": 1, "languages": 1 }, { "order": 882, - "name": "vorosdev", + "name": "franciscokarriere", "count": 1, "languages": 1 }, { "order": 883, - "name": "santiagomac", + "name": "pipeyz21", "count": 1, "languages": 1 }, { "order": 884, - "name": "implevacui", + "name": "luisgarm", "count": 1, "languages": 1 }, { "order": 885, - "name": "fede6299", + "name": "tetotille", "count": 1, "languages": 1 }, { "order": 886, - "name": "kevin05m", + "name": "vorosdev", "count": 1, "languages": 1 }, { "order": 887, - "name": "diegomm27", + "name": "santiagomac", "count": 1, "languages": 1 }, { "order": 888, - "name": "pablo-lnx", + "name": "implevacui", "count": 1, "languages": 1 }, { "order": 889, - "name": "darkohokage", + "name": "fede6299", "count": 1, "languages": 1 }, { "order": 890, - "name": "jhonnfl", + "name": "kevin05m", "count": 1, "languages": 1 }, { "order": 891, - "name": "jarzatedev", + "name": "diegomm27", "count": 1, "languages": 1 }, { "order": 892, - "name": "brunom-93", + "name": "pablo-lnx", "count": 1, "languages": 1 }, { "order": 893, - "name": "alejandroruiz23", + "name": "darkohokage", "count": 1, "languages": 1 }, { "order": 894, - "name": "trollface77", + "name": "jhonnfl", "count": 1, "languages": 1 }, { "order": 895, - "name": "jaimesoftdev", + "name": "jarzatedev", "count": 1, "languages": 1 }, { "order": 896, - "name": "edm1ya", + "name": "brunom-93", "count": 1, "languages": 1 }, { "order": 897, - "name": "tartabullroberto", + "name": "alejandroruiz23", "count": 1, "languages": 1 }, { "order": 898, - "name": "serg-pq", + "name": "trollface77", "count": 1, "languages": 1 }, { "order": 899, - "name": "lara-vel-dev", + "name": "jaimesoftdev", "count": 1, "languages": 1 }, { "order": 900, - "name": "alexisbarradev", + "name": "edm1ya", "count": 1, "languages": 1 }, { "order": 901, - "name": "kelvincb", + "name": "tartabullroberto", "count": 1, "languages": 1 }, { "order": 902, + "name": "serg-pq", + "count": 1, + "languages": 1 + }, + { + "order": 903, + "name": "lara-vel-dev", + "count": 1, + "languages": 1 + }, + { + "order": 904, + "name": "alexisbarradev", + "count": 1, + "languages": 1 + }, + { + "order": 905, + "name": "kelvincb", + "count": 1, + "languages": 1 + }, + { + "order": 906, "name": "carlostoledoe", "count": 1, "languages": 1 }, { - "order": 903, + "order": 907, "name": "gilbertho502", "count": 1, "languages": 1 }, { - "order": 904, + "order": 908, "name": "v0l0v", "count": 1, "languages": 1 }, { - "order": 905, + "order": 909, "name": "johao23", "count": 1, "languages": 1 }, { - "order": 906, + "order": 910, "name": "geridage", "count": 1, "languages": 1 }, { - "order": 907, + "order": 911, "name": "vmarialuzm", "count": 1, "languages": 1 }, { - "order": 908, + "order": 912, "name": "snowcardenas", "count": 1, "languages": 1 }, { - "order": 909, + "order": 913, "name": "and-y21", "count": 1, "languages": 1 }, { - "order": 910, + "order": 914, "name": "arturodlapaz17", "count": 1, "languages": 1 }, { - "order": 911, + "order": 915, "name": "manuu42", "count": 1, "languages": 1 }, { - "order": 912, + "order": 916, "name": "howlett9999", "count": 1, "languages": 1 }, { - "order": 913, + "order": 917, "name": "dkp-dev", "count": 1, "languages": 1 }, { - "order": 914, + "order": 918, "name": "hnaranjog", "count": 1, "languages": 1 }, { - "order": 915, + "order": 919, "name": "wallsified", "count": 1, "languages": 1 }, { - "order": 916, + "order": 920, "name": "lluistech", "count": 1, "languages": 1 }, { - "order": 917, + "order": 921, "name": "mamartinez14", "count": 1, "languages": 1 }, { - "order": 918, + "order": 922, "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { - "order": 919, + "order": 923, "name": "bassalex27", "count": 1, "languages": 1 }, { - "order": 920, + "order": 924, "name": "yetlanezils", "count": 1, "languages": 1 }, { - "order": 921, + "order": 925, "name": "ndepaul82", "count": 1, "languages": 1 }, { - "order": 922, + "order": 926, "name": "amitchellg", "count": 1, "languages": 1 }, { - "order": 923, + "order": 927, "name": "turudev1979", "count": 1, "languages": 1 }, { - "order": 924, + "order": 928, "name": "deivimiller", "count": 1, "languages": 1 }, { - "order": 925, + "order": 929, "name": "haroldalb", "count": 1, "languages": 1 }, { - "order": 926, + "order": 930, "name": "dakkaj", "count": 1, "languages": 1 }, { - "order": 927, + "order": 931, "name": "jheisonquiroga", "count": 1, "languages": 1 }, { - "order": 928, + "order": 932, "name": "juli-m4", "count": 1, "languages": 1 }, { - "order": 929, + "order": 933, "name": "sergiomhernandez", "count": 1, "languages": 1 }, { - "order": 930, + "order": 934, "name": "masenace", "count": 1, "languages": 1 }, { - "order": 931, + "order": 935, "name": "e-xtian", "count": 1, "languages": 1 }, { - "order": 932, + "order": 936, "name": "vickalck", "count": 1, "languages": 1 }, { - "order": 933, + "order": 937, "name": "gmedinat911", "count": 1, "languages": 1 }, { - "order": 934, + "order": 938, "name": "eljavi0", "count": 1, "languages": 1 }, { - "order": 935, + "order": 939, "name": "yeisongil", "count": 1, "languages": 1 }, { - "order": 936, + "order": 940, "name": "julioorozco05", "count": 1, "languages": 1 }, { - "order": 937, + "order": 941, "name": "fergz1988", "count": 1, "languages": 1 }, { - "order": 938, + "order": 942, "name": "marcos0803", "count": 1, "languages": 1 }, { - "order": 939, + "order": 943, "name": "xcortes", "count": 1, "languages": 1 }, { - "order": 940, + "order": 944, "name": "facundorsabia", "count": 1, "languages": 1 }, { - "order": 941, + "order": 945, "name": "nico70012", "count": 1, "languages": 1 }, { - "order": 942, + "order": 946, "name": "charly024", "count": 1, "languages": 1 }, { - "order": 943, + "order": 947, "name": "devjerez", "count": 1, "languages": 1 }, { - "order": 944, + "order": 948, "name": "gersonoroz", "count": 1, "languages": 1 }, { - "order": 945, + "order": 949, "name": "jafuma0320", "count": 1, "languages": 1 }, { - "order": 946, + "order": 950, "name": "g4nd4lf", "count": 1, "languages": 1 }, { - "order": 947, + "order": 951, "name": "obed-tc", "count": 1, "languages": 1 }, { - "order": 948, + "order": 952, "name": "devkenn", "count": 1, "languages": 1 }, { - "order": 949, + "order": 953, "name": "xalejandrow", "count": 1, "languages": 1 }, { - "order": 950, + "order": 954, "name": "henrydavidprimera", "count": 1, "languages": 1 }, { - "order": 951, + "order": 955, "name": "luceldasilva", "count": 1, "languages": 1 }, { - "order": 952, + "order": 956, "name": "mjordanaam", "count": 1, "languages": 1 }, { - "order": 953, + "order": 957, "name": "betulioo", "count": 1, "languages": 1 }, { - "order": 954, + "order": 958, "name": "judithernandez", "count": 1, "languages": 1 }, { - "order": 955, + "order": 959, "name": "dimanu-py", "count": 1, "languages": 1 }, { - "order": 956, + "order": 960, "name": "snowale", "count": 1, "languages": 1 }, { - "order": 957, + "order": 961, "name": "cd1974", "count": 1, "languages": 1 }, { - "order": 958, + "order": 962, "name": "acobo3", "count": 1, "languages": 1 }, { - "order": 959, + "order": 963, "name": "isaacdci", "count": 1, "languages": 1 }, { - "order": 960, + "order": 964, "name": "manueldenisdev", "count": 1, "languages": 1 }, { - "order": 961, + "order": 965, "name": "anexo01", "count": 1, "languages": 1 }, { - "order": 962, + "order": 966, "name": "yamiyugi25", "count": 1, "languages": 1 }, { - "order": 963, + "order": 967, "name": "gl-informatica", "count": 1, "languages": 1 }, { - "order": 964, + "order": 968, "name": "miguelmancebo", "count": 1, "languages": 1 }, { - "order": 965, + "order": 969, "name": "neusier101", "count": 1, "languages": 1 }, { - "order": 966, + "order": 970, "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { - "order": 967, + "order": 971, "name": "xhinto", "count": 1, "languages": 1 }, { - "order": 968, + "order": 972, "name": "dacaldev", "count": 1, "languages": 1 }, { - "order": 969, + "order": 973, "name": "juan-cruz01", "count": 1, "languages": 1 }, { - "order": 970, + "order": 974, "name": "juanalbornoz32", "count": 1, "languages": 1 }, { - "order": 971, + "order": 975, "name": "cisneros2404", "count": 1, "languages": 1 }, { - "order": 972, + "order": 976, "name": "neftalyr", "count": 1, "languages": 1 }, { - "order": 973, + "order": 977, "name": "latorredev", "count": 1, "languages": 1 }, { - "order": 974, + "order": 978, "name": "osneidert", "count": 1, "languages": 1 }, { - "order": 975, + "order": 979, "name": "jrgranadosb", "count": 1, "languages": 1 }, { - "order": 976, + "order": 980, "name": "vicvilla30", "count": 1, "languages": 1 }, { - "order": 977, + "order": 981, "name": "carlosbb70", "count": 1, "languages": 1 }, { - "order": 978, + "order": 982, "name": "pablom-2015", "count": 1, "languages": 1 }, { - "order": 979, + "order": 983, "name": "xtinarita", "count": 1, "languages": 1 }, { - "order": 980, + "order": 984, "name": "wilsonbarrera", "count": 1, "languages": 1 }, { - "order": 981, + "order": 985, "name": "jereaguilar", "count": 1, "languages": 1 }, { - "order": 982, + "order": 986, "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { - "order": 983, + "order": 987, "name": "danidan1214", "count": 1, "languages": 1 }, { - "order": 984, + "order": 988, "name": "demegorash", "count": 1, "languages": 1 }, { - "order": 985, + "order": 989, "name": "cris10026", "count": 1, "languages": 1 }, { - "order": 986, + "order": 990, "name": "davidgramiro", "count": 1, "languages": 1 }, { - "order": 987, + "order": 991, "name": "jgarteag", "count": 1, "languages": 1 }, { - "order": 988, + "order": 992, "name": "adcarret", "count": 1, "languages": 1 }, { - "order": 989, + "order": 993, "name": "natanaelzubiri", "count": 1, "languages": 1 }, { - "order": 990, + "order": 994, "name": "diegogomezcor4", "count": 1, "languages": 1 }, { - "order": 991, + "order": 995, "name": "perla-zg", "count": 1, "languages": 1 }, { - "order": 992, + "order": 996, "name": "neshurtado", "count": 1, "languages": 1 }, { - "order": 993, + "order": 997, "name": "marcelinoarias369", "count": 1, "languages": 1 }, { - "order": 994, + "order": 998, "name": "pushodev", "count": 1, "languages": 1 }, { - "order": 995, + "order": 999, "name": "sherkla12e", "count": 1, "languages": 1 }, { - "order": 996, + "order": 1000, "name": "luisangeles20", "count": 1, "languages": 1 }, { - "order": 997, + "order": 1001, "name": "omar8102", "count": 1, "languages": 1 }, { - "order": 998, + "order": 1002, "name": "eatsangels", "count": 1, "languages": 1 }, { - "order": 999, + "order": 1003, "name": "alejarandro", "count": 1, "languages": 1 }, { - "order": 1000, + "order": 1004, "name": "tashidian", "count": 1, "languages": 1 }, { - "order": 1001, + "order": 1005, "name": "alejandro000", "count": 1, "languages": 1 }, { - "order": 1002, + "order": 1006, "name": "francgci", "count": 1, "languages": 1 }, { - "order": 1003, + "order": 1007, "name": "krisipo", "count": 1, "languages": 1 }, { - "order": 1004, + "order": 1008, "name": "jalonso76", "count": 1, "languages": 1 }, { - "order": 1005, + "order": 1009, "name": "leo18q", "count": 1, "languages": 1 }, { - "order": 1006, + "order": 1010, "name": "sofiamfernandez", "count": 1, "languages": 1 }, { - "order": 1007, + "order": 1011, "name": "jgregoris", "count": 1, "languages": 1 }, { - "order": 1008, + "order": 1012, "name": "josuelopez5", "count": 1, "languages": 1 }, { - "order": 1009, + "order": 1013, "name": "mrf1989", "count": 1, "languages": 1 }, { - "order": 1010, + "order": 1014, "name": "zeraven09", "count": 1, "languages": 1 }, { - "order": 1011, + "order": 1015, "name": "pr1de-23", "count": 1, "languages": 1 }, { - "order": 1012, + "order": 1016, "name": "kronoscba", "count": 1, "languages": 1 }, { - "order": 1013, + "order": 1017, "name": "erickcis", "count": 1, "languages": 1 }, { - "order": 1014, + "order": 1018, "name": "experthacker444", "count": 1, "languages": 1 }, { - "order": 1015, + "order": 1019, "name": "javirr4", "count": 1, "languages": 1 }, { - "order": 1016, + "order": 1020, "name": "ignacioskm", "count": 1, "languages": 1 }, { - "order": 1017, + "order": 1021, "name": "jchernandez87", "count": 1, "languages": 1 }, { - "order": 1018, + "order": 1022, "name": "ferngpv", "count": 1, "languages": 1 }, { - "order": 1019, + "order": 1023, "name": "kshields51", "count": 1, "languages": 1 }, { - "order": 1020, + "order": 1024, "name": "salas89", "count": 1, "languages": 1 }, { - "order": 1021, + "order": 1025, "name": "90dread", "count": 1, "languages": 1 }, { - "order": 1022, + "order": 1026, "name": "chema-dw", "count": 1, "languages": 1 }, { - "order": 1023, + "order": 1027, "name": "sbngl", "count": 1, "languages": 1 }, { - "order": 1024, + "order": 1028, "name": "m4xxdev", "count": 1, "languages": 1 }, { - "order": 1025, + "order": 1029, "name": "cristianvergaraf", "count": 1, "languages": 1 }, { - "order": 1026, + "order": 1030, "name": "lizzymaken", "count": 1, "languages": 1 }, { - "order": 1027, + "order": 1031, "name": "jandortiz", "count": 1, "languages": 1 }, { - "order": 1028, + "order": 1032, "name": "claudios1980", "count": 1, "languages": 1 }, { - "order": 1029, + "order": 1033, "name": "sergiovelayos", "count": 1, "languages": 1 }, { - "order": 1030, + "order": 1034, "name": "miguelangel861", "count": 1, "languages": 1 }, { - "order": 1031, + "order": 1035, "name": "marcosjarrin", "count": 1, "languages": 1 }, { - "order": 1032, + "order": 1036, "name": "jandresalvar", "count": 1, "languages": 1 }, { - "order": 1033, + "order": 1037, "name": "joferpg", "count": 1, "languages": 1 }, { - "order": 1034, + "order": 1038, "name": "jlrojano", "count": 1, "languages": 1 }, { - "order": 1035, + "order": 1039, "name": "ivanserran", "count": 1, "languages": 1 }, { - "order": 1036, + "order": 1040, "name": "dany3gs", "count": 1, "languages": 1 }, { - "order": 1037, + "order": 1041, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1038, + "order": 1042, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1039, + "order": 1043, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1040, + "order": 1044, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1041, + "order": 1045, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1042, + "order": 1046, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1043, + "order": 1047, "name": "bycris13", "count": 1, "languages": 1 }, { - "order": 1044, + "order": 1048, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1045, + "order": 1049, "name": "v1k770r", "count": 1, "languages": 1 }, { - "order": 1046, + "order": 1050, "name": "gianellannie", "count": 1, "languages": 1 }, { - "order": 1047, + "order": 1051, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1048, + "order": 1052, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1049, + "order": 1053, "name": "fredylopez01", "count": 1, "languages": 1 }, { - "order": 1050, + "order": 1054, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1051, + "order": 1055, "name": "lautimorales", "count": 1, "languages": 1 }, { - "order": 1052, + "order": 1056, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1053, + "order": 1057, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1054, + "order": 1058, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1055, + "order": 1059, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1056, + "order": 1060, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1057, + "order": 1061, "name": "adriansaint07", "count": 1, "languages": 1 }, { - "order": 1058, + "order": 1062, "name": "javiir", "count": 1, "languages": 1 }, { - "order": 1059, + "order": 1063, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1060, + "order": 1064, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1061, + "order": 1065, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1062, + "order": 1066, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1063, + "order": 1067, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1064, + "order": 1068, "name": "jrgim", "count": 1, "languages": 1 }, { - "order": 1065, + "order": 1069, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1066, + "order": 1070, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1067, + "order": 1071, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1068, + "order": 1072, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1069, + "order": 1073, "name": "robermejia", "count": 1, "languages": 1 }, { - "order": 1070, + "order": 1074, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1075, "name": "reneguzman7", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1076, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1077, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1078, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1079, "name": "queralesdev", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1080, "name": "dovinhoyos", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1081, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1082, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1083, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1084, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1085, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1086, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1087, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1088, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1089, "name": "antoniojzp86", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1090, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1091, "name": "zyn7e", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1092, "name": "diegopardomontero", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1093, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1094, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1095, "name": "password1989", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1096, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1097, "name": "clespinosa2024", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1098, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1095, + "order": 1099, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1096, + "order": 1100, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1101, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1102, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1103, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1104, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1105, "name": "rawc1nnamon", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1106, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1107, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1108, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1109, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1110, "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1111, "name": "orzefox", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1112, "name": "acirdeveloper", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1113, "name": "emiliordev", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1114, "name": "sve-nnn", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1115, "name": "edgarmedranoa", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1116, "name": "rafapg93", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1117, "name": "vickalc", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1118, "name": "riukac", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1119, "name": "rusian69", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1120, "name": "wijimenezz", "count": 1, "languages": 1 }, { - "order": 1117, + "order": 1121, "name": "albertovf", "count": 1, "languages": 1 }, { - "order": 1118, + "order": 1122, "name": "markayala13", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1123, "name": "rocha30", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1124, "name": "righelch", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1125, "name": "deathbat00", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1126, "name": "nicoloboo02", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1127, "name": "sergiopq", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1128, "name": "angeloro", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1129, "name": "jony-english22", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1130, "name": "tilordqwerty", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1131, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1132, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1133, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1134, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1135, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1136, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1137, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1138, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1139, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1140, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1141, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1142, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1143, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1144, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1145, "name": "willypaz243", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1146, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1147, "name": "alecraft8", "count": 1, "languages": 1 }, { - "order": 1144, + "order": 1148, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1145, + "order": 1149, "name": "juampaweb", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1150, "name": "girngoma", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1151, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1148, + "order": 1152, "name": "ddaniel27", "count": 1, "languages": 1 }, { - "order": 1149, + "order": 1153, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1150, + "order": 1154, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1151, + "order": 1155, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1152, + "order": 1156, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1153, + "order": 1157, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1154, + "order": 1158, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1155, + "order": 1159, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1156, + "order": 1160, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1157, + "order": 1161, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1158, + "order": 1162, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1159, + "order": 1163, "name": "ouendinga", "count": 1, "languages": 1 }, { - "order": 1160, + "order": 1164, "name": "melonconyogurt", "count": 1, "languages": 1 From e8679c83a059ab1ffe903007150b661bb72ac8e2 Mon Sep 17 00:00:00 2001 From: Sofia-d-p Date: Wed, 11 Sep 2024 22:02:19 -0300 Subject: [PATCH 152/539] #00 - python --- .../python/Sofia-d-p.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Sofia-d-p.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Sofia-d-p.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Sofia-d-p.py new file mode 100644 index 0000000000..21a8c59d5b --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Sofia-d-p.py @@ -0,0 +1,43 @@ +#Creo comentario y agrego url de Python https://www.python.org/ + + +#Esto es un comentario de una linea de texto + +""" +Esto es +un comentario +de varias lineas +de texto +""" + +''' +Esta es +otra forma +de hacer comentarios +de varias líneas de texto +''' + +#Crear variable +mi_variable = "variable" + +#Cambio el valor de mi variable +mi_variable = "nuevo valor de mi variable" + +#Tipos de datos primitivos +my_int = 10 +my_float = 1.23 +my_bool = False +my_string = "cadena de texto" + +#Imprimir el valor de mi variable +print(my_int) +print(my_float) +print(my_bool) +print(my_string) +print("hola Python!") + +#Para saber el tipo de dato que es la variable +print(type(my_int)) +print(type(my_float)) +print(type(my_bool)) +print(type(my_string)) From 928234142fa7c39a0844c2f35e4c36d9f433c6e5 Mon Sep 17 00:00:00 2001 From: SooHav Date: Wed, 11 Sep 2024 22:07:57 -0300 Subject: [PATCH 153/539] #34 - Python --- Roadmap/30 - SOLID DIP/python/SooHav.py | 287 +++++++++++++ .../python/SooHav.py" | 174 ++++++++ .../python/SooHav.py | 132 ++++++ .../33 - RESCATANDO A MICKEY/python/SooHav.py | 137 ++++++ .../python/SooHav.py" | 389 ++++++++++++++++++ 5 files changed, 1119 insertions(+) create mode 100644 Roadmap/30 - SOLID DIP/python/SooHav.py create mode 100644 "Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/SooHav.py" create mode 100644 Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/SooHav.py create mode 100644 Roadmap/33 - RESCATANDO A MICKEY/python/SooHav.py create mode 100644 "Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/SooHav.py" diff --git a/Roadmap/30 - SOLID DIP/python/SooHav.py b/Roadmap/30 - SOLID DIP/python/SooHav.py new file mode 100644 index 0000000000..bce7c59999 --- /dev/null +++ b/Roadmap/30 - SOLID DIP/python/SooHav.py @@ -0,0 +1,287 @@ +# 30 SOLID: PRINCIPIO DE INVERSIÓN DE DEPENDENCIAS (DIP) + +# siguiendo los principios SOLID con los patos ..... + +# Ejemplo Pato +from abc import ABC, abstractmethod + + +class Pato (ABC): + def __init__(self, tipo): + self.tipo = tipo + + @abstractmethod + def vuela(self): + pass + + @abstractmethod + def nada(self): + pass + + @abstractmethod + def dice(self): + pass + + +class PatoSalvaje(Pato): + def __init__(self): + super().__init__("salvaje") + + def vuela(self): + print("El pato salvaje vuela.") + + def nada(self): + print("El pato salvaje nada.") + + def dice(self): + print("El pato salvaje dice Quack.") + + +class PatoDomestico(Pato): + def __init__(self): + super().__init__("domestico") + + def vuela(self): + print("El pato doméstico vuela.") + + def nada(self): + print("El pato doméstico nada.") + + def dice(self): + print("El pato doméstico dice Quack.") + + +class PatoPlastico(Pato): + def __init__(self): + super().__init__("plastico") + + def vuela(self): + print("El pato de plástico no puede volar.") + + def nada(self): + print("El pato de plástico no puede nadar.") + + def dice(self): + print("El pato de plástico dice Squeak.") + + +# Uso +print("Sin DIP:\n") +pato1 = PatoSalvaje() +pato2 = PatoDomestico() +pato3 = PatoPlastico() + +pato1.vuela() +pato1.nada() +pato1.dice() + +pato2.vuela() +pato2.nada() +pato2.dice() + +pato3.vuela() +pato3.nada() +pato3.dice() +print("\n") +# Ejemplo Pato con DIP +# clases abstractas con acciones que puede hacer un pato + + +class Volador(ABC): + @abstractmethod + def vuela(self): + pass + + +class Nadador(ABC): + @abstractmethod + def nada(self): + pass + + +class Hablador(ABC): + @abstractmethod + def dice(self): + pass + + +class Flotador(ABC): + @abstractmethod + def flota(self): + pass + + +class Tipo(ABC): + @abstractmethod + def tipo(self): + pass + +# Implementaciones concretas de las acciones de los patos + + +class VuelaConAlas(Volador): + def vuela(self): + print("Vuela con alas.") + + +class NadaEnLago(Nadador): + def nada(self): + print("Nada en el lago.") + + +class DiceQuack(Hablador): + def dice(self): + print("Dice Quack.") + + +class DiceQuick(Hablador): + def dice(self): + print("Dice Quick.") + + +class FlotaEnBañadera(Flotador): + def flota(self): + print("Flota en la bañadera.") + + +class TipoPato(Tipo): + def __init__(self, tipo): + self._tipo = tipo + + def tipo(self): + print(f"Es un {self._tipo}.") + +# Implementación en las distintas clases de patos + + +class PatoSalvaje: + def __init__(self, tipo: Tipo, volador: Volador, nadador: Nadador, hablador: Hablador): + self._tipo = tipo + self.volador = volador + self.nadador = nadador + self.hablador = hablador + + def tipo(self): + self._tipo.tipo() + + def vuela(self): + self.volador.vuela() + + def nada(self): + self.nadador.nada() + + def dice(self): + self.hablador.dice() + + +class PatoDomestico: + def __init__(self, tipo: Tipo, nadador: Nadador, hablador: Hablador): + self._tipo = tipo + self.nadador = nadador + self.hablador = hablador + + def tipo(self): + self._tipo.tipo() + + def nada(self): + self.nadador.nada() + + def dice(self): + self.hablador.dice() + + +class PatoPlastico: + def __init__(self, tipo: Tipo, hablador: Hablador, flotador: Flotador): + self._tipo = tipo + self.hablador = hablador + self.flotador = flotador + + def tipo(self): + self._tipo.tipo() + + def dice(self): + self.hablador.dice() + + def flota(self): + self.flotador.flota() + + +# Uso +print("Con DIP:\n") +vuela_con_alas = VuelaConAlas() +nada_en_lago = NadaEnLago() +dice_quack = DiceQuack() +dice_quick = DiceQuick() +flota_en_bañadera = FlotaEnBañadera() + +tipo_salvaje = TipoPato("Pato Salvaje") +tipo_domestico = TipoPato("Pato Domestico") +tipo_plastico = TipoPato("Pato de Plastico") + +pato4 = PatoSalvaje(tipo_salvaje, vuela_con_alas, nada_en_lago, dice_quack) +pato5 = PatoDomestico(tipo_domestico, nada_en_lago, dice_quack) +pato6 = PatoPlastico(tipo_plastico, dice_quick, flota_en_bañadera) + +pato4.tipo() +pato4.vuela() +pato4.nada() +pato4.dice() + +pato5.tipo() +pato5.nada() +pato5.dice() + +pato6.tipo() +pato6.dice() +pato6.flota() +print("\n") +# Dificultad Extra +# Clase notificación + + +class Notificacion(ABC): + @abstractmethod + def enviar(self, mensaje: str): + pass + +# Implementaciones concretas de tipos de notificaciones + + +class NotificacionEmail(Notificacion): + def enviar(self, mensaje: str): + print(f"Enviando Email: {mensaje}") + + +class NotificacionPush(Notificacion): + def enviar(self, mensaje: str): + print(f"Enviando Notificación Push: {mensaje}") + + +class NotificacionSMS(Notificacion): + def enviar(self, mensaje: str): + print(f"Enviando SMS: {mensaje}") + +# Sistema para las notificaciones + + +class Sistema_Notificacion: + def __init__(self, notificador: Notificacion): + self.notificador = notificador + + def notificar(self, mensaje: str): + self.notificador.enviar(mensaje) + + +# Uso +print("Dificultad Extra:\n") +notificacion_email = NotificacionEmail() +notificacion_push = NotificacionPush() +notificacion_sms = NotificacionSMS() + +envio1 = Sistema_Notificacion(notificacion_email) +envio2 = Sistema_Notificacion(notificacion_push) +envio3 = Sistema_Notificacion(notificacion_sms) + +envio1.notificar("Hola este es un correo electrónico") +envio2.notificar("Hola este es un push") +envio3.notificar("Hola este es un sms") diff --git "a/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/SooHav.py" "b/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/SooHav.py" new file mode 100644 index 0000000000..526c1d7b8d --- /dev/null +++ "b/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/SooHav.py" @@ -0,0 +1,174 @@ +# 31 SIMULADOR JUEGOS OLÍMPICOS + +import random +import pandas as pd + +# Registro de personas + + +class RegistroPersonas: + __instance = None + + @staticmethod + def get_instance(): + if RegistroPersonas.__instance is None: + RegistroPersonas.__instance = RegistroPersonas() + return RegistroPersonas.__instance + + def __init__(self): + self.personas = [] + + def registrar_persona(self, nombre, pais, deporte): + self.personas.append((nombre, pais, deporte)) + + def obtener_personas(self): + return self.personas + +# Registro de eventos olímpicos + + +class RegistroEventos: + __instance = None + + @staticmethod + def get_instance(): + if RegistroEventos.__instance is None: + RegistroEventos.__instance = RegistroEventos() + return RegistroEventos.__instance + + def __init__(self): + self.eventos = [] + + def registrar_evento(self, descripcion, fecha): + self.eventos.append((descripcion, fecha)) + + def obtener_eventos(self): + return [evento[0] for evento in self.eventos] + +# Simulador de eventos + + +def simular_podio(participantes, num_ganadores=3): + if len(participantes) < num_ganadores: + raise ValueError("No hay suficientes participantes para el podio.") + + random.shuffle(participantes) + podio = participantes[:num_ganadores] + categorias = ["Oro", "Plata", "Bronce"] + return [(participante, categorias[i]) for i, participante in enumerate(podio)] + +# Contador de medallas por país + + +def contar_medallas(resultados): + conteo_medallas = {} + for deporte, resultados_deporte in resultados.items(): + for atleta, medalla in resultados_deporte: + pais = atleta[1] + if pais not in conteo_medallas: + conteo_medallas[pais] = { + 'Oro': 0, 'Plata': 0, 'Bronce': 0, 'Total': 0} + conteo_medallas[pais][medalla] += 1 + conteo_medallas[pais]['Total'] += 1 + return conteo_medallas + +# Función para mostrar el menú + + +def menu(): + while True: + print("Menú:") + print("1. Registrar evento") + print("2. Registrar persona") + print("3. Simular podios") + print("4. Mostrar resultados") + print("5. Salir") + opcion = input("Ingrese una opción: ") + try: + return int(opcion) + except ValueError: + print("Opción inválida. Por favor, ingrese un número entero.") + + +def menu_resultados(): + while True: + print("Menú Resultados:") + print("1. Ranking por países") + print("2. Ganadores por deportes") + print("3. Salir") + opcion = input("Ingrese una opción: ") + try: + return int(opcion) + except ValueError: + print("Opción inválida. Por favor, ingrese un número entero.") + + +# Instanciar los registros de personas y eventos +registro_personas = RegistroPersonas.get_instance() +registro_eventos = RegistroEventos.get_instance() + +resultados = {} + +while True: + opcion = menu() + + if opcion == 1: + evento = input("Ingrese el nombre del deporte: ").strip() + fecha = input("Ingrese la fecha de la final: ") + registro_eventos.registrar_evento(evento, fecha) + + elif opcion == 2: + nombre = input("Ingrese el nombre del atleta: ").strip() + pais = input("Ingrese el país del atleta: ").strip() + listado_eventos = registro_eventos.obtener_eventos() + print("¿A que evento se registra?") + print(f"Deporte: ") + for deporte in listado_eventos: + print(f"{deporte}") + deporte = input("Ingrese el deporte: ").strip() + registro_personas.registrar_persona(nombre, pais, deporte) + + elif opcion == 3: + listado_personas = registro_personas.obtener_personas() + listado_eventos = registro_eventos.obtener_eventos() + + if len(listado_personas) < 3: + print("Error: Debes registrar al menos 3 atletas.") + elif len(listado_eventos) < 1: + print("Error: Debes registrar al menos un evento.") + else: + for evento in listado_eventos: + participantes_evento = random.sample( + listado_personas, k=len(listado_personas)) + podio = simular_podio(participantes_evento) + resultados[evento] = podio + print("Simulación de podios completada.") + + elif opcion == 4: + if not resultados: + print("No hay resultados para mostrar. Primero realiza una simulación.") + else: + while True: + opcion_resultados = menu_resultados() + + if opcion_resultados == 1: + conteo = contar_medallas(resultados) + data = [{'País': pais, **medallas} + for pais, medallas in conteo.items()] + df = pd.DataFrame(data) + df = df.sort_values(by=['Oro', 'Total'], ascending=False) + print(df) + + elif opcion_resultados == 2: + for evento, ganadores in resultados.items(): + print(f"Deporte: {evento}") + for atleta, medalla in ganadores: + print(f"{medalla}: {atleta[0]} ({atleta[1]})") + print() + + elif opcion_resultados == 3: + break + + elif opcion == 5: + print("¡Hasta luego!") + break diff --git a/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/SooHav.py b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/SooHav.py new file mode 100644 index 0000000000..1e87782139 --- /dev/null +++ b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/SooHav.py @@ -0,0 +1,132 @@ +# 32 BATALLA DEADPOOL Y WOLVERINE + +import time +import random +import pandas as pd + + +class Batalla: + """ + Clase que registra ataques. + """ + + def __init__(self): + self.registro = {} + + def registro_ataque(self, personaje, vida, evita_ataque, numero_ataque=0, dano_max=1, dano_var=0): + """ + Función que registra un ataque. + """ + nuevo_registro = { + "Puntos de vida": vida, + "Evasión de ataque": evita_ataque, + "Numero de ataque": numero_ataque, + "Daño máximo": dano_max, + "Daño": dano_var + } + self.registro[personaje] = nuevo_registro + print(f"Resultado del ataque de '{personaje}' registrado con éxito.\n") + + def calcular_dano(self, atacante): + """ + Función que calcula el daño. + """ + dano_var = round(random.uniform(0.4, atacante["Daño máximo"]), 2) + return dano_var + + +simulador_batalla = Batalla() + +# Función para mostrar el menú + + +def menu(): + while True: + print("Menú:") + print("1. Asignar puntos de vida") + print("2. Simular batalla") + print("3. Resultado final") + print("4. Salir") + opcion = input("Ingrese una opción: ") + try: + return int(opcion) + except ValueError: + print("Opción inválida. Por favor, ingrese un número entero.") + + +while True: + opcion = menu() + + if opcion == 1: + vida_deadpool = int(input("Ingrese puntos de vida de DEADPOOL: ")) + evita_ataque_deadpool = 0.25 + numero_ataque = 0 + dano_max_d = 0.8 + simulador_batalla.registro_ataque( + "Deadpool", vida_deadpool, evita_ataque_deadpool, numero_ataque, dano_max_d) + + vida_wolverine = int(input("Ingrese puntos de vida de WOLVERINE: ")) + evita_ataque_wolverine = 0.2 + dano_max_w = 0.7 + simulador_batalla.registro_ataque( + "Wolverine", vida_wolverine, evita_ataque_wolverine, numero_ataque, dano_max_w) + + elif opcion == 2: + while simulador_batalla.registro["Deadpool"]["Puntos de vida"] > 0 and simulador_batalla.registro["Wolverine"]["Puntos de vida"] > 0: + for personaje in list(simulador_batalla.registro.keys()): + atacante = simulador_batalla.registro[personaje] + defensor = simulador_batalla.registro["Wolverine" if personaje == + "Deadpool" else "Deadpool"] + + if random.random() > defensor['Evasión de ataque']: + dano = simulador_batalla.calcular_dano(atacante) + + if dano < atacante["Daño máximo"]: + dano_realizado = round( + dano * defensor["Puntos de vida"]) + defensor["Puntos de vida"] -= dano_realizado + atacante["Numero de ataque"] += 1 + print(f"Turno {atacante['Numero de ataque']}: { + personaje} ataca y causa {dano_realizado} de daño.") + print(f"A {list(simulador_batalla.registro.keys())[1 if personaje == 'Deadpool' else 0]} le quedan { + round(defensor['Puntos de vida'], 2)} puntos de vida.") + + simulador_batalla.registro_ataque(list(simulador_batalla.registro.keys())[ + 1 if personaje == 'Deadpool' else 0], defensor["Puntos de vida"], defensor["Evasión de ataque"], defensor["Numero de ataque"], defensor["Daño máximo"], dano) + else: + atacante["Numero de ataque"] += 1 + print(f"Turno {atacante['Numero de ataque']}: { + personaje} realiza un ataque máximo.") + print(f"{list(simulador_batalla.registro.keys())[ + 1 if personaje == 'Deadpool' else 0]} se regenera.") + # Aquí podrías definir la regeneración como un aumento en los puntos de vida, por ejemplo: + defensor["Puntos de vida"] += random.randint(1, 3) + simulador_batalla.registro_ataque(list(simulador_batalla.registro.keys())[ + 1 if personaje == 'Deadpool' else 0], defensor["Puntos de vida"], defensor["Evasión de ataque"], defensor["Numero de ataque"], defensor["Daño máximo"], dano) + else: + atacante["Numero de ataque"] += 1 + print(f"Turno {atacante['Numero de ataque']}.") + print(f"{personaje} esquiva el ataque en el turno { + atacante['Numero de ataque']}.\n") + + time.sleep(1) + + if simulador_batalla.registro["Deadpool"]["Puntos de vida"] <= 0 or simulador_batalla.registro["Wolverine"]["Puntos de vida"] <= 0: + break + + if simulador_batalla.registro["Deadpool"]["Puntos de vida"] <= 0: + print("¡Wolverine gana!") + else: + print("¡Deadpool gana!") + + elif opcion == 3: + resultados = simulador_batalla.registro + if not resultados: + print("No hay resultados para mostrar. Primero simula la batalla.") + else: + df = pd.DataFrame(resultados).T + print(df) + + elif opcion == 4: + print("¡El juego ha finalizado!") + break diff --git a/Roadmap/33 - RESCATANDO A MICKEY/python/SooHav.py b/Roadmap/33 - RESCATANDO A MICKEY/python/SooHav.py new file mode 100644 index 0000000000..accce86478 --- /dev/null +++ b/Roadmap/33 - RESCATANDO A MICKEY/python/SooHav.py @@ -0,0 +1,137 @@ +# 33 RESCATANDO A MICKEY +import numpy as np + + +def crear_laberinto(filas, columnas, obstaculos=0.3): + if filas < 3 or columnas < 3: + raise ValueError( + "El laberinto debe tener al menos 3 filas y 3 columnas") + + laberinto = np.empty((filas, columnas), dtype=object) + + fila_entrada = np.random.randint(0, filas-2) + fila_salida = np.random.randint(fila_entrada + 2, filas) + columna_entrada = np.random.randint(0, columnas-2) + columna_salida = np.random.randint(columna_entrada, columnas) + laberinto[fila_entrada, columna_entrada] = "🐭" + laberinto[fila_salida, columna_salida] = "🚪" + + for i in range(filas): + for j in range(columnas): + if laberinto[i, j] is None: + if np.random.random() > obstaculos: + laberinto[i, j] = "⬜" + else: + laberinto[i, j] = "⬛" + + return laberinto + + +def encontrar_coordenadas(matriz, dato): + filas, columnas = matriz.shape + for i in range(filas): + for j in range(columnas): + if matriz[i, j] == dato: + return (i, j) + return None + + +def movimiento(coordenadas1, coordenadas2): + fila, columna = coordenadas1[0] + \ + coordenadas2[0], coordenadas1[1] + coordenadas2[1] + return (fila, columna) + +# Función para mostrar el menú + + +def menu(): + while True: + print("Menú:") + print("1. Generar Laberinto") + print("2. Mover a Mikey") + print("3. Salir") + opcion = input("Ingrese una opción: ") + try: + return int(opcion) + except ValueError: + print("Opción inválida. Por favor, ingrese un número entero.") + + +while True: + opcion = menu() + + if opcion == 1: + try: + filas = int(input("Ingrese el número de filas: ")) + columnas = int(input("Ingrese el número de columnas: ")) + obstaculos = float( + input("Ingrese el porcentaje de obstáculos (entre 0.2 y 0.7): ")) + laberinto = crear_laberinto(filas, columnas, obstaculos) + for celda in laberinto: + print("".join(celda)) + except ValueError: + print("Intente nuevamente") + + elif opcion == 2: + + while True: + coordenadas_mikey = encontrar_coordenadas(laberinto, "🐭") + coordenadas_salida = encontrar_coordenadas(laberinto, "🚪") + + if coordenadas_mikey == coordenadas_salida: + print("¡Mikey encontró la salida!") + break + + elif coordenadas_mikey is None: + print("Primero debe generar un laberinto.") + break + + else: + print(f"Mikey se encuentra en {coordenadas_mikey}") + opcion_movimiento = int( + input("1. sur, 2. oeste, 3. este, 4. norte Ingrese una opción: ")) + coordenadas_movimiento = [(1, 0), (0, -1), (0, 1), (-1, 0)] + + if 1 <= opcion_movimiento <= 4: + nueva_coordenada = movimiento( + coordenadas_mikey, coordenadas_movimiento[opcion_movimiento - 1]) + fila, columna = nueva_coordenada + + if 0 <= fila < laberinto.shape[0] and 0 <= columna < laberinto.shape[1]: + + if laberinto[fila, columna] == "⬜": + laberinto[coordenadas_mikey[0], + coordenadas_mikey[1]] = "⬜" + laberinto[fila, columna] = "🐭" + for celda in laberinto: + print("".join(celda)) + print(f"Mikey se mueve a {nueva_coordenada}") + elif laberinto[fila, columna] == "🚪": + print("¡Mikey encontró la salida!") + laberinto[coordenadas_mikey[0], + coordenadas_mikey[1]] = "⬜" + for celda in laberinto: + print("".join(celda)) + break + else: + print( + "¡Movimiento inválido! Mikey no puede moverse allí.") + + opcion = int( + input("Debes elegir una opcion: 1 (continua) 2 (finaliza): ")) + + match opcion: + case 1: + continue + case 2: + print("Mikey no pudo salir!!") + break + + else: + print("¡Movimiento inválido! Mikey está fuera del laberinto.") + else: + print("Opción inválida. Por favor, ingrese una opción válida.") + + elif opcion == 3: + print("¡Hasta la próxima!") + break diff --git "a/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/SooHav.py" "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/SooHav.py" new file mode 100644 index 0000000000..d20f864367 --- /dev/null +++ "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/SooHav.py" @@ -0,0 +1,389 @@ +# 34 ÁRBOL GENEALÓGICO DE LA CASA DEL DRAGÓN + +from abc import ABC, abstractmethod +import uuid +import json +import networkx as nx +import matplotlib.pyplot as plt +from matplotlib.offsetbox import OffsetImage, AnnotationBbox +import requests +from PIL import Image +from io import BytesIO + + +class IRegistroPersonas(ABC): + @abstractmethod + def registrar_persona(self, nombre, genero, id_padre=None, id_madre=None, conyugue=None, hijos=None, imagen=None): + pass + + @abstractmethod + def buscar_persona(self, nombre): + pass + + @abstractmethod + def actualizar_relacion_hijo(self, hijo, padre_o_madre): + pass + + @abstractmethod + def validar_numero_padres(self, persona): + pass + + @abstractmethod + def actualizar_persona(self, id_persona, padre=None, madre=None, conyugue=None): + pass + + @abstractmethod + def eliminar_persona(self, id): + pass + + +class IMostrarArbol(ABC): + @abstractmethod + def construir_arbol(self, id_raiz): + pass + + @abstractmethod + def mostrar_arbol(self, arbol): + pass + + +class RegistroPersonas(IRegistroPersonas): + def __init__(self): + self.personas = {} + + def registrar_persona(self, nombre, genero, padre=None, madre=None, conyugue=None, hijos=None, imagen_url=''): + if nombre is None or genero is None: + raise ValueError("Nombre y género son requeridos.") + + id_unico = str(uuid.uuid4()) + + if padre == id_unico or madre == id_unico or conyugue == id_unico: + raise ValueError( + "Una persona no puede ser su propio padre, madre o cónyuge.") + + if conyugue: + conyugue_persona = self.personas.get(conyugue) + if conyugue_persona: + if conyugue_persona.get("conyugue"): + raise ValueError( + f"{conyugue_persona['nombre']} ya está casada con otra persona.") + conyugue_persona["conyugue"] = id_unico + + persona = { + 'id_unico': id_unico, + 'nombre': nombre.lower(), + 'genero': genero.lower(), + 'padre': padre, + 'madre': madre, + 'conyugue': conyugue, + 'hijos': [], + 'imagen': imagen_url + } + self.personas[id_unico] = persona + return persona + + def buscar_persona(self, nombre): + for clave, valor in self.personas.items(): + if valor["nombre"].lower() == nombre.lower(): + return clave, valor["nombre"], valor["id_unico"] + return None, None + + def actualizar_relacion_hijo(self, hijo, padre_o_madre): + if hijo not in self.personas[padre_o_madre]["hijos"]: + self.personas[padre_o_madre]["hijos"].append(hijo) + + def validar_numero_padres(self, persona): + padres = 0 + if persona.get("padre"): + padres += 1 + if persona.get("madre"): + padres += 1 + if padres > 2: + raise ValueError("La persona tiene más de dos padres.") + + def actualizar_persona(self, id_persona, padre=None, madre=None, conyugue=None, hijo=None): + persona = self.personas.get(id_persona) + if not persona: + raise ValueError("La persona con este ID no existe.") + + if padre == id_persona or madre == id_persona or conyugue == id_persona: + raise ValueError( + "Una persona no puede ser su propio padre, madre o cónyuge.") + + self.validar_numero_padres(persona) + + if conyugue: + conyugue_persona = self.personas.get(conyugue) + if conyugue_persona: + if conyugue_persona.get("conyugue") and conyugue_persona["conyugue"] != id_persona: + raise ValueError( + f"{conyugue_persona['nombre']} ya está casada con otra persona.") + # Actualiza el cónyuge en ambas personas + conyugue_persona["conyugue"] = id_persona + persona["conyugue"] = conyugue + + persona.update({'padre': padre, 'madre': madre}) + + if hijo: + self.actualizar_relacion_hijo(hijo, id_persona) + if padre: + self.actualizar_relacion_hijo(id_persona, padre) + if madre: + self.actualizar_relacion_hijo(id_persona, madre) + + def eliminar_persona(self, nombre): + for clave, valor in list(self.personas.items()): + if valor["nombre"].lower() == nombre.lower(): + del self.personas[clave] + print(f"Persona con nombre {nombre} eliminada.") + return + print("Nombre no encontrado.") + + +class MostrarArbol(IMostrarArbol): + def __init__(self, registro_personas): + self.registro_personas = registro_personas + self.arbol = {} + + def construir_arbol(self, id_raiz): + def construir_diccionario(id_persona): + persona = self.registro_personas.personas.get(id_persona) + if not persona: + return None + + padre = self.registro_personas.personas.get(persona.get("padre")) + madre = self.registro_personas.personas.get(persona.get("madre")) + conyugue = self.registro_personas.personas.get( + persona.get("conyugue")) + + diccionario = { + "id": id_persona, + "nombre": persona.get("nombre"), + "imagen": persona.get("imagen"), + "padre": { + "nombre": padre.get("nombre") if padre else None, + "imagen": padre.get("imagen") if padre else None + } if padre else None, + "madre": { + "nombre": madre.get("nombre") if madre else None, + "imagen": madre.get("imagen") if madre else None + } if madre else None, + "conyugue": { + "nombre": conyugue.get("nombre") if conyugue else None, + "imagen": conyugue.get("imagen") if conyugue else None + } if conyugue else None, + "hijos": [ + { + "nombre": hijo.get("nombre"), + "imagen": hijo.get("imagen") + } + for hijo in (self.registro_personas.personas.get(hijo_id) for hijo_id in persona.get("hijos") if hijo_id in self.registro_personas.personas) + ] + } + return diccionario + + self.arbol = construir_diccionario(id_raiz) + return self.arbol + + def mostrar_arbol(self, arbol): + print(json.dumps(arbol, indent=4)) + + +# Uso del código +registro = RegistroPersonas() +id_jaehaerysI = registro.registrar_persona( + "Jaehaerys I Targaryen", "Masculino", imagen_url="https://es.digitaltrends.com/wp-content/uploads/2024/07/1-Jaehaerys-I-Targaryen.jpg?fit=720%2C480&p=1") +id_alysanne = registro.registrar_persona( + "Alysanne Targaryen", "Femenino", imagen_url="https://static.wikia.nocookie.net/hieloyfuego/images/5/55/Alysanne.jpg/revision/latest?cb=20171022174856") +id_aemon = registro.registrar_persona( + "Aemon Targaryen", "Masculino", padre=id_jaehaerysI["id_unico"], madre=id_alysanne['id_unico'], imagen_url="") +id_baelon = registro.registrar_persona( + "Baelon Targaryen", "Masculino", padre=id_jaehaerysI["id_unico"], madre=id_alysanne['id_unico'], imagen_url="") +id_alysa = registro.registrar_persona( + "Alysa Targaryen", "Femenino", padre=id_jaehaerysI["id_unico"], madre=id_alysanne['id_unico'], conyugue=id_baelon["id_unico"], imagen_url="") +id_joselyne = registro.registrar_persona( + "Jocelyne Baratheon", "Femenino", conyugue=id_aemon["id_unico"], imagen_url="") +id_daemon = registro.registrar_persona("Daemon Targaryen", "Masculino", padre=id_baelon["id_unico"], madre=id_alysa[ + 'id_unico'], imagen_url="https://i2-prod.mirror.co.uk/news/uk-news/article33141854.ece/ALTERNATES/s1200b/0_daemon-targaryen.jpg") +id_viserysI = registro.registrar_persona("Viserys I Targaryen", "Masculino", padre=id_baelon["id_unico"], madre=id_alysa['id_unico'], + imagen_url="https://static.wikia.nocookie.net/hieloyfuego/images/f/fa/Paddy_Considine_como_Viserys_I_HBO.jpg/revision/latest?cb=20231201142723") +id_aemma = registro.registrar_persona( + "Aemma Arryn", "Femenino", imagen_url="https://static.wikia.nocookie.net/hieloyfuego/images/1/1d/Aemma_Arryn_HBO.png/revision/latest?cb=20220818134257") +id_rhea = registro.registrar_persona( + "Rhea Royce", "Femenino", imagen_url="https://static.wikia.nocookie.net/hieloyfuego/images/7/7e/Rhea_Royce_HBO.jpeg/revision/latest?cb=20220915180910") + +registro.actualizar_persona( + id_viserysI["id_unico"], conyugue=id_aemma["id_unico"]) +registro.actualizar_persona( + id_daemon["id_unico"], conyugue=id_rhea["id_unico"]) +registro.actualizar_persona( + id_jaehaerysI["id_unico"], conyugue=id_alysanne["id_unico"]) +registro.actualizar_persona( + id_jaehaerysI["id_unico"], hijo=id_alysa["id_unico"]) +registro.actualizar_persona( + id_jaehaerysI["id_unico"], hijo=id_aemon["id_unico"]) +registro.actualizar_persona( + id_jaehaerysI["id_unico"], hijo=id_baelon["id_unico"]) +registro.actualizar_persona( + id_alysanne["id_unico"], conyugue=id_jaehaerysI["id_unico"]) +registro.actualizar_persona(id_alysanne["id_unico"], hijo=id_alysa["id_unico"]) +registro.actualizar_persona(id_alysanne["id_unico"], hijo=id_aemon["id_unico"]) +registro.actualizar_persona( + id_alysanne["id_unico"], hijo=id_baelon["id_unico"]) +registro.actualizar_persona(id_baelon["id_unico"], hijo=id_daemon["id_unico"]) +registro.actualizar_persona( + id_baelon["id_unico"], hijo=id_viserysI["id_unico"]) +registro.actualizar_persona( + id_baelon["id_unico"], padre=id_jaehaerysI["id_unico"], madre=id_alysanne["id_unico"]) + +personaje_buscado = registro.buscar_persona("Rhea Royce") +print(personaje_buscado) +registro.eliminar_persona("Rhea Royce") + +# Mostrar árbol genealógico como diccionario +mostrar = MostrarArbol(registro) +arbol = mostrar.construir_arbol(id_baelon["id_unico"]) +mostrar.mostrar_arbol(arbol) + +# Extra: Mostrar árbol genealógico como un grafo +# Función para cargar imágenes desde un enlace + + +def obtener_imagen(url): + if not url or not url.startswith(('http://', 'https://')): + print(f"URL no válida: {url}. Se usará la imagen por defecto.") + url = default_image_url + try: + response = requests.get(url) + img = Image.open(BytesIO(response.content)) + return OffsetImage(img, zoom=0.03) + except Exception as e: + print(f"Error al cargar la imagen desde {url}: {e}") + return OffsetImage(Image.open(BytesIO(requests.get(default_image_url).content)), zoom=0.08) + + +# Configuración de imágenes por defecto +default_image_url = "https://mundo-ghibli.com/wp-content/uploads/2023/10/sin-rostro-chihiro.jpg.webp" + +# Crear el grafo dirigido +G = nx.DiGraph() + +# Agregar nodos y aristas usando nombres como identificadores +# Verificar si el padre existe y agregar nodo y arista si es así +if arbol.get("padre") and arbol["padre"].get("nombre"): + G.add_node(arbol["padre"]["nombre"], + imagen=arbol["padre"].get("imagen", default_image_url)) + G.add_node(arbol["nombre"], imagen=arbol.get("imagen", default_image_url)) + G.add_edge(arbol["padre"]["nombre"], arbol["nombre"]) + +# Verificar si la madre existe y agregar nodo y arista +if arbol.get("madre") and arbol["madre"].get("nombre"): + G.add_node(arbol["madre"]["nombre"], + imagen=arbol["madre"].get("imagen", default_image_url)) + G.add_edge(arbol["madre"]["nombre"], arbol["nombre"]) + +# Verificar si el cónyuge existe y agregar nodo y arista +if arbol.get("conyugue") and arbol["conyugue"].get("nombre"): + G.add_node(arbol["conyugue"]["nombre"], + imagen=arbol["conyugue"].get("imagen", default_image_url)) + G.add_edge(arbol["nombre"], arbol["conyugue"]["nombre"]) + +# Verificar si hay hijos y agregar nodos y aristas +for hijo in arbol.get("hijos", []): + if hijo.get("nombre"): # Evitar nodos sin nombre + # Usar imagen del hijo o predeterminada + G.add_node(hijo["nombre"], imagen=hijo.get( + "imagen", default_image_url)) + G.add_edge(arbol["nombre"], hijo["nombre"]) + +# Posiciones para una mejor visualización +pos = { + arbol["nombre"]: (0, 0), # El nodo principal en el centro +} + +# Posición del padre si existe +if arbol.get("padre") and arbol["padre"].get("nombre"): + # Posicionamos al padre a la izquierda arriba + pos[arbol["padre"]["nombre"]] = (-1, 1) + +# Posición de la madre si existe +if arbol.get("madre") and arbol["madre"].get("nombre"): + # Posicionamos a la madre a la derecha arriba + pos[arbol["madre"]["nombre"]] = (1, 1) + +# Posición del cónyuge si existe +if arbol.get("conyugue") and arbol["conyugue"].get("nombre"): + # Posicionamos al cónyuge a la derecha del nodo principal + pos[arbol["conyugue"]["nombre"]] = (1, 0) + +# Distribuir la posición de los hijos +for idx, hijo in enumerate(arbol.get("hijos", [])): + if hijo.get("nombre"): + # Calculamos la posición horizontal de cada hijo + # Los hijos se posicionan debajo del nodo principal + pos[hijo["nombre"]] = (idx - len(arbol["hijos"]) / 2, -1) + +# Dibujar el grafo +fig, ax = plt.subplots() + +# Verifica si el nodo existe y no es None +try: + padre_nombre = arbol.get("padre", {}).get("nombre", None) +except AttributeError: + padre_nombre = None +try: + madre_nombre = arbol.get("madre", {}).get("nombre", None) +except AttributeError: + madre_nombre = None +try: + conyugue_nombre = arbol.get("conyugue", {}).get("nombre", None) +except AttributeError: + conyugue_nombre = None + +# Definir tamaños de los nodos +node_sizes = { + padre_nombre: 1200 if padre_nombre else 0, + madre_nombre: 1200 if madre_nombre else 0, + arbol["nombre"]: 2000, + conyugue_nombre: 2000 if conyugue_nombre else 0, + **{hijo["nombre"]: 1000 for hijo in arbol.get("hijos", []) if hijo.get("nombre")} +} + +# Definir colores de los nodos +node_colors = { + padre_nombre: "grey" if padre_nombre else 'white', + madre_nombre: "grey" if madre_nombre else 'white', + arbol["nombre"]: "blue", + conyugue_nombre: "purple" if conyugue_nombre else 'white', + **{hijo["nombre"]: "lightblue" for hijo in arbol.get("hijos", []) if hijo.get("nombre")} +} + +# Dibuja el grafo con aristas +nx.draw( + G, pos, with_labels=False, arrows=True, + node_size=[node_sizes.get(node, 500) for node in G.nodes()], + node_color=[node_colors.get(node, 'white') for node in G.nodes()], + font_size=10, font_weight='bold', ax=ax +) + +# Añadir los nombres por encima de los nodos +for nodo, (x, y) in pos.items(): + ax.text(x + 0.1, y + 0.15, nodo, fontsize=10, ha='center', + color='black') # Ajustar posición del texto + +# Añadir las imágenes a los nodos +for nodo, (x, y) in pos.items(): + if nodo in G.nodes(): + imagen_url = G.nodes[nodo].get('imagen', default_image_url) + try: + # Obtener la imagen del diccionario + img = obtener_imagen(imagen_url) + ab = AnnotationBbox(img, (x, y), frameon=False) + ax.add_artist(ab) + except Exception as e: + print(f"No se pudo cargar la imagen para {nodo}: {e}") + +plt.title("Árbol Genealógico de la Casa del Dragón", + fontsize=14, fontweight='bold', y=1.05) +plt.axis('off') +plt.show() From 4db41b92c55cb293fd770c0a42d4fe7505515d14 Mon Sep 17 00:00:00 2001 From: TofeDev Date: Wed, 11 Sep 2024 22:09:20 -0300 Subject: [PATCH 154/539] reto 04 javascript --- .../javascript/TofeDev.js | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 Roadmap/04 - CADENAS DE CARACTERES/javascript/TofeDev.js diff --git a/Roadmap/04 - CADENAS DE CARACTERES/javascript/TofeDev.js b/Roadmap/04 - CADENAS DE CARACTERES/javascript/TofeDev.js new file mode 100644 index 0000000000..d40d8d7e03 --- /dev/null +++ b/Roadmap/04 - CADENAS DE CARACTERES/javascript/TofeDev.js @@ -0,0 +1,96 @@ +const string1 = "El cielo está soleado" +const string2 = "puede que hoy llueva" + +//Concatenación +console.log(string1 + " pero " + string2) +console.log(`${string1} pero ${string2}`) + +//Index de un caracter en específico +console.log(string1[5]) //e + +//Subcadena +console.log(string1.slice(9,21)) //está soleado + +//Longitud +console.log(string1.length); //21 + +//División +const listaColores = "rojo, amarillo, azul, morado" +let separar = string1.split(","); +console.log(separar); //(4) ["rojo", "amarillo", "azul", "morado"] + +//Conversión mayúsculas +console.log(string2.toUpperCase()); //PUEDE QUE HOY LLUEVA + +//Conversión minúsculas +console.log(string1.toLowerCase()); //el cielo está soleado + +//Reemplazo +console.log(string1.replace("soleado", "nublado")) //"El cielo está nublado" + +//Verificación +console.log(string1.includes("llueva")); //true + +// Repetir +console.log(string2.repeat(3)); // + +//Busqueda de posición +console.log(string1.search("elo")); //5 + + /* DIFICULTAD EXTRA (opcional): + * Crea un programa que analice dos palabras diferentes y realice comprobaciones + * para descubrir si son: + * - Palíndromos + * - Anagramas + * - Isogramas + */ + +//Palíndromo +function palindromo(palabra) { +palabraInvertida = ""; + for (i = palabra.length - 1; i >= 0; i--) { + palabraInvertida += palabra[i]; + } + if (palabra===palabraInvertida) { + console.log("Es palíndromo"); + } else { + console.log("No es palíndromo"); + } +} + +//Anagrama +function anagrama(palabra1, palabra2) { + const arr1 = palabra1.toLowerCase().split('').sort().join(''); + const arr2 = palabra2.toLowerCase().split('').sort().join(''); + if (arr1 === arr2) { + console.log("Es un anagrama"); + } else { + console.log("No es un anagrama"); + } +} + +//Isograma +function isograma(palabra) { + const array = palabra.toLowerCase().split(''); + const set = new Set(array); + if (array.length === set.size) { + console.log("Es un isograma"); + } else { + console.log("No es un isograma"); + } +} + +const palabra1 = "reconocer"; +const palabra2 = "ballena"; +const palabra3 = "llenaba"; +const palabra4 = "cuervo"; + + +palindromo(palabra1); //True +palindromo(palabra4); //False + +anagrama(palabra2, palabra3); //True +anagrama(palabra3, palabra4); //False + +isograma(palabra4); //True +isograma(palabra1); //False \ No newline at end of file From c0aeec13839a97f91b5e74f6ed30120752245acd Mon Sep 17 00:00:00 2001 From: SooHav Date: Wed, 11 Sep 2024 22:13:23 -0300 Subject: [PATCH 155/539] 34 - Python --- Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/SooHav.py | 1 - 1 file changed, 1 deletion(-) diff --git a/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/SooHav.py b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/SooHav.py index 1e87782139..be0b76c402 100644 --- a/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/SooHav.py +++ b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/SooHav.py @@ -99,7 +99,6 @@ def menu(): personaje} realiza un ataque máximo.") print(f"{list(simulador_batalla.registro.keys())[ 1 if personaje == 'Deadpool' else 0]} se regenera.") - # Aquí podrías definir la regeneración como un aumento en los puntos de vida, por ejemplo: defensor["Puntos de vida"] += random.randint(1, 3) simulador_batalla.registro_ataque(list(simulador_batalla.registro.keys())[ 1 if personaje == 'Deadpool' else 0], defensor["Puntos de vida"], defensor["Evasión de ataque"], defensor["Numero de ataque"], defensor["Daño máximo"], dano) From 7de3409dffe82e4f98aaf4cb9ab5d142a7047db3 Mon Sep 17 00:00:00 2001 From: Marianoemir Date: Wed, 11 Sep 2024 23:56:19 -0300 Subject: [PATCH 156/539] #[02] - [Java] --- .../java/Marianoemir.java | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/java/Marianoemir.java diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/java/Marianoemir.java b/Roadmap/02 - FUNCIONES Y ALCANCE/java/Marianoemir.java new file mode 100644 index 0000000000..6281ffee04 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/java/Marianoemir.java @@ -0,0 +1,126 @@ +import java.util.Scanner; +class Marianoemir{ + + /* + @author Marianoemir + + * EJERCICIO: + * - Crea ejemplos de funciones básicas que representen las diferentes + * posibilidades del lenguaje: + * Sin parámetros ni retorno, con uno o varios parámetros, con retorno... + * - Comprueba si puedes crear funciones dentro de funciones. + * - Utiliza algún ejemplo de funciones ya creadas en el lenguaje. + * - Pon a prueba el concepto de variable LOCAL y GLOBAL. + * - Debes hacer print por consola del resultado de todos los ejemplos. + * (y tener en cuenta que cada lenguaje puede poseer más o menos posibilidades) + * + */ + /*Variables Globales + Variables de Instancia: Se usan para almacenar datos específicos de cada objeto. + Variables Estáticas: Se usan para almacenar información o comportamientos que deben ser comunes a todas las instancias, + como contadores globales, configuraciones comunes, o constantes.*/ + int variglobal = 20; + static int varglobalconstatic = 30; + + //Las funciones en java se llaman 'metodos' tambien + + //Función sin retorno ni parametros + + //Con void y public es necesario crear un Objeto para poder ejecutarla. + public void mostrar(){ + System.out.println("Este es un msj con public y void"); + } + + //Calcular valor elevado de un numero con clases predefinidas en java + public double potencia (double a ,double b){ + return Math.pow(a, b); + } + + + //Sin static no es necesario iniciarlizar un Obj solamente hay que llamar a la función + public static void salidadeconsola(){ + System.out.println("Msj con Static no hace falta crear ni inicializar un Obj"); + } + //Metodo con 'parametros' y 'retornos' + public int suma(int a, int b, int c){ + return a + b + c; + } + + /*Ejemplo de Variables locales + Variables Locales: Limitadas al método o bloque donde se declaran; no son accesibles fuera de ese ámbito.*/ + public int multi (int num1,int num2){ + int resultado = num1 * num2; + return resultado; + } + + /*DIFICULTAD EXTRA (opcional): + * Crea una función que reciba dos parámetros de tipo cadena de texto y retorne un número. + * - La función imprime todos los números del 1 al 100. Teniendo en cuenta que: + * - Si el número es múltiplo de 3, muestra la cadena de texto del primer parámetro. + * - Si el número es múltiplo de 5, muestra la cadena de texto del segundo parámetro. + * - Si el número es múltiplo de 3 y de 5, muestra las dos cadenas de texto concatenadas. + * - La función retorna el número de veces que se ha impreso el número en lugar de los textos. + * Presta especial atención a la sintaxis que debes utilizar en cada uno de los casos. + * Cada lenguaje sigue una convenciones que debes de respetar para que el código se entienda.*/ + + public int difiextar (String cade1 ,String cade2){ + + int contador = 0; + + for (int i = 1; i <= 100; i++) { + if (i % 3 == 0 && i % 5 == 0) { + System.out.println(cade1 + cade2); + } else if (i % 3 == 0) { + System.out.println(cade1); + } else if (i % 5 == 0) { + System.out.println(cade2); + } else { + contador++; + } + } + return contador; + } + + + public static void main(String[] args) { + Marianoemir imprimir = new Marianoemir(); + imprimir.mostrar(); + salidadeconsola(); + int operacion = imprimir.suma(10,20,30); + System.out.println("Metodo con retorno y parametros: "+operacion); + + + Scanner scanner = new Scanner(System.in); + System.out.println("Introduce el primer numero(la base): "); + double base = scanner.nextDouble(); + + + System.out.println("Introduce el segundo numero(el exponente): "); + double exponente = scanner.nextDouble(); + System.out.println(""); + System.out.println("El resultado de tu numero elevado es: "+imprimir.potencia(base, exponente)); + + /* EJemplo con variables locales + + Se declaran dentro de un método, constructor o bloque de código. + Solo son accesibles dentro del método, constructor o bloque donde se declaran. + Se crean cuando se entra en el bloque de código y se destruyen cuando se sale.*/ + + System.out.println("El resultado de la multiplicacion entre variables locales es: "+imprimir.multi(5, 5)); + + //Ejemplos de variables globales + + System.out.println("Variable global accedida desde instancia de clase: "+imprimir.variglobal); + System.out.println("Ejemplo de variable global con static: "+varglobalconstatic); + + //Ejercicio extra ejecución + + int resulfunc = imprimir.difiextar("Hola", " Espero que tengas un buen dia"); + + System.out.println("El numero de veces que se imprimio el numero es: "+resulfunc); + + + + + } +} \ No newline at end of file From 7cca51215932bbc43a6547f15489ad461e74e4a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20D=C3=B3ezon?= Date: Wed, 11 Sep 2024 21:25:01 -0600 Subject: [PATCH 157/539] #37 - JavaScript --- .../javascript/RaulDoezon.js | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/javascript/RaulDoezon.js diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RaulDoezon.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RaulDoezon.js new file mode 100644 index 0000000000..ef9c98e6c5 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RaulDoezon.js @@ -0,0 +1,96 @@ +/* + EJERCICIO: + ¡Dos de las bandas más grandes de la historia están de vuelta! + Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? + Desarrolla un programa que se conecte al API de Spotify y los compare. + Requisitos: + 1. Crea una cuenta de desarrollo en https://developer.spotify.com. + 2. Conéctate al API utilizando tu lenguaje de programación. + 3. Recupera datos de los endpoint que tú quieras. + Acciones: + 1. Accede a las estadísticas de las dos bandas. + Por ejemplo: número total de seguidores, escuchas mensuales, + canción con más reproducciones... + 2. Compara los resultados de, por lo menos, 3 endpoint. + 3. Muestra todos los resultados por consola para notificar al usuario. + 4. Desarrolla un criterio para seleccionar qué banda es más popular. +*/ + +// SPOTIFY DEVELOPER DOCUMENTATION: https://developer.spotify.com/documentation/web-api +let oasisData = {} +let linkinParkData = {}; +let oasisPoints = 0; +let linkinParkPoints = 0; +const accessToken = 'BQAA3qx2W-B2a48L9gNndfSRf4uxIUUzUHQh9Z7VNMgPoO3bCK3v1jAACqbRHTU9mtu6_24NUgvg1P7FFFmZ0tr6mW_8YX30aMWRRh1Oc6X0-EMzFwo'; +const oasisID = '2DaxqgrOhkeH0fpeiQq2f4'; +const linkinParkID = '6XyY86QOPPrYVGvF9ch6wz'; + +async function fetchWebApi(endpoint, method, body) { + const response = await fetch(`https://api.spotify.com/${endpoint}`, { + headers: { + Authorization: `Bearer ${accessToken}`, + }, + method, + body:JSON.stringify(body), + }); + + return await response.json(); +} + +const getArtist = async (artistID) => await fetchWebApi(`v1/artists/${artistID}`, 'GET'); +const getAlbums = async (artistID) => await fetchWebApi(`v1/artists/${artistID}/albums`, 'GET'); +const getTopTracks = async (artistID) => await fetchWebApi(`v1/artists/${artistID}/top-tracks`, 'GET'); + +const oasisInformation = getArtist(oasisID); +const oasisAlbums = getAlbums(oasisID); +const oasisTopTracks = getTopTracks(oasisID); +const linkinParkInformation = getArtist(linkinParkID); +const linkinParkAlbums = getAlbums(linkinParkID); +const linkinParkTopTracks = getTopTracks(linkinParkID); + +const artistInformation = ((artistArray, data) => { + artistArray.artist_name = data.name; + artistArray.total_followers = data.followers.total; + artistArray.popularity = data.popularity; +}); + +const albumInformation = ((artistArray, data) => { + artistArray.recent_album = data.items[0].name; + artistArray.album_release_date = data.items[0].release_date; +}); + +const topTracksInformation = ((artistArray, data) => { + artistArray.track_name = data.tracks[0].name; + artistArray.track_popularity = data.tracks[0].popularity; +}); + +oasisInformation.then((response) => artistInformation(oasisData, response)); +oasisAlbums.then((response) => albumInformation(oasisData, response)); +oasisTopTracks.then((response) => topTracksInformation(oasisData, response)); +linkinParkInformation.then((response) => artistInformation(linkinParkData, response)); +linkinParkAlbums.then((response) => albumInformation(linkinParkData, response)); +linkinParkTopTracks.then((response) => topTracksInformation(linkinParkData, response)); + +const showData = () => { + console.log(`${oasisData.artist_name} vs ${linkinParkData.artist_name}`); + console.log(`Popularity:\n${oasisData.popularity} | ${linkinParkData.popularity}`); + console.log(`Followers:\n${oasisData.total_followers} | ${linkinParkData.total_followers}`); + console.log(`Top Track:\n${oasisData.track_name} | ${linkinParkData.track_name}`); + console.log(`Track popularity:\n${oasisData.track_popularity} | ${linkinParkData.track_popularity}`); + console.log(`Recent album:\n${oasisData.recent_album} | ${linkinParkData.recent_album}`); + console.log(`Release date:\n${oasisData.album_release_date} | ${linkinParkData.album_release_date}`); + + oasisData.popularity > linkinParkData.popularity ? oasisPoints += 1 : linkinParkPoints += 1; + oasisData.total_followers > linkinParkData.total_followers ? oasisPoints += 1 : linkinParkPoints += 1; + oasisData.track_popularity > linkinParkData.track_popularity ? oasisPoints += 1 : linkinParkPoints += 1; + + console.log(`\n¡${oasisPoints > linkinParkPoints ? oasisData.artist_name : linkinParkData.artist_name} es más popular!`); +} + +async function main() { + await Promise.all([oasisInformation, oasisAlbums, oasisTopTracks, linkinParkInformation, linkinParkAlbums, linkinParkTopTracks]); + + showData(); +} + +main(); From 94919d7b8ecdfe94a1133035024091e8f278111f Mon Sep 17 00:00:00 2001 From: Sofia-d-p Date: Thu, 12 Sep 2024 00:26:22 -0300 Subject: [PATCH 158/539] #01 - python --- .../python/Sofia-d-p.py | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/Sofia-d-p.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/Sofia-d-p.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/Sofia-d-p.py new file mode 100644 index 0000000000..d86ffb42b9 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/Sofia-d-p.py @@ -0,0 +1,88 @@ +#Operadores aritméticos +print("Operadores aritméticos") +print(f"sumar 10+3 = {10+3}") +print(f"restar 78-43 {78-43 }") +print(f"multiplicar 63*3 = {63*3}") +print (f"dividir 125/5 = {125/5}") +print(f"esto es elevar a una potencia 5**5= {5**5}") +print(f"es es una división entera 10 //3 {10//3}") +print(f"esto es el módulo de una división 10%3 = {10%3}") + +#Operadores de comparación +print("Operadores de comparación") +print(f"este es el operador de igualdad 10 == 10 y es {10 == 10}") +print(f"este operador es desigual != {10!=3}") +print(f"este operador es mayor > {10>3}") +print(f"este operador es menor < {10<3}") +print(f"este operador es mayor o igual >= {10>=3}") +print(f"este operador es menor o igual <= {10<=3}") + +#Operadores lógicos +print("Operadores lógicos") +print(f"Operador AND 25 + 10 = 35 and 25<50 {25 + 10 == 35 and 25<50}") #Se cumplen las 2 condiciones +print(f"Operador OR 25 + 10 = 45 OR 25<50 {25 + 10 == 45 or 25<50}") #Se cumple 1 sola condición +print(f"Operador NOT 25 > 50 {not 25>50}") #Niega condición + +#Operadores de pertenencia +print("Operadores de pertenencia") +print(f"F en Sofia = {'f' in 'sofia'}") + +#Operadores de asignación +a=7; b=2 +print("Operadores de asignación") +x=a; x+=b; print("x+=", x) # 9 +x=a; x-=b; print("x-=", x) # 5 +x=a; x*=b; print("x*=", x) # 14 +x=a; x/=b; print("x/=", x) # 3.5 +x=a; x%=b; print("x%=", x) # 1 +x=a; x//=b; print("x//=", x) # 3 +x=a; x**=b; print("x**=", x) # 49 + + + +""" +Estructuras de control +""" + +#Condicionales +print("Condicionales") + +my_string = "Sofita aprende Python" + +if my_string == "Sofita aprende Python": + print("'my_string' es 'Sofita aprende Python'") +elif my_string == "Sofita": + print("'my_string' es 'Sofita'") +else: + print("'my_string' es otra") + +#Iterativas +print("Iterativas") + +for i in range(0, 5): + print(i) + +#Iterativa con while +x = 5 +while x > 0: + x -=1 + print(x) + +#Manejo de excepciones +print("Excepciones") +try: + print(10/0) +except ZeroDivisionError: + print("Error") +finally: + print("Este bloque siempre se ejecuta") + +""" +Dificultad extra +""" +#Todos los numeros todos los números comprendidos entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3 +print("Dificultad extra") +for i in range (10,56): + if i % 2 ==0 and i != 16 and i % 3 != 0: + print (i) + From aca11f9043340f0a5a9298d8b0868c329212ad8f Mon Sep 17 00:00:00 2001 From: kenysdev Date: Wed, 11 Sep 2024 22:53:02 -0500 Subject: [PATCH 159/539] 37 - c# - OASIS VS LINKIN PARK --- .../37 - OASIS VS LINKIN PARK/c#/kenysdev.cs | 220 ++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/c#/kenysdev.cs diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/c#/kenysdev.cs b/Roadmap/37 - OASIS VS LINKIN PARK/c#/kenysdev.cs new file mode 100644 index 0000000000..0367b997cc --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/c#/kenysdev.cs @@ -0,0 +1,220 @@ +namespace exs37; +/* +_____________________________________ +https://github.com/kenysdev +2024 - C# +_____________________________________ +OASIS VS LINKIN PARK +------------------------------------ +* ¡Dos de las bandas más grandes de la historia están de vuelta! +* Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? +* Desarrolla un programa que se conecte al API de Spotify y los compare. +* Requisitos: +* 1. Crea una cuenta de desarrollo en https://developer.spotify.com. +* 2. Conéctate al API utilizando tu lenguaje de programación. +* 3. Recupera datos de los endpoint que tú quieras. +* Acciones: +* 1. Accede a las estadísticas de las dos bandas. +* Por ejemplo: número total de seguidores, escuchas mensuales, +* canción con más reproducciones... +* 2. Compara los resultados de, por lo menos, 3 endpoint. +* 3. Muestra todos los resultados por consola para notificar al usuario. +* 4. Desarrolla un criterio para seleccionar qué banda es más popular. +*/ + + +using System.Linq; +using System.Threading.Tasks; + +// https://www.nuget.org/packages/SpotifyAPI.Web/ +// https://johnnycrazy.github.io/SpotifyAPI-NET/docs/introduction +using SpotifyAPI.Web; + +// https://www.nuget.org/packages/DotNetEnv/ +using DotNetEnv; + +public class Spotify +{ + private readonly SpotifyClient _spotify; + + public Spotify() + { + Env.Load(); + var clientId = Environment.GetEnvironmentVariable("SPOTIFY_CLIENT_ID"); + var clientSecret = Environment.GetEnvironmentVariable("SPOTIFY_CLIENT_SECRET"); + + if (string.IsNullOrEmpty(clientId) || string.IsNullOrEmpty(clientSecret)) + { + throw new ArgumentException("Se debe proporcionar 'CLIENT_ID' y 'CLIENT_SECRET'."); + } + + var config = SpotifyClientConfig + .CreateDefault() + .WithAuthenticator(new ClientCredentialsAuthenticator(clientId, clientSecret)); + + _spotify = new SpotifyClient(config); + } + + public async Task GetArtistsAsync(string name) + { + var searchRequest = new SearchRequest(SearchRequest.Types.Artist, name) + { + Limit = 3 + }; + return await _spotify.Search.Item(searchRequest); + } + + public async Task GetMostPopularArtistAsync(string name) + { + var searchResult = await GetArtistsAsync(name); + + if (searchResult?.Artists?.Items == null || searchResult.Artists.Items.Count == 0) + { + return null; + } + + var mostPopularArtist = searchResult.Artists.Items + .OrderByDescending(artist => artist.Popularity) + .FirstOrDefault(); + + return mostPopularArtist; + } + + public async Task ArtistTopTracksAsync(string artistId) + { + return await _spotify.Artists.GetTopTracks(artistId, new ArtistsTopTracksRequest("US")); + } + +} + +public class Versus(FullArtist artist1, FullArtist artist2, Spotify spotifyInstance) +{ + private readonly FullArtist _artist1 = artist1; + private readonly FullArtist _artist2 = artist2; + private readonly Spotify _spotify = spotifyInstance; + private int _artist1Score = 0; + private int _artist2Score = 0; + + private Task Popularity() + { + if (_artist1 == null || _artist2 == null) + { + Console.WriteLine("Uno o ambos artistas no están disponibles."); + return Task.CompletedTask; + } + + int a1Pop = _artist1.Popularity; + int a2Pop = _artist2.Popularity; + + Console.WriteLine($"Popularidad: {a1Pop} vs {a2Pop}"); + if (a1Pop > a2Pop) + { + _artist1Score++; + } + else if (a2Pop > a1Pop) + { + _artist2Score++; + } + + return Task.CompletedTask; + } + + private Task Followers() + { + if (_artist1 == null || _artist2 == null) + { + Console.WriteLine("Uno o ambos artistas no están disponibles."); + return Task.CompletedTask; + } + + int a1Foll = _artist1.Followers.Total; + int a2Foll = _artist2.Followers.Total; + + Console.WriteLine($"Seguidores: {a1Foll} vs {a2Foll}"); + if (a1Foll > a2Foll) + { + _artist1Score++; + } + else if (a2Foll > a1Foll) + { + _artist2Score++; + } + + return Task.CompletedTask; + } + + private async Task Top3TracksAsync() + { + if (_artist1 == null || _artist2 == null) + { + Console.WriteLine("Uno o ambos artistas no están disponibles."); + return; + } + + var a1Top = await _spotify.ArtistTopTracksAsync(_artist1.Id); + var a2Top = await _spotify.ArtistTopTracksAsync(_artist2.Id); + + int a1Pop = a1Top.Tracks.Take(3).Sum(track => track.Popularity); + int a2Pop = a2Top.Tracks.Take(3).Sum(track => track.Popularity); + + Console.WriteLine($"Popularidad Top 3 canciones: {a1Pop} vs {a2Pop}"); + if (a1Pop > a2Pop) + { + _artist1Score++; + } + else if (a2Pop > a1Pop) + { + _artist2Score++; + } + } + + private void FinalResult() + { + Console.WriteLine("\nRESULTADO FINAL:"); + Console.WriteLine($"{_artist1.Name}: {_artist1Score} puntos"); + Console.WriteLine($"{_artist2.Name}: {_artist2Score} puntos"); + + if (_artist1Score > _artist2Score) + { + Console.WriteLine($"\n¡'{_artist1.Name}' gana el versus!"); + } + else if (_artist2Score > _artist1Score) + { + Console.WriteLine($"\n¡'{_artist2.Name}' gana el versus!"); + } + else + { + Console.WriteLine("\n¡Es un empate!"); + } + } + + public async Task StartAsync() + { + Console.WriteLine($"{_artist1.Name} vs {_artist2.Name}"); + await Popularity(); + await Followers(); + await Top3TracksAsync(); + FinalResult(); + } +} + +public class Program +{ + public static async Task Main() + { + Console.WriteLine("VERSUS"); + var spotify = new Spotify(); + + var artist1 = await spotify.GetMostPopularArtistAsync("Oasis"); + var artist2 = await spotify.GetMostPopularArtistAsync("Linkin Park"); + + if (artist1 == null || artist2 == null) + { + Console.WriteLine("Artistas no encontrados"); + return; + } + + var versus = new Versus(artist1, artist2, spotify); + await versus.StartAsync(); + } +} From ffd35a11aa24de119be230a586003043e49225fc Mon Sep 17 00:00:00 2001 From: Jymtr Date: Thu, 12 Sep 2024 09:42:46 +0200 Subject: [PATCH 160/539] #19 - Python --- .../19 - ENUMERACIONES/python/JuanDAW37.py | 86 +++++++++++++++++++ .../20 - PETICIONES HTTP/python/JuanDAW37.py | 85 ++++++++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 Roadmap/19 - ENUMERACIONES/python/JuanDAW37.py create mode 100644 Roadmap/20 - PETICIONES HTTP/python/JuanDAW37.py diff --git a/Roadmap/19 - ENUMERACIONES/python/JuanDAW37.py b/Roadmap/19 - ENUMERACIONES/python/JuanDAW37.py new file mode 100644 index 0000000000..581de6d786 --- /dev/null +++ b/Roadmap/19 - ENUMERACIONES/python/JuanDAW37.py @@ -0,0 +1,86 @@ +"""* 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). + * + * 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. """ +from enum import Enum + +# Definición como clase +class DiasSem(Enum): + lunes = 1 + martes = 2 + miercoles = 3 + jueves = 4 + viernes = 5 + sabado = 6 + domingo = 7 + +# Otra forma de crearla +diasSem = Enum('diasSem', ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo']) + +# Crea una operación que muestre el nombre del día de la semana dependiendo del número entero utilizado (del 1 al 7). +num_Dia = 0 +while True: + num_Dia = int(input('Escribe un número de día de la semana 1 - 7-> ')) + if num_Dia >= 1 & num_Dia <= 7: + break +print(diasSem(num_Dia).name) + +#EXTRA +class Estado(Enum): + PENDIENTE = 1 + ENVIADO = 2 + ENTREGADO = 3 + CANCELADO = 4 + +class Pedido(): + def __init__(self, id_pedido, estado=Estado.PENDIENTE): + self.id_pedido = id_pedido + self.estado = estado + + def enviarPedido(self): + if self.estado == Estado.PENDIENTE: + self.estado = Estado.ENVIADO + else: + print(f"El pedido {self.id_pedido}, ya ha sido enviado o cancelado") + + def entregarPedido(self): + if self.estado == Estado.ENVIADO: + self.estado = Estado.ENTREGADO + else: + print(f"El pedido {self.id_pedido}, ya ha sido entregado o cancelado") + + def cancelarPedido(self): + if self.estado != Estado.ENTREGADO: + self.estado = Estado.CANCELADO + else: + print(f"El pedido {self.id_pedido}, no se puede cancelar, ya ha sido entregado") + + def verEstado(self): + print(f'El pedido número {self.id_pedido} está: {self.estado.name}') + +pedido1 = Pedido(1) +pedido1.verEstado() + +pedido1.enviarPedido() +pedido1.verEstado() + +pedido1.entregarPedido() +pedido1.verEstado() + +pedido1.cancelarPedido() +pedido1.verEstado() \ No newline at end of file diff --git a/Roadmap/20 - PETICIONES HTTP/python/JuanDAW37.py b/Roadmap/20 - PETICIONES HTTP/python/JuanDAW37.py new file mode 100644 index 0000000000..ca4b711f70 --- /dev/null +++ b/Roadmap/20 - PETICIONES HTTP/python/JuanDAW37.py @@ -0,0 +1,85 @@ +"""* 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. + * + * 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""" +import requests + +url = 'https://pokeapi.co' + +respuesta = requests.get(url) +if respuesta.status_code==200: + print(respuesta.text) +elif respuesta.status_code == 404: + print("La petición no es válida") +elif respuesta.status_code == 500: + print("Error interno del servidor") + +# EXTRA +while True: + nombre_pokemon = input("Introduce el nombre o el número del Pokémon, S/s para salir: ") + if nombre_pokemon == 'S' or nombre_pokemon == 's': + break + else: + # Datos generales del Pokémon + url_pokemon = f'https://pokeapi.co/api/v2/pokemon/{nombre_pokemon}' + respuesta = requests.get(url_pokemon) + if respuesta.status_code == 200: + datos = respuesta.json() + print(f'Id->{datos['id']}, Nombre-> {datos['name']}, peso-> {datos['weight']}, altura-> {datos['height']}') + print('Tipo(s):') + for type in datos['types']: + print(f'Tipo-> {type["type"]["name"]}') + + # Cadena de evoluciones + url_evoluciones = f'https://pokeapi.co/api/v2/pokemon-species/{nombre_pokemon}' + respuesta = requests.get(url_evoluciones) + if respuesta.status_code == 200: + url = respuesta.json()['evolution_chain']['url'] + respuesta = requests.get(url) + if respuesta.status_code == 200: + datos = respuesta.json() + print('EVOLUCIÓN DEL POKEMON') + + def evolucion(datos): + print(datos['species']['name']) + if 'evolves_to' in datos: + for evo in datos['evolves_to']: + evolucion(evo) + + evolucion(datos['chain']) + + elif respuesta.status_code == 400: + print("El nombre o el número del Pokémon no es válido") + elif respuesta.status_code == 500: + print("Error interno del servidor") + + # Juegos + respuesta = requests.get(url_pokemon) + if respuesta.status_code == 200: + datos = respuesta.json() + print('JUEGOS: ') + for juego in datos['game_indices']: + print(f'Número-> {juego['game_index']} - versión-> {juego["version"]["name"]} - URL-> {juego["version"]["url"]}') + elif respuesta.status_code == 400: + print("El nombre o el número del Pokémon no es válido") + elif respuesta.status_code == 500: + print("Error interno del servidor") + + elif respuesta.status_code == 400: + print("El nombre o el número del Pokémon no es válido") + elif respuesta.status_code == 500: + print("Error interno del servidor") + + elif respuesta.status_code == 400: + print("El nombre o el número del Pokémon no es válido") + elif respuesta.status_code == 500: + print("Error interno del servidor") \ No newline at end of file From 8bf939d0fc3becaa54582f38ac875b5692b98f73 Mon Sep 17 00:00:00 2001 From: mvidalb Date: Thu, 12 Sep 2024 10:34:51 +0200 Subject: [PATCH 161/539] #14 - Python --- Roadmap/14 - FECHAS/python/mvidalb.py | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Roadmap/14 - FECHAS/python/mvidalb.py diff --git a/Roadmap/14 - FECHAS/python/mvidalb.py b/Roadmap/14 - FECHAS/python/mvidalb.py new file mode 100644 index 0000000000..3bf9ad630a --- /dev/null +++ b/Roadmap/14 - FECHAS/python/mvidalb.py @@ -0,0 +1,30 @@ +from datetime import datetime + +''' +Ejercicio +''' +# Fecha (día, mes, año, hora, minuto, segundo) actual +current_date = datetime.now() +current_date_formatted = current_date.strftime("%d-%m-%Y %H:%M:%S") # datetime to str +print(current_date_formatted) +print(type(current_date_formatted)) + +birth_date = datetime.strptime("10-10-1993 04:02:03", "%d-%m-%Y %H:%M:%S") # str to datetime +print(birth_date) +print(type(birth_date)) + + +''' +Ejercicio extra +''' +# Día, mes y año +print("Día, mes y año: " + birth_date.strftime("%d-%m-%Y")) +# Hora, minuto y segundo +print("Hora, minuto y segundo: " + birth_date.strftime("%H:%M:%S")) +# Día de año +print("Día del año: " + str(birth_date.timetuple().tm_yday)) #timetuple() para acceder a distintos datos: año, mes, día, hora, etc. +# Día de la semana +print("Día de la semana: " + str(birth_date.timetuple().tm_wday) + ", " + str(birth_date.strftime("%A"))) +# Nombre del mes +print("Nombre del mes: " + str(birth_date.strftime("%B"))) + From e46de880a2476ef85377f502629cbdbddd0ad1e4 Mon Sep 17 00:00:00 2001 From: Jymtr Date: Thu, 12 Sep 2024 10:35:36 +0200 Subject: [PATCH 162/539] #21 - Callbacks --- Roadmap/21 - CALLBACKS/python/JuanDAW37.py | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Roadmap/21 - CALLBACKS/python/JuanDAW37.py diff --git a/Roadmap/21 - CALLBACKS/python/JuanDAW37.py b/Roadmap/21 - CALLBACKS/python/JuanDAW37.py new file mode 100644 index 0000000000..1b613a90fc --- /dev/null +++ b/Roadmap/21 - CALLBACKS/python/JuanDAW37.py @@ -0,0 +1,55 @@ +""" +* EJERCICIO: + * Explora el concepto de callback en tu lenguaje creando un ejemplo + * simple (a tu elección) que muestre su funcionamiento. + * + * 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. +""" +import random +import time +import threading # Se usa para trabajar con hilos + +def saludo(nombre:str): + print('Ejecutando el proceso de saludar') + print(f'Hola {nombre}!!') + +def saludar(nombre:str, callback): # Callback, función que recibe como parámetro otra función + print('Llamando al proceso de saludar') + callback(nombre) + +saludar('Luis',saludo) # Se llama a la función saludar, que recibe el callback + +# EXTRA +def procesarPedido(comida:str, confirmar_callback, listo_callback, entregado_callback): + def procesar(): # Creamos esta función recursiva para ejecutar el hilo. Ejecución multihilo + print(f'Comenzando el proceso de preparación de {comida}') + time.sleep(random.randint(1, 10)) # Paramos entre 1 y 10 segundos la ejecución + confirmar_callback(comida) + time.sleep(random.randint(1, 10)) + listo_callback(comida) + time.sleep(random.randint(1, 10)) + entregado_callback(comida) + threading.Thread(target=procesar).start() #Ejecutamos el hilo + +def confirmarPedido(comida:str): + print(f'Pedido {comida} confirmado!!!') + +def listoPedido(comida:str): + print(f'Pedido {comida} listo para enviar!!!') + +def entregadoPedido(comida:str): + print(f'Pedido {comida} ha sido entregado!!!') + +procesarPedido('Churrasco', confirmarPedido, listoPedido, entregadoPedido) +procesarPedido('Callos', confirmarPedido, listoPedido, entregadoPedido) +procesarPedido('Carne asada', confirmarPedido, listoPedido, entregadoPedido) +procesarPedido('Tortilla de patatas con cebolla', confirmarPedido, listoPedido, entregadoPedido) \ No newline at end of file From 8250fe672dfd72be945015b2bb53472f4c7d2e61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Gallego?= <75795616+kontroldev@users.noreply.github.com> Date: Thu, 12 Sep 2024 10:40:05 +0200 Subject: [PATCH 163/539] Rename #01-Javascript to Erysnell.js --- .../javascript/{#01-Javascript => Erysnell.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/{#01-Javascript => Erysnell.js} (100%) diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/#01-Javascript b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/Erysnell.js similarity index 100% rename from Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/#01-Javascript rename to Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/Erysnell.js From 4f2cd26f7370e34ecbd68e05fc28661c82b34049 Mon Sep 17 00:00:00 2001 From: mvidalb Date: Thu, 12 Sep 2024 11:43:30 +0200 Subject: [PATCH 164/539] #15 - Python --- .../15 - ASINCRON\303\215A/python/mvidab.py" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "Roadmap/15 - ASINCRON\303\215A/python/mvidab.py" diff --git "a/Roadmap/15 - ASINCRON\303\215A/python/mvidab.py" "b/Roadmap/15 - ASINCRON\303\215A/python/mvidab.py" new file mode 100644 index 0000000000..89771a67c7 --- /dev/null +++ "b/Roadmap/15 - ASINCRON\303\215A/python/mvidab.py" @@ -0,0 +1,29 @@ +from datetime import datetime +import time +import asyncio + +''' +Ejercicio +''' + +async def function(name : str, duration_sec: int): + + print(f"Función: {name}. Duración: {duration_sec} s. Inicio; {datetime.now()}") + await asyncio.sleep(duration_sec) + print(f"Función: {name}. Fin; {datetime.now()}") + + +asyncio.run(function("Ejercicio", 5)) + + +''' +Ejercicio extra +''' +#function("D", 1) +async def async_tasks(): + # Ejecución en paralelo + await asyncio.gather(function("C", 3), function("B", 2), function("A", 1)) + await function("D", 1) + +asyncio.run(async_tasks()) + From 0b3a341927910270474632952f59a9606f347a0d Mon Sep 17 00:00:00 2001 From: mvidalb Date: Thu, 12 Sep 2024 11:51:03 +0200 Subject: [PATCH 165/539] Small changes --- "Roadmap/15 - ASINCRON\303\215A/python/mvidab.py" | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git "a/Roadmap/15 - ASINCRON\303\215A/python/mvidab.py" "b/Roadmap/15 - ASINCRON\303\215A/python/mvidab.py" index 89771a67c7..673e935e66 100644 --- "a/Roadmap/15 - ASINCRON\303\215A/python/mvidab.py" +++ "b/Roadmap/15 - ASINCRON\303\215A/python/mvidab.py" @@ -21,8 +21,7 @@ async def function(name : str, duration_sec: int): ''' #function("D", 1) async def async_tasks(): - # Ejecución en paralelo - await asyncio.gather(function("C", 3), function("B", 2), function("A", 1)) + await asyncio.gather(function("C", 3), function("B", 2), function("A", 1)) # Ejecución en paralelo await function("D", 1) asyncio.run(async_tasks()) From e90f4d546d8e0a7493f1fd765c68a765649c75d9 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Thu, 12 Sep 2024 11:54:09 +0200 Subject: [PATCH 166/539] #01 java, #01 javascript, #01 php y #01 sql --- .../java/eulogioep.java | 115 +++++++++++++++++ .../javascript/eulogioep.js | 114 +++++++++++++++++ .../php/eulogioep.php | 118 ++++++++++++++++++ .../sql/eulogioep.sql | 113 +++++++++++++++++ 4 files changed, 460 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/eulogioep.java create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/eulogioep.js create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/php/eulogioep.php create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/sql/eulogioep.sql diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/eulogioep.java b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/eulogioep.java new file mode 100644 index 0000000000..282a7c4b87 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/eulogioep.java @@ -0,0 +1,115 @@ +public class eulogioep { + public static void main(String[] args) { + // Ejemplos de operadores en Java + + // 1. Operadores Aritméticos + System.out.println("--- Operadores Aritméticos ---"); + System.out.println("Suma: 5 + 3 = " + (5 + 3)); + System.out.println("Resta: 10 - 4 = " + (10 - 4)); + System.out.println("Multiplicación: 6 * 2 = " + (6 * 2)); + System.out.println("División: 15 / 3 = " + (15 / 3)); + System.out.println("Módulo: 17 % 5 = " + (17 % 5)); + System.out.println("Incremento: int a = 5; a++; a = " + (new Object() { int run() { int a = 5; a++; return a; }}.run())); + System.out.println("Decremento: int b = 8; b--; b = " + (new Object() { int run() { int b = 8; b--; return b; }}.run())); + + // 2. Operadores de Asignación + System.out.println("\n--- Operadores de Asignación ---"); + int x = 10; + System.out.println("Asignación simple: x = 10; " + x); + x += 5; + System.out.println("Suma y asignación: x += 5; " + x); + x *= 2; + System.out.println("Multiplicación y asignación: x *= 2; " + x); + + // 3. Operadores de Comparación + System.out.println("\n--- Operadores de Comparación ---"); + System.out.println("Igualdad: 5 == 5 es " + (5 == 5)); + System.out.println("Desigualdad: 5 != 6 es " + (5 != 6)); + System.out.println("Mayor que: 7 > 5 es " + (7 > 5)); + System.out.println("Menor o igual que: 10 <= 10 es " + (10 <= 10)); + + // 4. Operadores Lógicos + System.out.println("\n--- Operadores Lógicos ---"); + System.out.println("AND lógico: true && false es " + (true && false)); + System.out.println("OR lógico: true || false es " + (true || false)); + System.out.println("NOT lógico: !true es " + (!true)); + + // 5. Operadores de Tipo + System.out.println("\n--- Operadores de Tipo ---"); + System.out.println("instanceof: \"\" instanceof String es " + ("" instanceof String)); + + // 6. Operadores de Bits + System.out.println("\n--- Operadores de Bits ---"); + System.out.println("AND a nivel de bits: 5 & 3 = " + (5 & 3)); + System.out.println("OR a nivel de bits: 5 | 3 = " + (5 | 3)); + System.out.println("XOR a nivel de bits: 5 ^ 3 = " + (5 ^ 3)); + System.out.println("Desplazamiento a la izquierda: 5 << 1 = " + (5 << 1)); + + // Ejemplos de estructuras de control + + // 1. Estructura Condicional: if-else + System.out.println("\n--- Estructura Condicional: if-else ---"); + int numero = 15; + if (numero > 10) { + System.out.println("El número es mayor que 10"); + } else if (numero < 10) { + System.out.println("El número es menor que 10"); + } else { + System.out.println("El número es igual a 10"); + } + + // 2. Estructura Condicional: switch + System.out.println("\n--- Estructura Condicional: switch ---"); + String dia = "Lunes"; + switch (dia) { + case "Lunes": + System.out.println("Hoy es Lunes"); + break; + case "Martes": + System.out.println("Hoy es Martes"); + break; + default: + System.out.println("Es otro día de la semana"); + } + + // 3. Estructura Iterativa: for + System.out.println("\n--- Estructura Iterativa: for ---"); + for (int i = 0; i < 5; i++) { + System.out.println("Iteración for: " + i); + } + + // 4. Estructura Iterativa: while + System.out.println("\n--- Estructura Iterativa: while ---"); + int contador = 0; + while (contador < 3) { + System.out.println("Iteración while: " + contador); + contador++; + } + + // 5. Estructura Iterativa: do-while + System.out.println("\n--- Estructura Iterativa: do-while ---"); + int j = 0; + do { + System.out.println("Iteración do-while: " + j); + j++; + } while (j < 3); + + // 6. Manejo de Excepciones: try-catch + System.out.println("\n--- Manejo de Excepciones: try-catch ---"); + try { + throw new Exception("Este es un error de ejemplo"); + } catch (Exception e) { + System.out.println("Error capturado: " + e.getMessage()); + } finally { + System.out.println("Este bloque siempre se ejecuta"); + } + + // DIFICULTAD EXTRA + System.out.println("\n--- DIFICULTAD EXTRA ---"); + for (int num = 10; num <= 55; num++) { + if (num % 2 == 0 && num != 16 && num % 3 != 0) { + System.out.println(num); + } + } + } +} \ No newline at end of file diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/eulogioep.js b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/eulogioep.js new file mode 100644 index 0000000000..62604ac9c3 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/eulogioep.js @@ -0,0 +1,114 @@ +// Ejemplos de operadores en JavaScript + +// 1. Operadores Aritméticos +console.log("--- Operadores Aritméticos ---"); +console.log("Suma: 5 + 3 =", 5 + 3); +console.log("Resta: 10 - 4 =", 10 - 4); +console.log("Multiplicación: 6 * 2 =", 6 * 2); +console.log("División: 15 / 3 =", 15 / 3); +console.log("Módulo: 17 % 5 =", 17 % 5); +console.log("Exponenciación: 2 ** 3 =", 2 ** 3); +console.log("Incremento: let a = 5; a++; a =", (() => { let a = 5; a++; return a; })()); +console.log("Decremento: let b = 8; b--; b =", (() => { let b = 8; b--; return b; })()); + +// 2. Operadores de Asignación +console.log("\n--- Operadores de Asignación ---"); +let x = 10; +console.log("Asignación simple: x = 10;", x); +x += 5; +console.log("Suma y asignación: x += 5;", x); +x *= 2; +console.log("Multiplicación y asignación: x *= 2;", x); + +// 3. Operadores de Comparación +console.log("\n--- Operadores de Comparación ---"); +console.log("Igualdad: 5 == '5' es", 5 == '5'); +console.log("Igualdad estricta: 5 === '5' es", 5 === '5'); +console.log("Desigualdad: 5 != '6' es", 5 != '6'); +console.log("Mayor que: 7 > 5 es", 7 > 5); +console.log("Menor o igual que: 10 <= 10 es", 10 <= 10); + +// 4. Operadores Lógicos +console.log("\n--- Operadores Lógicos ---"); +console.log("AND lógico: true && false es", true && false); +console.log("OR lógico: true || false es", true || false); +console.log("NOT lógico: !true es", !true); + +// 5. Operadores de Tipo +console.log("\n--- Operadores de Tipo ---"); +console.log("typeof 42 es", typeof 42); +console.log("instanceof: [] instanceof Array es", [] instanceof Array); + +// 6. Operadores de Bits +console.log("\n--- Operadores de Bits ---"); +console.log("AND a nivel de bits: 5 & 3 =", 5 & 3); +console.log("OR a nivel de bits: 5 | 3 =", 5 | 3); +console.log("XOR a nivel de bits: 5 ^ 3 =", 5 ^ 3); +console.log("Desplazamiento a la izquierda: 5 << 1 =", 5 << 1); + +// Ejemplos de estructuras de control + +// 1. Estructura Condicional: if-else +console.log("\n--- Estructura Condicional: if-else ---"); +let numero = 15; +if (numero > 10) { + console.log("El número es mayor que 10"); +} else if (numero < 10) { + console.log("El número es menor que 10"); +} else { + console.log("El número es igual a 10"); +} + +// 2. Estructura Condicional: switch +console.log("\n--- Estructura Condicional: switch ---"); +let dia = "Lunes"; +switch (dia) { + case "Lunes": + console.log("Hoy es Lunes"); + break; + case "Martes": + console.log("Hoy es Martes"); + break; + default: + console.log("Es otro día de la semana"); +} + +// 3. Estructura Iterativa: for +console.log("\n--- Estructura Iterativa: for ---"); +for (let i = 0; i < 5; i++) { + console.log("Iteración for:", i); +} + +// 4. Estructura Iterativa: while +console.log("\n--- Estructura Iterativa: while ---"); +let contador = 0; +while (contador < 3) { + console.log("Iteración while:", contador); + contador++; +} + +// 5. Estructura Iterativa: do-while +console.log("\n--- Estructura Iterativa: do-while ---"); +let j = 0; +do { + console.log("Iteración do-while:", j); + j++; +} while (j < 3); + +// 6. Manejo de Excepciones: try-catch +console.log("\n--- Manejo de Excepciones: try-catch ---"); +try { + throw new Error("Este es un error de ejemplo"); +} catch (error) { + console.log("Error capturado:", error.message); +} finally { + console.log("Este bloque siempre se ejecuta"); +} + +// DIFICULTAD EXTRA +console.log("\n--- DIFICULTAD EXTRA ---"); +for (let num = 10; num <= 55; num++) { + if (num % 2 === 0 && num !== 16 && num % 3 !== 0) { + console.log(num); + } +} \ No newline at end of file diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/php/eulogioep.php b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/php/eulogioep.php new file mode 100644 index 0000000000..3d8df0c7bc --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/php/eulogioep.php @@ -0,0 +1,118 @@ + 5 es " . (7 > 5 ? 'true' : 'false') . "\n"; +echo "Menor o igual que: 10 <= 10 es " . (10 <= 10 ? 'true' : 'false') . "\n"; + +// 4. Operadores Lógicos +echo "\n--- Operadores Lógicos ---\n"; +echo "AND lógico: true && false es " . (true && false ? 'true' : 'false') . "\n"; +echo "OR lógico: true || false es " . (true || false ? 'true' : 'false') . "\n"; +echo "NOT lógico: !true es " . (!true ? 'true' : 'false') . "\n"; + +// 5. Operadores de Tipo +echo "\n--- Operadores de Tipo ---\n"; +echo "instanceof: new stdClass() instanceof stdClass es " . (new stdClass() instanceof stdClass ? 'true' : 'false') . "\n"; +echo "gettype(42) es " . gettype(42) . "\n"; + +// 6. Operadores de Bits +echo "\n--- Operadores de Bits ---\n"; +echo "AND a nivel de bits: 5 & 3 = " . (5 & 3) . "\n"; +echo "OR a nivel de bits: 5 | 3 = " . (5 | 3) . "\n"; +echo "XOR a nivel de bits: 5 ^ 3 = " . (5 ^ 3) . "\n"; +echo "Desplazamiento a la izquierda: 5 << 1 = " . (5 << 1) . "\n"; + +// Ejemplos de estructuras de control + +// 1. Estructura Condicional: if-else +echo "\n--- Estructura Condicional: if-else ---\n"; +$numero = 15; +if ($numero > 10) { + echo "El número es mayor que 10\n"; +} elseif ($numero < 10) { + echo "El número es menor que 10\n"; +} else { + echo "El número es igual a 10\n"; +} + +// 2. Estructura Condicional: switch +echo "\n--- Estructura Condicional: switch ---\n"; +$dia = "Lunes"; +switch ($dia) { + case "Lunes": + echo "Hoy es Lunes\n"; + break; + case "Martes": + echo "Hoy es Martes\n"; + break; + default: + echo "Es otro día de la semana\n"; +} + +// 3. Estructura Iterativa: for +echo "\n--- Estructura Iterativa: for ---\n"; +for ($i = 0; $i < 5; $i++) { + echo "Iteración for: $i\n"; +} + +// 4. Estructura Iterativa: while +echo "\n--- Estructura Iterativa: while ---\n"; +$contador = 0; +while ($contador < 3) { + echo "Iteración while: $contador\n"; + $contador++; +} + +// 5. Estructura Iterativa: do-while +echo "\n--- Estructura Iterativa: do-while ---\n"; +$j = 0; +do { + echo "Iteración do-while: $j\n"; + $j++; +} while ($j < 3); + +// 6. Manejo de Excepciones: try-catch +echo "\n--- Manejo de Excepciones: try-catch ---\n"; +try { + throw new Exception("Este es un error de ejemplo"); +} catch (Exception $e) { + echo "Error capturado: " . $e->getMessage() . "\n"; +} finally { + echo "Este bloque siempre se ejecuta\n"; +} + +// DIFICULTAD EXTRA +echo "\n--- DIFICULTAD EXTRA ---\n"; +for ($num = 10; $num <= 55; $num++) { + if ($num % 2 == 0 && $num != 16 && $num % 3 != 0) { + echo $num . "\n"; + } +} + +?> \ No newline at end of file diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/sql/eulogioep.sql b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/sql/eulogioep.sql new file mode 100644 index 0000000000..a3167679df --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/sql/eulogioep.sql @@ -0,0 +1,113 @@ +-- Creación de una tabla de ejemplo +CREATE TABLE empleados ( + id INT PRIMARY KEY, + nombre VARCHAR(50), + salario DECIMAL(10, 2), + departamento VARCHAR(50) +); + +-- Inserción de datos de ejemplo +INSERT INTO empleados (id, nombre, salario, departamento) VALUES +(1, 'Juan', 30000, 'IT'), +(2, 'María', 35000, 'Ventas'), +(3, 'Carlos', 28000, 'IT'), +(4, 'Ana', 40000, 'Recursos Humanos'), +(5, 'Pedro', 32000, 'Ventas'); + +-- 1. Operadores Aritméticos +SELECT + 'Suma' AS operacion, 5 + 3 AS resultado +UNION ALL +SELECT 'Resta', 10 - 4 +UNION ALL +SELECT 'Multiplicación', 6 * 2 +UNION ALL +SELECT 'División', 15.0 / 3 +UNION ALL +SELECT 'Módulo', 17 % 5; + +-- 2. Operadores de Comparación +SELECT + nombre, + salario, + CASE + WHEN salario > 30000 THEN 'Alto' + WHEN salario < 30000 THEN 'Bajo' + ELSE 'Medio' + END AS nivel_salario +FROM empleados; + +-- 3. Operadores Lógicos +SELECT * +FROM empleados +WHERE departamento = 'IT' AND salario > 25000; + +-- 4. Operadores de Conjunto +SELECT departamento FROM empleados +UNION +SELECT 'Marketing' AS departamento; + +-- 5. Funciones de Agregación (equivalente a operadores en otros lenguajes) +SELECT + AVG(salario) AS promedio_salario, + MAX(salario) AS salario_maximo, + MIN(salario) AS salario_minimo, + COUNT(*) AS total_empleados +FROM empleados; + +-- 6. Subconsultas (una forma de control de flujo en SQL) +SELECT nombre, salario +FROM empleados +WHERE salario > (SELECT AVG(salario) FROM empleados); + +-- 7. Joins (otra forma de combinar y controlar el flujo de datos) +SELECT e1.nombre AS empleado, e2.nombre AS companero +FROM empleados e1 +JOIN empleados e2 ON e1.departamento = e2.departamento AND e1.id < e2.id; + +-- 8. Estructuras de Control (usando procedimientos almacenados - la sintaxis puede variar según el DBMS) +DELIMITER // +CREATE PROCEDURE clasificar_salarios() +BEGIN + DECLARE done INT DEFAULT FALSE; + DECLARE emp_nombre VARCHAR(50); + DECLARE emp_salario DECIMAL(10, 2); + DECLARE cur CURSOR FOR SELECT nombre, salario FROM empleados; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + + OPEN cur; + + read_loop: LOOP + FETCH cur INTO emp_nombre, emp_salario; + IF done THEN + LEAVE read_loop; + END IF; + + IF emp_salario > 35000 THEN + SELECT CONCAT(emp_nombre, ' tiene un salario alto'); + ELSEIF emp_salario < 30000 THEN + SELECT CONCAT(emp_nombre, ' tiene un salario bajo'); + ELSE + SELECT CONCAT(emp_nombre, ' tiene un salario medio'); + END IF; + END LOOP; + + CLOSE cur; +END // +DELIMITER ; + +-- Llamada al procedimiento +CALL clasificar_salarios(); + +-- 9. DIFICULTAD EXTRA (adaptada a SQL) +-- Imprimimos números pares entre 10 y 55, excluyendo 16 y múltiplos de 3 +WITH RECURSIVE numeros(n) AS ( + SELECT 10 + UNION ALL + SELECT n + 1 FROM numeros WHERE n < 55 +) +SELECT n +FROM numeros +WHERE n % 2 = 0 + AND n != 16 + AND n % 3 != 0; \ No newline at end of file From e2f91880a7dcee4869dfe59475158763d0135e07 Mon Sep 17 00:00:00 2001 From: JoseGago27 Date: Thu, 12 Sep 2024 08:05:12 -0500 Subject: [PATCH 167/539] #00 - Python --- .../python/JoseGago27.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/JoseGago27.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/JoseGago27.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/JoseGago27.py new file mode 100644 index 0000000000..79db701010 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/JoseGago27.py @@ -0,0 +1,21 @@ +# www.python.org + +""" Se utiliza para +hacer comentarios +en varias lineas +""" + +''' Tambien es utilizado para comentar +en varias +lineas''' + +variable_1 = "esto es una variable" + +CONSTANT_1 = "No hay constantes en Python, pero al utilizar mayusculas le estamos diciendo a otros programadores que es una constante por convencion" + +tipo_int = 1 +tipo_float = 1.2 +tipo_boolean = True +tipo_string = "Esto es un string" + +print("!Hola, Python!") From 9e92fce6164b5d477f03815cbce70b1fbceed7ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?fabi=C3=A1n?= Date: Thu, 12 Sep 2024 11:00:35 -0300 Subject: [PATCH 168/539] Create whiterunjarl.cpp --- .../c++/whiterunjarl.cpp | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/whiterunjarl.cpp diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/whiterunjarl.cpp b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/whiterunjarl.cpp new file mode 100644 index 0000000000..0550370106 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/whiterunjarl.cpp @@ -0,0 +1,42 @@ +#include +using namespace std; + +// la web oficial es: https://isocpp.org/ + +/* otra forma de +comentar */ + +//comentario de una linea + + +int vida = 52; +string perros = "doce"; +double flotante = 22; +char letra = 'N'; +bool falsito = false; +string lenguaje = "C++"; + + +int numeroBalas = 25, armorTotal = 78, hpLeft = 62; +const int miConstante = 12; + + + + +int main() +{ + cout << "esto anda de 10" << ", Test si funciona" << endl; + cout << "La vida int es: " << vida << endl; + cout << "El string total de perros es: " << perros << endl; + cout << "el numero float es: " << flotante << endl; + cout << "La letra es: " << letra << endl; + cout << "El booleano es: " << falsito << endl; + cout << "Lo siguiente suma los valores de: numerosBalas, armorTotal y hpLeft \nestadisticas de un juego por ejemplo." << endl; + cout << "La suma de los ints es: " << numeroBalas + armorTotal + hpLeft << endl; + cout << "mi constante es:" << miConstante << endl; + cout << "Hola, mi lenguaje es: " << lenguaje << ", y estoy encantado de ir aprendiendo." << endl; + return 0; + +} + + From de5e09c919c210223d8718e18c712ced60c29968 Mon Sep 17 00:00:00 2001 From: JoseGago27 Date: Thu, 12 Sep 2024 09:26:09 -0500 Subject: [PATCH 169/539] #01 - Python --- .../python/JoseGago27.py | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/JoseGago27.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/JoseGago27.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/JoseGago27.py new file mode 100644 index 0000000000..3ad1f9ff51 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/JoseGago27.py @@ -0,0 +1,100 @@ +#Operadores + +# Operadores Aritmeticos + +print(f"Suma: 2 + 2 = {2 + 2}") +print(f"Resta: 4 - 2 = {4 - 2}") +print(f"Multiplicacion: 2 x 3 = {2 * 3}") +print(f"Division: 4 / 2 = {4 / 2}") +print(f"Media: 4 % 2 = {4 % 2}") +print(f"Exponencial: 2 ** 2 = {2 ** 2}") +print(f"Division entera: 4 // 2 = {4 // 2}") + +# Operadores de comparacion + +print(f"Igualdad: 10 == 3 es {10 == 3}") +print(f"Diferente: 10 != 3 es {10 != 3}") +print(f"Mayor que: 20 > 15 es {20 > 15}") +print(f"Menor que: 30 < 40 es {30 < 40}") +print(f"Mayor o igual que: 50 >= 50 es {50>=50}") +print(f"Menor o igual que: 80 <= 30 es {80 <= 30}") + +#Operadores logicos + +print(f"AND : 2 + 2 == 4 and 3 + 2 == 5 {2 + 2 == 4 and 3 + 2 == 5}") +print(f"OR : 2 + 2 == 100 or 3 + 2 == 5 {2 + 2 == 100 or 3 + 2 == 5}") +print(f"NOT : not 2 + 2 == 100 {not 2 + 2 == 100}") + +#Operadores de asignacion + +num1 = 10 #Asignacion +print(num1) +num1 += 1 #Suma y asignacion +print(num1) +num1 -= 2 #Resta y asignacion +print(num1) +num1 *= 2 #Multiplicacion y asignacion +print(num1) +num1 /= 2 #Division y asignacion +print(num1) + +#Operadores de identidad + +my_number = num1 +print(f"my_number is num1 es {my_number is num1}") +print(f"my_number is not num1 es {my_number is not num1}") + +#Operadores de pertenencia + +print(f"Esta la 'R' en 'Ramon'?, la respuesta es {'R' in 'Ramon'}") +print(f"No esta la 'R' en 'Ramon', la respuesta es {'R' not in 'Ramon'}") + +#Operadores de bit +a = 10 +b = 3 + +print(f"AND: 10 & 3 = {10 & 3}") +print(f"OR: 10 | 3 = {10 | 3}") +print(f"XOR: 10 ^ 3 = {10 ^ 3}") +print(f"NOT: ~10 = {~10}") +print(f"Desplazamiento a la derecha: 10 >> 2 = {10 >> 2}") +print(f"Desplazamiento a la izquierda: 10 << 2 = {10 << 2}") + +#Estructuras de control + +#Condicionales + +string1 = "otra prueba" + +if string1 == "prueba de condicion": + print("Si es igual") +elif string1 == "otra prueba": + print("no lo es") +else: + print("No es igual") + +#Iterativas + +for i in range(11): + print(i) + +i = 0 + +while i <= 10: + print(i) + i += 1 + +#Manejo de excepciones + +try: + print(10/0) +except: + print("Se ha producido un error") +finally: + print("Ha finalizado el manejo de excepciones") + +#Extra + +for number in range(10, 56): + if number % 2 == 0 and number != 16 and number % 3 ==0: + print(number) \ No newline at end of file From 7554f764495e81f66a536731a032ba4476b079e9 Mon Sep 17 00:00:00 2001 From: resbaloso <134111217+raynerpv2022@users.noreply.github.com> Date: Thu, 12 Sep 2024 16:58:31 +0200 Subject: [PATCH 170/539] #17 Python and Go --- Roadmap/17 - ITERACIONES/go/raynerpv2022.go | 50 +++++++++++++++++++ .../17 - ITERACIONES/python/raynerpv2022.py | 45 +++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 Roadmap/17 - ITERACIONES/go/raynerpv2022.go create mode 100644 Roadmap/17 - ITERACIONES/python/raynerpv2022.py diff --git a/Roadmap/17 - ITERACIONES/go/raynerpv2022.go b/Roadmap/17 - ITERACIONES/go/raynerpv2022.go new file mode 100644 index 0000000000..03245ac61c --- /dev/null +++ b/Roadmap/17 - ITERACIONES/go/raynerpv2022.go @@ -0,0 +1,50 @@ +package main + +import "fmt" + +/* +# * EJERCICIO: +# * Utilizando tu lenguaje, emplea 3 mecanismos diferentes para imprimir +# * números del 1 al 10 mediante iteración. +# * +# * DIFICULTAD EXTRA (opcional): +# * Escribe el mayor número de mecanismos que posea tu lenguaje +# * para iterar valores. ¿Eres capaz de utilizar 5? ¿Y 10? +# */ + +func main() { + + for i := 1; i < 11; i++ { + fmt.Println(i) + } + + // for like while + i := 1 + for i < 11 { + fmt.Println(i) + i++ + + } + + // EXTRA + // / Slice of cryptocurrency names + cryptocurrencies := []string{"Bitcoin", "Ethereum", "Tether", "Binance Coin", "Solana", "USD Coin", "XRP", "Dogecoin", "TRON", "Toncoin"} + + // Slice of corresponding values + prices := []float64{57732.00, 2341.66, 1.00, 543.83, 134.33, 1.00, 0.57, 0.10, 0.09, 5.40} + + for k, i := range cryptocurrencies { + fmt.Printf(" Index %v : Crypto: %v\n", k+1, i) + } + + // crear mapacon los dos slice + cryptoMap := map[string]float64{} + + for k, i := range cryptocurrencies { + cryptoMap[i] = prices[k] + } + + for k, v := range cryptoMap { + fmt.Printf(" Crypto %v : Value: %v\n", k, v) + } +} diff --git a/Roadmap/17 - ITERACIONES/python/raynerpv2022.py b/Roadmap/17 - ITERACIONES/python/raynerpv2022.py new file mode 100644 index 0000000000..adb42aa175 --- /dev/null +++ b/Roadmap/17 - ITERACIONES/python/raynerpv2022.py @@ -0,0 +1,45 @@ +# /* +# * EJERCICIO: +# * Utilizando tu lenguaje, emplea 3 mecanismos diferentes para imprimir +# * números del 1 al 10 mediante iteración. +# * +# * DIFICULTAD EXTRA (opcional): +# * Escribe el mayor número de mecanismos que posea tu lenguaje +# * para iterar valores. ¿Eres capaz de utilizar 5? ¿Y 10? +# */ + +for i in range(1,11): + print(i) + +i=1 + +while i <=10: + print(i) + i+=1 + +numeros = [x for x in range(1,11)] +print(numeros) + +def print_number(n): + print(n) + if n == 10: + return n + return print_number(n+1) + +print_number(1) + + +# EXTRA + +# Lista de países +paises = ['España', 'Francia', 'Alemania', 'Italia', 'Japón', 'México', 'Brasil', 'Argentina', 'Canadá', 'Australia'] + +# Lista de capitales +capitales = ['Madrid', 'París', 'Berlín', 'Roma', 'Tokio', 'Ciudad de México', 'Brasilia', 'Buenos Aires', 'Ottawa', 'Canberra'] + +for i,v in zip(paises, capitales): + print(f" Pais: {i} Capital: {v}") + +mapa_mundi = {i:v for i,v in zip(paises, capitales)} +for i,v in mapa_mundi.items(): + print(f" Pais: {i} Capital: {v}") \ No newline at end of file From ffdb5db92598fe463e8bec6f4f098a577658955c Mon Sep 17 00:00:00 2001 From: Jesus Antonio Escamilla Date: Thu, 12 Sep 2024 10:11:40 -0600 Subject: [PATCH 171/539] =?UTF-8?q?#36=20-=20JavaScript=20"Correcci=C3=B3n?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/JesusAntonioEEscamilla.js | 111 +++++++++--------- 1 file changed, 57 insertions(+), 54 deletions(-) diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/JesusAntonioEEscamilla.js b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/JesusAntonioEEscamilla.js index 6295cb82ae..a91a4c5a97 100644 --- a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/JesusAntonioEEscamilla.js +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/javascript/JesusAntonioEEscamilla.js @@ -23,97 +23,98 @@ const house = { // Preguntas y sus opciones con puntos asignados a cada casa const questions = [ { - question: '1-¿Que te apasiona más al programador?', + question: '1- ¿Qué tipo de proyectos te entusiasma más desarrollar?', options: { - a: {text: 'Crear interfaces de usuario', points: { Frontend: 2 }}, - b: {text: 'Desarrollador lógica de negocio', points: { Backend: 2 }}, - c: {text: 'Aplicaciones móviles', points: { Mobile: 2 }}, - d: {text: 'Trabajar con datos y descubrir patrones para mejorar decisiones', points: { Data: 2 }}, + a: { text: 'APIs y lógica de negocio en el servidor.', points: { Backend: 2 } }, + b: { text: 'Análisis de datos y modelos predictivos.', points: { Data: 2 } }, + c: { text: 'Aplicaciones móviles con experiencia de usuario fluida.', points: { Mobile: 2 } }, + d: { text: 'Aplicaciones web interactivas con diseño atractivo.', points: { Frontend: 2 } }, }, }, { - question: '2-¿Cuál es tu herramienta favorita?', + question: '2- ¿Cuál es tu entorno de trabajo favorito?', options: { - a: { text: 'React o Angular', points: { Frontend: 2 } }, - b: { text: 'Node.js', points: { Backend: 2 } }, - c: { text: 'Swift o Kotlin', points: { Mobile: 2 } }, - d: { text: 'Python y Pandas', points: { Data: 2 } }, + a: { text: 'Terminales y scripts de automatización.', points: { Backend: 2 } }, + b: { text: 'Emuladores y entornos móviles.', points: { Mobile: 2 } }, + c: { text: 'Entornos visuales y herramientas de diseño.', points: { Frontend: 2 } }, + d: { text: 'Herramientas de análisis de datos y estadísticas.', points: { Data: 2 } }, }, }, { - question: '3-¿Cuál de estas tareas te resulta más satisfactoria?', + question: '3- ¿Qué lenguaje de programación prefieres?', options: { - a: { text: 'Diseñar y estilizar componentes visuales', points: { Frontend: 2 } }, - b: { text: 'Crear APIs y gestionar bases de datos', points: { Backend: 2 } }, - c: { text: 'Optimizar aplicaciones para diferentes dispositivos móviles', points: { Mobile: 2 } }, - d: { text: 'Trabajar con grandes volúmenes de datos y modelos analíticos', points: { Data: 2 } }, + a: { text: 'Python o R para análisis de datos.', points: { Data: 2 } }, + b: { text: 'JavaScript o TypeScript para desarrollo web.', points: { Frontend: 2 } }, + c: { text: 'Python o Java para desarrollo backend.', points: { Backend: 2 } }, + d: { text: 'Kotlin o Swift para desarrollo móvil.', points: { Mobile: 2 } }, }, }, { - question: '4-¿Con cuál de estas tecnologías te sientes más cómodo trabajando?', + question: '4- ¿Qué aspecto disfrutas más al resolver problemas?', options: { - a: { text: 'HTML, CSS, JavaScript', points: { Frontend: 2 } }, - b: { text: 'Python, Java, SQL', points: { Backend: 2 } }, - c: { text: 'Flutter, React Native', points: { Mobile: 2 } }, - d: { text: 'R, SQL, Hadoop', points: { Data: 2 } }, + a: { text: 'Extraer y analizar patrones de grandes volúmenes de datos.', points: { Data: 2 } }, + b: { text: 'Crear interfaces intuitivas y responsivas.', points: { Frontend: 2 } }, + c: { text: 'Implementar funcionalidades en dispositivos móviles.', points: { Mobile: 2 } }, + d: { text: 'Optimizar la lógica y la arquitectura del servidor.', points: { Backend: 2 } }, }, }, { - question: '5-¿Qué herramienta o lenguaje prefieres usar para resolver problemas?', + question: '5- ¿Qué tecnología o framework te interesa aprender más?', options: { - a: { text: 'Herramientas y frameworks para diseño de interfaces (e.g., Figma, React)', points: { Frontend: 2 } }, - b: { text: 'Lenguajes y frameworks para backend (e.g., Node.js, Django, Spring Boot)', points: { Backend: 2 } }, - c: { text: 'Herramientas de desarrollo móvil (e.g., Xcode, Android Studio)', points: { Mobile: 2 } }, - d: { text: 'Herramientas de análisis de dato (e.g., Jupyter, Tableau, Power BI)', points: { Data: 2 } }, + a: { text: 'Node.js, Django, o Spring.', points: { Backend: 2 } }, + b: { text: 'TensorFlow, Pandas, o Spark.', points: { Data: 2 } }, + c: { text: 'React, Angular, o Vue.', points: { Frontend: 2 } }, + d: { text: 'React Native, Flutter, o SwiftUI.', points: { Mobile: 2 } }, }, }, { - question: '6-¿Cuál de estas actividades disfrutas más?', + question: '6- ¿Cómo prefieres estructurar tu código?', options: { - a: { text: 'Crear experiencias de usuario interactivas y responsivas', points: { Frontend: 2 } }, - b: { text: 'Resolver problemas complejos de lógica y optimización de procesos', points: { Backend: 2 } }, - c: { text: 'Construir y probar aplicaciones que funcionen en múltiples dispositivos móviles', points: { Mobile: 2 } }, - d: { text: 'Analizar y visualizar datos para extraer información relevante', points: { Data: 2 } }, + a: { text: 'Controladores de vistas y gestores de estado.', points: { Mobile: 2 } }, + b: { text: 'Scripts y pipelines de datos organizados.', points: { Data: 2 } }, + c: { text: 'Servicios y controladores bien definidos.', points: { Backend: 2 } }, + d: { text: 'Componentes modulares y reutilizables.', points: { Frontend: 2 } }, }, }, { - question: '7-¿Qué prefieres en un proyecto?', + question: '7- ¿Qué herramienta te parece más útil en tu desarrollo diario?', options: { - a: { text: 'Trabajar en el diseño y la interacción con los usuarios', points: { Frontend: 2 } }, - b: { text: 'Enfocarte en la lógica de negocio y la eficiencia del sistema', points: { Backend: 2 } }, - c: { text: 'Desarrollar para plataformas móviles y trabajar con sus características únicas', points: { Mobile: 2 } }, - d: { text: 'Investigar y analizar datos para proporcionar insights', points: { Data: 2 } }, + a: { text: 'Simuladores y herramientas de debugging móvil.', points: { Mobile: 2 } }, + b: { text: 'Inspectores de navegador y herramientas de diseño.', points: { Frontend: 2 } }, + c: { text: 'Postman y bases de datos.', points: { Backend: 2 } }, + d: { text: 'Jupyter Notebooks y herramientas de visualización de datos.', points: { Data: 2 } }, }, }, { - question: '8-¿Cuál es tu tipo de proyecto ideal?', + question: '8- ¿Qué te motiva más en tu carrera de desarrollo?', options: { - a: { text: 'Un sitio web interactivo y visualmente atractivo', points: { Frontend: 2 } }, - b: { text: 'Un sistema robusto que gestione datos y lógica de negocio', points: { Backend: 2 } }, - c: { text: 'Una aplicación móvil con una experiencia de usuario fluida', points: { Mobile: 2 } }, - d: { text: 'Un dashboard o modelo predictivo que ofrezca información clave', points: { Data: 2 } }, + a: { text: 'Llevar nuevas ideas al mercado rápidamente en dispositivos móviles.', points: { Mobile: 2 } }, + b: { text: 'Asegurar la estabilidad y seguridad del sistema.', points: { Backend: 2 } }, + c: { text: 'Descubrir conocimientos ocultos en los datos.', points: { Data: 2 } }, + d: { text: 'Crear interfaces que los usuarios amen usar.', points: { Frontend: 2 } }, }, }, { - question: '9-¿Qué te da más satisfacción al finalizar un proyecto?', + question: '9- ¿Qué consideras más importante en un proyecto?', options: { - a: { text: 'Ver a los usuarios interactuar de manera positiva con tu interfaz', points: { Frontend: 2 } }, - b: { text: 'Saber que tu código maneja de manera eficiente grandes volúmenes de datos', points: { Backend: 2 } }, - c: { text: 'Ver tu aplicación móvil en funcionamiento en diferentes dispositivos', points: { Mobile: 2 } }, - d: { text: 'Proveer información valiosa basada en datos a la empresa', points: { Data: 2 } }, + a: { text: 'La portabilidad y rendimiento en diferentes dispositivos.', points: { Mobile: 2 } }, + b: { text: 'La eficiencia y escalabilidad del backend.', points: { Backend: 2 } }, + c: { text: 'La precisión y utilidad de los insights de datos.', points: { Data: 2 } }, + d: { text: 'La experiencia y estética del usuario.', points: { Frontend: 2 } }, }, }, { - question: '10-¿Qué consideras un reto divertido en el desarrollo?', + question: '10- ¿En qué área te gustaría especializarte más?', options: { - a: { text: 'Mejorar la usabilidad y la estética de una aplicación', points: { Frontend: 2 } }, - b: { text: 'Optimizar la seguridad y el rendimiento de un backend', points: { Backend: 2 } }, - c: { text: 'Resolver problemas de compatibilidad entre diferentes plataformas móviles', points: { Mobile: 2 } }, - d: { text: 'Desarrollar modelos predictivos y manejar bases de datos complejas', points: { Data: 2 } }, + a: { text: 'Desarrollo de aplicaciones móviles innovadoras.', points: { Mobile: 2 } }, + b: { text: 'Ciencia de datos y aprendizaje automático.', points: { Data: 2 } }, + c: { text: 'Desarrollo de interfaces de usuario y experiencia.', points: { Frontend: 2 } }, + d: { text: 'Arquitectura de software y servicios web.', points: { Backend: 2 } }, }, }, ]; + let currentQuestion = 0; let studentName = ''; @@ -131,10 +132,10 @@ function askQuestion() { const option = q.options[answer.toLowerCase()]; if (option) { - Object.keys(option.points).forEach((house) => { - house[house] += option.points[house]; + Object.keys(option.points).forEach((houseName) => { + house[houseName] += option.points[houseName]; }); - + currentQuestion++; askQuestion(); } else { @@ -164,7 +165,9 @@ function sortStudent() { } // Inicio del programa -rl.question('¿Cuál es tu nombre? ', (name) => { +console.log("\n¡Bienvenido a Hogwarts, la escuela de programación para magos y brujas del código!") +console.log("El sombrero seleccionador decidirá cuál es tu casa como programador.") +rl.question('\n¿Cuál es tu nombre? ', (name) => { studentName = name; askQuestion(); }); \ No newline at end of file From c3baf0005f9e1fb53a89d18c4b7f36136c99dfe8 Mon Sep 17 00:00:00 2001 From: Yampi <51342050+cdryampi@users.noreply.github.com> Date: Thu, 12 Sep 2024 19:25:37 +0200 Subject: [PATCH 172/539] Create Yampi --- .../37 - OASIS VS LINKIN PARK/python/Yampi | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/Yampi diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/Yampi b/Roadmap/37 - OASIS VS LINKIN PARK/python/Yampi new file mode 100644 index 0000000000..dff68ea335 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/Yampi @@ -0,0 +1,168 @@ +# /* +# * EJERCICIO: +# * ¡Dos de las bandas más grandes de la historia están de vuelta! +# * Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? +# * Desarrolla un programa que se conecte al API de Spotify y los compare. +# * Requisitos: +# * 1. Crea una cuenta de desarrollo en https://developer.spotify.com. +# * 2. Conéctate al API utilizando tu lenguaje de programación. +# * 3. Recupera datos de los endpoint que tú quieras. +# * Acciones: +# * 1. Accede a las estadísticas de las dos bandas. +# * Por ejemplo: número total de seguidores, escuchas mensuales, +# * canción con más reproducciones... +# * 2. Compara los resultados de, por lo menos, 3 endpoint. +# * 3. Muestra todos los resultados por consola para notificar al usuario. +# * 4. Desarrolla un criterio para seleccionar qué banda es más popular. +# */ + + +import base64 +import urllib.parse +import aiohttp +import asyncio + +class ConnSpotify(): + + __CLIENT_ID = ":)" + __CLIENT_SECRET = ":(" + + __ACCESS_TOKEN = None + __HEADERS = None + __URL_CONN_API = "https://api.spotify.com" + __URL_CONN_TOKEN = "https://accounts.spotify.com/api/token" + + __ENDPOINTS = { + "artist": "/v1/artists/", + "top_tracks": "/v1/artists/{id}/top-tracks", + "albums": "/v1/artists/{id}/albums" + } + + __ARTIST = { + "linkinpark": "6XyY86QOPPrYVGvF9ch6wz", + "oasis": "2DaxqgrOhkeH0fpeiQq2f4" + } + + async def __get_access_token(self, session): + credentials = f"{self.__CLIENT_ID}:{self.__CLIENT_SECRET}" + encoded_credentials = base64.b64encode(credentials.encode("utf-8")).decode("utf-8") + + headers = { + 'Authorization': f'Basic {encoded_credentials}', + 'Content-Type': 'application/x-www-form-urlencoded' + } + + body = urllib.parse.urlencode({ + 'grant_type': 'client_credentials' + }) + + async with session.post(self.__URL_CONN_TOKEN, data=body, headers=headers) as response: + if response.status == 200: + token_info = await response.json() + self.__ACCESS_TOKEN = token_info["access_token"] + self.__HEADERS = { + 'Authorization': f'Bearer {self.__ACCESS_TOKEN}', + 'Content-Type': 'application/json' + } + else: + print(f'Error: {response.status}') + + async def get_headers(self, session): + if self.__HEADERS is None: + await self.__get_access_token(session) + return self.__HEADERS + + async def api_call(self, session): + raw_data = [] + headers = await self.get_headers(session) + + for artist_name, artist_id in self.__ARTIST.items(): + url = f"{self.__URL_CONN_API}{self.__ENDPOINTS['artist']}{artist_id}" + async with session.get(url, headers=headers) as response: + if response.status == 200: + data = await response.json() + raw_data.append(data) + else: + print(f'Error fetching {artist_name}: {response.status}') + return raw_data + + async def get_top_track(self, session, artist_id): + url = self.__URL_CONN_API+f"{self.__ENDPOINTS['top_tracks']}".format(id = artist_id)+"?market=US" + headers = await self.get_headers(session) + async with session.get(url, headers=headers) as response: + if response.status == 200: + return await response.json() + else: + print(f"Ha habido un problema a la hora de recuperar los datos... {response.status}") + return None + + async def get_albums(self, session, artist_id): + url = self.__URL_CONN_API+f"{self.__ENDPOINTS['albums']}".format(id = artist_id)+"?market=US" + headers = await self.get_headers(session) + async with session.get(url, headers=headers) as response: + if response.status == 200: + return await response.json() + else: + print(f"Ha habido un problema a la hora de recuperar los datos... {response.status}") + return None + + async def comparar_bandas(self, session): + bandas = await self.api_call(session) + + banda_1, banda_2 = bandas[:2] + banda_1_point, banda_2_point = 0,0 + band_data = { + "top_tracks": [], + "albums": [] + } + for banda in bandas: + uri = banda['uri'].split(":")[-1] + + band_data["top_tracks"].append( + await self.get_top_track(session=session, artist_id= uri) + ) + band_data["albums"].append( + await self.get_top_track(session=session, artist_id= uri) + ) + + if "tracks" in band_data['top_tracks'][0] and "tracks" in band_data['top_tracks'][1]: + banda_1_point += len(band_data['top_tracks'][0]["tracks"]) > len(band_data['top_tracks'][1]["tracks"]) + banda_2_point += len(band_data['top_tracks'][0]["tracks"]) < len(band_data['top_tracks'][1]["tracks"]) + + + pop_albums_1 = sum([album['popularity'] for album in band_data['albums'][0]["tracks"]])/ len(band_data['albums'][0]["tracks"]) + + pop_albums_2 = sum([album['popularity'] for album in band_data['albums'][1]["tracks"]])/ len(band_data['albums'][1]["tracks"]) + + if pop_albums_1 != pop_albums_2: + + banda_1_point += pop_albums_1 > pop_albums_2 + banda_2_point += pop_albums_1 < pop_albums_2 + + + + banda_1_point += banda_1['popularity'] > banda_2['popularity'] + banda_2_point += banda_1['popularity'] < banda_2['popularity'] + + + banda_1_point += banda_1['followers']['total'] > banda_2['followers']['total'] + banda_2_point += banda_1['followers']['total'] < banda_2['followers']['total'] + + if len(banda_1['genres']) != len(banda_2['genres']): + banda_1_point += len(banda_1['genres']) > len(banda_2['genres']) + banda_2_point += len(banda_1['genres']) < len(banda_2['genres']) + + if banda_1_point != banda_2_point: + ganador = banda_1 if banda_1_point > banda_2_point else banda_2 + print(f"El ganador es: {ganador['name']}") + else: + print("Ha habido un empate técnico.") + +async def main(): + api = ConnSpotify() + + async with aiohttp.ClientSession() as session: + await api.comparar_bandas(session) + +if __name__ == '__main__': + asyncio.get_event_loop().run_until_complete(main()) From 59fd17bf11c64025288c0c03c92be5c51da340c9 Mon Sep 17 00:00:00 2001 From: Niko Zen Date: Thu, 12 Sep 2024 13:27:14 -0430 Subject: [PATCH 173/539] #02 - javascript --- .../javascript/duendeintemporal.js | 418 ++++++++++++++++++ 1 file changed, 418 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/javascript/duendeintemporal.js diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/javascript/duendeintemporal.js b/Roadmap/02 - FUNCIONES Y ALCANCE/javascript/duendeintemporal.js new file mode 100644 index 0000000000..36ddc7b588 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/javascript/duendeintemporal.js @@ -0,0 +1,418 @@ +/* { RETOS DE PROGRAMACIÓN } #2 FUNCIONES Y ALCANCE */ +// I use the book "Eloquent JavaScript: A Modern Introduction to Programming" by Marijn Haverbeke for concept reference. +// I also use the book "Secrets of the JavaScript Ninja" by John Resig, Bear Bibeault, and Josip Maras. +// I refer to "JavaScript Notes for Professionals" from the people of Stack Overflow. https://goalkicker.com/JavaScriptBook +// Additionally, I use GPT as a reference and sometimes to correct or generate proper comments. + + +//short for console.log +let log = console.log.bind(console); + +/* FUNCTIONS */ +/* Functions are the bread and butter of JavaScript programming. The concept of wrapping a piece of program in a value has many uses. It gives us a way to structure larger programs, to reduce repetition, to associate names with subprograms, and to isolate these subprograms from each other. + +In JavaScript, the fundamental unit of execution is a function. We use them all the +time, to calculate something, to perform side effects such as changing the UI, to +achieve code reuse, or to make our code easier to understand. +*/ + + +//Functions as first-class objects +/*Functions in JavaScript possess all the capabilities of objects and are thus treated like any other object in the language. We say that functions are first-class objects, which can also be */ + +// Created via literals. +function addPad(number, width, pad = 0){ + let result = String(number); + while (result.length < width) { + result = `${pad}` + result; + } + return result; +} + + +log(addPad(4, 3, '#'))// ##4 +log(addPad(56, 3, '$'))// $56 +log(addPad(7, 3))// 007 + +//note: See that we can pass default arguments as in the last example + +// Assigned to variables, array entries, and properties of other objects +let square = function(n){ + return n * n; +}; + +let funcArray = []; +funcArray.push(square(8));// Adds a new function to an array +log(funcArray)// [ 64 ] + +let data ={ book_name:'Hackbook', } +data.some_method = function(){ console.log(`${data.book_name} is now avaible in z-lib.org, so hack the world.`) };// Assigns a new function as a property of another object +data.some_method()// Hackbook is now avaible in z-lib.org, so hack the world. + + +//A newly created object passed as an argument to a function + +//Passed as arguments to other functions (callbacks) +function call(doSomething){ + doSomething(); +} + +call(()=> log('Hi roadmap coders!'))// Hi roadmap coders! + +//Returned as values from functions +function returnFunc(){ + return function(str){ console.log(str) } +} + +const greeting = returnFunc(); +greeting('Hi there!')// Hi there! + + + +//They can possess properties that can be dynamically created and assigned as in objects: + +let callMom = function(){ log('Mommmmm!') }; + +callMom()// Mommmmm! +callMom.name = "Mom"; +log(callMom.name)// Logs: callMom cause "name" is a inherit property of the function constructor, and is not writeble + +callMom.something = 'something'; +log(callMom.something)// something + +log(callMom)/* Logs: +function callMom() + ​arguments: null + caller: null + length: 0 + name: "callMom" + prototype: Object { … } + something: "something" + : function () */ + + +/* Whatever we can do with objects, we can do with functions as well. Functions are objects, just with an additional, special capability of being invokable: Functions can be called or invoked in order to perform an action. */ + +/*Constructor functions are functions designed to construct a new object. Within a constructor function, the keyword this refers to a newly created object which values can be assigned to. Constructor functions "return" his new object automatically. */ + +function Cat(name, color, sound){ + this.name = name; + this.color = color; + this.sound = sound; +} + +//Constructor functions are invoked using the new keyword: +let psicoCat = new Cat("Psicotrogato", "Black & White", "Meaw"); +log(psicoCat.color)// Black & White +psicoCat.sound = "Hey girl what's your name, what's your name?... I forgot"; + +/*Constructor functions also have a prototype property which points to an object whose properties are automatically inherited by all objects created with that constructor: */ + +Cat.prototype.speak = function(){ + log(this.sound); +} + +psicoCat.speak(); // "Hey girl what's your name, what's your name?.. I forgot" + + +//Closure +/* The ability to treat functions as values, combined with the fact that local bindings are re-created every time a function is called, brings up interesting possibilities */ + +const incrementer = (function(n){ + let local = n; + return () => local++; +})(0); // Immediately invoked with an initial value of 0 + +console.log('incrementer value is:', incrementer()); // incrementer value is: 0 +console.log('incrementer value is:', incrementer()); // incrementer value is: 1 +console.log('incrementer value is:', incrementer()); // incrementer value is: 2 + +//in the previus example we use an IIFE(Inmediatly Invoked Function Expression) to create a clousure, but we can achive the same with regular functions + + function square_v2(n){ + return ()=> n * n; +} + +const pow64 = square_v2(64); +const pow78 = square_v2(78); + +log(pow64())// 4096 +log(pow78())// 6084 + + +// Arrow Functions ()=>{ } +const factor = (n)=>{ + if(n == 1) return 1; + return n * factor(n - 1); +} + +log(factor(8))// 40320 + +//Note: here factor is a recursive function too. It means that it's a function that calls it self. + +//Arrow function allow us to abreviate the expresion when they have only one parameter or a single expression + +const square_v3 = n => n * n; +log(square_v3(4))// 16 +//note we omit the curly braces, the return and also the parentesis + + +//Note 2: is important to have in mind that arrows function doesn't have their own 'this' context + +const obj = { + value: 'Rutadeprogramacion Exercice #2.', + + advertisement: function(){ + log(this.value); // Rutadeprogramacion Exercice #2 + setTimeout(() => { + alert(`${this.value} Please open the Browser Developer Tools.`); + }, 1000); + } +}; + +obj.advertisement()// Alert: Rutadeprogramacion Exercice #2. Please open the Browser Developer Tools. and Logs in console: Rutadeprogramacion Exercice #2. + +/* Note: Because arrows function doesn't have `this`, the 'this' points to obj. If we had used a regular function instead of the arrow function inside the setTimeout, it would have alert undefined or throw a reference error. */ + +//So we have +/* Function Declarations: A function declaration defines a named function. It is hoisted, meaning it can be called before it is defined in the code. */ + +function substract(n, m){ + return n - m; +} + +log(substract(8, 4))// 4 + +/* Function Expressions: A function expression defines a function as part of a larger expression. It can be anonymous or named and is not hoisted. */ + +const multiply = function(n, m){ + return n * m; +}; + +log(multiply(8, 9))// 72 + +const add = function add(a, b){ + return a + b; +}// can share the name for the bindding word & the named function + +log(add(3, 3))// 6 + +/* Arrow Functions: Introduced in ES6, arrow functions provide a more concise syntax for writing functions. They do not have their own this, which makes them useful in certain contexts. */ + + +const divide = (n, m) => n / m ; + +log(divide(543, 56))// 9.696428571428571 + +/* Anonymous Functions: These are functions that do not have a name. They are often used in callbacks or as arguments to other functions. */ + +window.addEventListener('load', function(){ + const body = document.querySelector('body'); + const title = document.createElement('h1'); + + body.style.setProperty('background', '#000'); + body.style.setProperty('text-align', 'center'); + + title.textContent = 'Retosparaprogramadores #2.'; + title.style.setProperty('font-size', '3.5vmax') + title.style.setProperty('color', '#fff'); + title.style.setProperty('line-height', '100vh'); + + body.appendChild(title); + + log( 'This is an anonymous function')// this will be logged at the end cause the nature of window event +}); + +let sayHi = function(){ + console.log('Hi'); +} + +sayHi()// Hi + +/* Named functions differ from the anonymous functions in multiple scenarios: +When you are debugging, the name of the function will appear in the error/stack trace +Named functions are hoisted while anonymous functions are not +Named functions and anonymous functions behave differently when handling recursion +Depending on ECMAScript version, named and anonymous functions may treat the function name property +differently */ + +/* Immediately Invoked Function Expressions (IIFE): An IIFE is a function that is executed immediately after it is defined. It is often used to create a new scope and avoid scope pollution. */ + +let iife = (function(){ + console.log("This another example of IIFE functions");//this will be logged +})(); + + +/* Higher-Order Functions: These are functions that take other functions as arguments or return functions as their result. They are commonly used in functional programming. */ + +//in example if we have sum +function sum(numbers){ + let total = 0; + for(let i = 0; i < numbers.length; i++ ){ + total += numbers[i]; + } + return total; +} + +//and range +function range(n, m){ + let result = []; + for(let i = n; i <= m; i++){ + result.push(i); + } + return result; +} + +//them we can just +log(sum(range(1, 100)))// 5050 + +/* Generator Functions: Introduced in ES6, generator functions can pause and resume execution. They are defined using the function * syntax and use the yield keyword. */ + +function *IdGenerator() { + let id = 0; + while(true){ + yield addPad(++id, 5) ; + } +} + +const idIterator = IdGenerator(); + +log(idIterator.next().value)// 00001 +log(idIterator.next().value)// 00002 + + +/* Async Functions: Async functions are a way to work with asynchronous code. They return a promise and can use the await keyword to pause execution until a promise is resolved. */ + +//Note: you will need a extention to allow CORS(Cross Origin Resource Sharing) to avoid the console warning + +const getLoremIpsum = numberOfParagraphs => { + return fetch(`https://baconipsum.com/api/?type=meat-and-filler¶s=${numberOfParagraphs}`) + .then(response => response.json()) + .then(loremIpsumTextArray => { + return loremIpsumTextArray; + }) + .catch(error => { + showError(error); + }); +}; + +const showError = error => console.log(error); + + + + async function logParagraphs() { + const result = await getLoremIpsum(2); + console.log(result); + } + +logParagraphs(); // Logs: Array [ "T-bone ham hock enim, ipsum frankfurter tri-tip consequat. Reprehenderit ut occaecat elit in, qui ea flank chuck porchetta chicken bacon ham hock kielbasa hamburger. Pork chop commodo strip steak mollit filet mignon andouille velit tempor fatback ea. Capicola laboris beef ribs in chuck, et jerky swine exercitation ribeye ullamco in turkey. Turkey dolor ball tip proident pariatur corned beef, chislic jerky leberkas fugiat doner. Chuck laboris pork do, ut esse sed in drumstick deserunt ribeye voluptate tail reprehenderit. Beef aliquip sint fugiat pork belly pig reprehenderit nisi corned beef chicken dolore ad proident non.", "Spare ribs officia irure, est brisket ham prosciutto. Do proident consectetur, capicola ad bacon non pancetta magna aute. Pork loin ribeye chuck doner, duis beef ribs ut ham hock adipisicing sed turkey boudin buffalo rump pancetta. Deserunt ham pork chop short loin tail." ] or something similar + +// Functions that takes multiple arguments / the Rest parameter ... +// Some times we don't know how many arguments we will recive, we can use the rest parameter in those cases + +const total = (...numbers)=> { + return numbers.reduce((total, num) => total + num, 0); +} + +log('Total: ',total(10, 256, 345, 465, 87, 432))// Total: 1595 + +/* CLOUSURES AND SCOPES */ + +// Scope: A scope refers to the visibility of identifiers in certain parts of a program. +/* Closure: A closure allows a function to access and manipulate variables that are external to that +function. Closures allow a function to access all the variables, as well as other functions, that are in scope when the function itself is defined. */ +/* Hoisting is a mechanism which moves all variable and function declarations to the top of their scope. However, variable assignments still happen where they originally were. */ + +/* When using an anonymous function, the function can only be called after the line of declaration, whereas a named function can be called before declaration. Consider */ + +// This will works cause doSoemthing is a Named Function and JavaScript hoists function declarations to the top of their containing scope. +log(doSomething()); + +function doSomething(){ + console.log("I'm here coding, and I'm amazed at all we can learn by following this roadmap.") +} + +// This will throw an error because an anonymous function cannot be called before its declaration. +// log(doAnotherthing()) + +let anotherthing = function(){ + console.log('never log this...') +} + +let friend = 'Asterix'; + +function showClosure(){ + log(friend)// Asterix in scope + let anotherFriend = 'Obelix'; + function innerClosure(){ + let anotherOne = 'Idefix' + log(anotherFriend)// Obelix in scope + log(friend)// Asterix in scope + log(anotherOne)// Idefix in scope + } + //log(anotherOne)// throw an Error: anotherOne is not defined, is not in scope + innerClosure(); +} + +showClosure(); +//log(anotherFriend)// Throw an Error: anotherFriend is not defined, is not in scope + + +/* Closures lets us do some interesting things, such as defining "private" variables that are visible only to a specific function or set of functions. A contrived (but popular) example: */ + + +const makeCounter = ()=> { + var counter = 0; + return { + value: function() { + return counter; + }, + increment: function() { + counter++; + }, + restart: function() { + counter = 0; + } + }; +} + +let counter1 = makeCounter(); +let counter2 = makeCounter(); +counter2.increment(); +counter2.increment(); +log(counter1.value())// 0 +log(counter2.value())// 2 +counter2.restart(); +log(counter2.value)// 0 + +// Note: When makeCounter() is called, a snapshot of the context of that function is saved. +// Note2: Closures are also used to prevent global namespace pollution, often through the use of immediately-invoked function expressions. + +// Apply and Call +function speak() { + let sentences = Array.prototype.slice.call(arguments); + let tell = ''; + sentences.forEach(word => tell += word + ' ' ); + console.log(this.name+": "+ tell); +} + +let person = { name: "Niko" }; + speak.apply(person, ["I", "will", "go", "through", "this", "roadmap", "until", "the", "end" ]); // I will go throght this roadmap to the end + speak.call(person, "But", "first", "I", "need", "some", "exercice"); // But first I need some exercice + +/* Notice that apply allows you to pass an Array or the arguments object (array-like) as the list of arguments, whereas, call needs you to pass each argument separately. */ + +/* As we see in the previus obj.adverstiment() example in line 155: When using arrow functions this takes the value from the enclosing execution context's this (that is, this in arrow functions has lexical scope rather than the usual dynamic scope). In global code (code that doesn't belong to any +function) it would be the global object. And it keeps that way, even if you invoke the function declared with the arrow notation from any of the others methods here described. */ + +/* The bind method of every function allows you to create new version of that function with the context strictly bound to a specific object. It is especially useful to force a function to be called as a method of an object. */ + +let person2 = { name: 'Anna' }; + +function sayHiLady() { + log(`Hi ${this.name}`); +} + +hiAnna = sayHiLady.bind(person2); +hiAnna()// Hi Anna + From 5a1c9730827a6735bd6b5d2830f95c75847a0a1f Mon Sep 17 00:00:00 2001 From: Niko Zen Date: Thu, 12 Sep 2024 13:36:42 -0430 Subject: [PATCH 174/539] #01 - javascript --- .../javascript/duendeintemporal.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/duendeintemporal.js b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/duendeintemporal.js index 5e4194c903..3bd8990c7f 100644 --- a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/duendeintemporal.js +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/duendeintemporal.js @@ -585,7 +585,7 @@ for(let [key, val] of Object.entries(user2)){ outer_loop:for(let i = 0; i <= 10; i++){ inner_loop:for(let y = 0; y < 5; y++){ if((i==2) && (y == 4)) break outer_loop; - if(y==3) break inner_loop; + if(y==4) break inner_loop; log('Is there anybody outthere?') } } From a2b8e2d589ff38a6ab68e29e251a800240f8802d Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:51:29 -0500 Subject: [PATCH 175/539] #00 - Java --- .../java/martinbohorquez.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/martinbohorquez.java diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/martinbohorquez.java b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/martinbohorquez.java new file mode 100644 index 0000000000..46941e85af --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/martinbohorquez.java @@ -0,0 +1,56 @@ +/** + * 00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO + * @author martinbohorquez + */ +public class martinbohorquez { + + // https://www.oracle.com/java/ + + // Esto es un comentario en una sola línea. + + /* + * Esto es un comentario + * usando varías líneas + * para describir el código. + */ + + public static void main(String[] args){ + // Variable + String saludo = "¡Hola, "; + + // Constante + final String PROGRAMMING_LANGUAGE = "Java!"; + + // Datos Primitivos + char letter = 'M'; + printMessage("letter", letter); + + byte age = 29; + printMessage("age", age); + + short year = 2024; + printMessage("year", year); + int quantity = 1234567890; + printMessage("quantity", quantity); + long large = 1234567890123456789L; + printMessage("large", large); + + float pi = 3.1415926535f; + printMessage("pi", pi); + double e = 2.718281828459045235360d; + printMessage("e", e); + + boolean esVerdadero = true; + printMessage("esVerdadero", esVerdadero); + boolean esFalso = false; + printMessage("esFalso", esFalso); + + System.out.println(saludo + PROGRAMMING_LANGUAGE); + + } + + private static void printMessage(String string, Object object) { + System.out.println("El valor de '" + string + "' es: " + object + ", y su tipo es: " + + object.getClass().getSimpleName().toLowerCase()); + } +} From c3efc5486b2522dc9e77a9f86c51e5a27a3cb608 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 12 Sep 2024 14:59:26 -0500 Subject: [PATCH 176/539] #14 - Python --- .../14 - FECHAS/python/juanchernandezdev.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Roadmap/14 - FECHAS/python/juanchernandezdev.py diff --git a/Roadmap/14 - FECHAS/python/juanchernandezdev.py b/Roadmap/14 - FECHAS/python/juanchernandezdev.py new file mode 100644 index 0000000000..7b9b258893 --- /dev/null +++ b/Roadmap/14 - FECHAS/python/juanchernandezdev.py @@ -0,0 +1,31 @@ +### Python Dates ### +from datetime import datetime + +current_time = datetime.now() +birth_time = datetime(1987, 12, 23, 4, 45, 8) +print(current_time, birth_time) + +years_passed = current_time - birth_time +print(years_passed) + +#! Optional Challenge +format_one = birth_time.strftime('%Y/%d/%m') +print(format_one) +format_two = birth_time.strftime('%B-%d-%Y') +print(format_two) +format_three = birth_time.strftime('%a-%d-%B-%y') +print(format_three) +format_four = birth_time.strftime('%a-%d-%B-%y') +print(format_three) +format_five= birth_time.strftime('%d-%B-%y-%H') +print(format_five) +format_six = birth_time.strftime('%d-%a-%B-%Y-%H') +print(format_six) +format_seven = birth_time.strftime('%d-%a-%B-%Y-%I%p') +print(format_seven) +format_eighth = birth_time.strftime('%d-%a-%B-%y-%I%p-00:%M') +print(format_eighth) +format_nine = birth_time.strftime('%d-%a-%B-%y-%I%p-00:%M-00:%S') +print(format_nine) +format_ten = birth_time.strftime('%d-%a/%B/%y/ %I:%M:%S %p') +print(format_ten) From b03567a6014ab04afc2a51527a41974d1dd327a4 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:59:54 -0500 Subject: [PATCH 177/539] #00 - Typescript --- .../typescript/martinbohorquez.ts | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/martinbohorquez.ts diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/martinbohorquez.ts b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/martinbohorquez.ts new file mode 100644 index 0000000000..79b99cbe40 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/martinbohorquez.ts @@ -0,0 +1,63 @@ +// https://www.typescriptlang.org/ + +// Esto es un comentario en una sola línea. + +/* + * Esto es un comentario + * usando varías líneas + * para describir el código. + */ + +// Variable +let saludo: string = '¡Hola, ' + +// Constante +const PROGRAMMING_LANGUAGE: string = 'TypeScript!' + +// Datos Primitivos +// String +let palabra: string = 'Palabra' +printMessage("palabra", palabra); +let texto: string = 'Este string es un texto' +printMessage("texto", texto); + +// Numbers +let numero: number = 123 +printMessage("numero", numero); +let decimal: number = 3.1415926535 +printMessage("decimal", decimal); +let negativo: number = -123 +printMessage("negativo", negativo); +let enteroGrande: bigint = 1234567890123456789012345678901234567890n +printMessage("enteroGrande", enteroGrande); + +// Booleans +let verdadero: boolean = true +printMessage("verdadero", verdadero); +let falso: boolean = false +printMessage("falso", falso); + +// Symbol +let simbolo: symbol = Symbol('mi-simbolo') +printMessage("simbolo", simbolo); + +// Undefined +let indefinido: undefined = undefined +printMessage("indefinido", indefinido); + +// Null +let nulo: null = null +printMessage("texto", texto); + +// Imprimir por terminal +console.log(saludo + PROGRAMMING_LANGUAGE) + +function printMessage(string: string, any: any) { + if (typeof (any) == "symbol") { + console.log("La descripción de '" + string + "' es: " + any.description + ", y su tipo es: " + + typeof (any)) + } else { + console.log("El valor de '" + string + "' es: " + any + ", y su tipo es: " + + typeof (any)) + } +} \ No newline at end of file From 62c958b386119d675d1afa2675f23fd26497214d Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:24:23 -0500 Subject: [PATCH 178/539] #00 - Typescript --- .../typescript/martinbohorquez.ts | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/martinbohorquez.ts diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/martinbohorquez.ts b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/martinbohorquez.ts new file mode 100644 index 0000000000..79b99cbe40 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/martinbohorquez.ts @@ -0,0 +1,63 @@ +// https://www.typescriptlang.org/ + +// Esto es un comentario en una sola línea. + +/* + * Esto es un comentario + * usando varías líneas + * para describir el código. + */ + +// Variable +let saludo: string = '¡Hola, ' + +// Constante +const PROGRAMMING_LANGUAGE: string = 'TypeScript!' + +// Datos Primitivos +// String +let palabra: string = 'Palabra' +printMessage("palabra", palabra); +let texto: string = 'Este string es un texto' +printMessage("texto", texto); + +// Numbers +let numero: number = 123 +printMessage("numero", numero); +let decimal: number = 3.1415926535 +printMessage("decimal", decimal); +let negativo: number = -123 +printMessage("negativo", negativo); +let enteroGrande: bigint = 1234567890123456789012345678901234567890n +printMessage("enteroGrande", enteroGrande); + +// Booleans +let verdadero: boolean = true +printMessage("verdadero", verdadero); +let falso: boolean = false +printMessage("falso", falso); + +// Symbol +let simbolo: symbol = Symbol('mi-simbolo') +printMessage("simbolo", simbolo); + +// Undefined +let indefinido: undefined = undefined +printMessage("indefinido", indefinido); + +// Null +let nulo: null = null +printMessage("texto", texto); + +// Imprimir por terminal +console.log(saludo + PROGRAMMING_LANGUAGE) + +function printMessage(string: string, any: any) { + if (typeof (any) == "symbol") { + console.log("La descripción de '" + string + "' es: " + any.description + ", y su tipo es: " + + typeof (any)) + } else { + console.log("El valor de '" + string + "' es: " + any + ", y su tipo es: " + + typeof (any)) + } +} \ No newline at end of file From 51e9cd9137a3e74f092aae01c9d495d86a5a67da Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:32:45 -0500 Subject: [PATCH 179/539] #01 - Java --- .../java/martinbohorquez.java | 215 ++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/martinbohorquez.java diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/martinbohorquez.java b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/martinbohorquez.java new file mode 100644 index 0000000000..2a4cbcef50 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/martinbohorquez.java @@ -0,0 +1,215 @@ +/** + * 01 - OPERADORES Y ESTRUCTURAS DE CONTROL + * + * @author martinbohorquez + */ +public class martinbohorquez { + + public static void main(String[] args) { + /* + * Operadores aritméticos: actúan sobre números enteros y en punto flotante (decimales). + * Hay dos tipos: + * -- Operadores binarios. + * -- Operadores unarios. + */ + + /* + * Operadores unarios: aplican a un operando. + * Tipos: + * -- Mantiene el signo del operando (+) + * -- Cambia el signo del operando (-) + * -- Autoincremento (++) + * -- Autodecremento (--) + */ + + int a = 10; + + System.out.println("Operadores unarios: aplican a un operando."); + + System.out.println("Mantiene el signo: a => " + (+a)); + System.out.println("Cambia el signo: a => " + (-a)); + System.out.println("Autoincremento e impresión: a => " + (++a)); //Se incrementa y se imprime + System.out.println("Impresión y autoincremento: a => " + (a++)); //Se imprime y se incrementa + System.out.println("Autodecremento e impresión: a => " + (--a)); //Se decrementa y se imprime + System.out.println("Impresión y autodecremento: a => " + (a--)); //Se imprime y se decrementa + + System.out.println(); + + /* + * Operadores binarios: aplican sobre dos operandos. + * Tipos: + * -- Suma (+) + * -- Resta (-) + * -- Multiplicación (*) + * -- División (/) + * -- Módulo (%) + */ + + int b = 5; + int c = 2; + + System.out.println("Operadores binarios: aplican sobre dos operandos: "); + + System.out.println("Suma: " + b + " + " + c + " = " + (b + c)); + System.out.println("Resta: " + b + " - " + c + " = " + (b - c)); + System.out.println("Multiplicación: " + b + " * " + c + " = " + (b * c)); + System.out.println("División: " + b + " / " + c + " = " + (b / c)); + System.out.println("Módulo: " + b + " % " + c + " = " + (b % c)); + + System.out.println(); + + /* + * Operadores relacionales: para hacer comparaciones. + * Tipos: + * -- Mayor que (>) + * -- Mayor o igual que (>=) + * -- Menor que (<) + * -- Menor o igual que (<=) + * -- Igual que (==) + * -- Distinto de (!=) + */ + + int d = 20; + int e = 50; + + System.out.println("Operadores relacionales: para hacer comparaciones."); + + System.out.println("¿20 es mayor que 50? : " + (d > e)); + System.out.println("¿20 es mayor o igual que 50? : " + (d >= e)); + System.out.println("¿20 es menor que 50? : " + (d < e)); + System.out.println("¿20 es menor o igual que 50? : " + (d <= e)); + System.out.println("¿20 es igual que 50? : " + (d == e)); + System.out.println("¿20 es distinto de 50? : " + (d != e)); + + System.out.println(); + + /* + * Operadores lógicos: Operan con valores lógicos para devolver nuevos valores lógicos. + * Tipos: + * -- AND (&): Evalúa si las dos expresiones son verdaderas. + * -- AND en curtocircuíto (&&): No evalúa la segunda expresión si la primera es falsa. + * -- OR (|): Evalúa si alguna de las expresiones es verdadera. + * -- OR en curtocircuíto (||): No evalúa la segunda expresión si la primera es verdadera. + * -- NOT (!): Cambia el valor de la variable lógica. + */ + + boolean v = true; + boolean f = false; + + System.out.println("Operadores lógicos: Operan con valores lógicos para devolver nuevos valores lógicos."); + + System.out.println("¿true es igual a false? : " + (v & f)); + System.out.println("¿true es igual a false? (cortocircuíto) : " + (v && f)); + System.out.println("¿true o false son verdaderas? : " + (v | f)); + System.out.println("¿true o false son verdaderas? (cortocircuíto) : " + (v || f)); + System.out.println("Cambiamos el valor de true : " + (!v)); + + System.out.println(); + + /* + * Operador sobre cadenas de caracteres (+): Para concatenar cadenas de caracteres. + */ + + String text1 = "¡Hola, "; + String text2 = "Mundo!"; + + System.out.println("Operador sobre cadenas de caracteres:"); + + System.out.println(text1 + text2); + + System.out.println(); + + /* + * Operadores de asignación: Para asignar un valor a una variable. + * Tipos: + * -- +=: Suma a la variable y sobrescribe el valor de la variable con el resultado. + * -- -=: Resta a la variable y sobrescribe el valor de la variable con el resultado. + * -- *=: Multiplica a la variable y sobrescribe el valor de la variable con el resultado. + * -- /=: Divide a la variable y sobrescribe el valor de la variable con el resultado. + * -- %=: Realiza el módulo a la variable y sobrescribe el valor de la variable con el resultado. + * -- &=: Realiza un AND lógico a la variable y sobrescribe el valor de la variable con el resultado. + * -- |=: Realiza un OR lógico a la variable y sobrescribe el valor de la variable con el resultado. + */ + + int i; + boolean t = true; + + System.out.println("Operadores de asignación: Para asignar un valor a una variable."); + + System.out.println("Asignamos valor a la variable i = " + (i = 2)); + System.out.println("Suma y asigna: " + (i += 4)); + System.out.println("Resta y asigna: " + (i -= 3)); + System.out.println("Multiplica y asigna: " + (i *= 5)); + System.out.println("Divide y asigna: " + (i /= 3)); + System.out.println("Módulo y asigna: " + (i %= 3)); + System.out.println("AND lógico y asigna: " + (t &= true)); + System.out.println("OR lógico y asigna: " + (t |= false)); + + System.out.println(); + + /* + * Operadores a nivel de bits: operan con cada bit del operando, ofreciendo un control más granular sobre los datos. + * Tipos: + * -- AND (&): Operador AND a nivel de bits (1 y 1 = 1). + * -- OR (|): Operador OR a nivel de bits (1 o 1 = 1). + * -- XOR (^): Operador XOR a nivel de bits (1 y 1 = 0). + * -- Complemento (~): Invierte el valor de cada bit. + * -- >> : Desplaza bits a la derecha. + * -- << : Desplaza bits a la izquierda. + * -- >>> : Desplaza bits a la derecha sin signo. + */ + + int x = 10; + int y = 7; + + System.out.println("Operadores a nivel de bits: operan con cada bit del operando, ofreciendo un control más granular sobre los datos."); + + System.out.println(); + + System.out.println("x : " + Integer.toBinaryString(x)); + System.out.println("y : " + Integer.toBinaryString(y)); + + System.out.println(); + + System.out.println("x AND y : " + Integer.toBinaryString(x & y)); + System.out.println("x OR y : " + Integer.toBinaryString(x | y)); + System.out.println("x XOR y : " + Integer.toBinaryString(x ^ y)); + System.out.println("Complemento de x = " + Integer.toBinaryString(~x)); + System.out.println("Complemento de y = " + Integer.toBinaryString(~y)); + System.out.println("Desplazamiento de bits de x a la izquierda de 2: " + Integer.toBinaryString(x << 2)); + System.out.println("Desplazamiento de bits de x a la derecha de 1: " + Integer.toBinaryString(x >> 1)); + System.out.println("Desplazamiento de bits de x a la derecha de 2 (sin signo): " + Integer.toBinaryString(x >>> 1)); + + System.out.println(); + + /* + * Excepciones + * uso del try - catch + */ + try { + throw new Exception("Este es un ejemplo de excepción!"); + } catch (Exception error) { + System.out.println("Exception: " + error.getMessage()); + } + + System.out.println(); + + /* + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + */ + + System.out.println("DIFICULTAD EXTRA \n"); + + System.out.println("Los números son: "); + + for (int j = 10; j <= 55; j++) { + //Compruebo si son pares, distintos de 16 y no son múltiplos de 3 + if (j % 2 == 0 && j != 16 && j % 3 != 0) { + System.out.println(j); + } + } + + + } +} From d1d370f13f91a6e45e45a032498a00c0b650b243 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:33:57 -0500 Subject: [PATCH 180/539] #01 - Typescript --- .../typescript/martinbohorquez.ts | 195 ++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/martinbohorquez.ts diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/martinbohorquez.ts b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/martinbohorquez.ts new file mode 100644 index 0000000000..ea63634750 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/martinbohorquez.ts @@ -0,0 +1,195 @@ + /* + Operadores aritméticos: actúan sobre números enteros y en punto flotante (decimales). + Hay dos tipos: + -- Operadores binarios. + -- Operadores unarios. + */ + + /* + * Operadores unarios: aplican a un operando. + * Tipos: + * -- Mantiene el signo del operando (+) + * -- Cambia el signo del operando (-) + * -- Autoincremento (++) + * -- Autodecremento (--) + */ + + let a: number = 10; + + console.log("Operadores unarios: aplican a un operando."); + + console.log("Mantiene el signo: " + (+a)); + console.log("Cambia el signo: " + (-a)); + console.log("Autoincremento e impresión: " + (++a)); //Se incrementa y se imprime + console.log("Impresión y autoincremento: " + (a++)); //Se imprime y se incrementa + console.log("Autodecremento e impresión: " + (--a)); //Se decrementa y se imprime + console.log("Impresión y autodecremento: " + (a--)); //Se imprime y se decrementa + + console.log(""); + + /* + * Operadores binarios: aplican sobre dos operandos. + * Tipos: + * -- Suma (+) + * -- Resta (-) + * -- Multiplicación (*) + * -- División (/) + * -- Módulo (%) + */ + + let b: number = 5; + let c: number = 2; + + console.log("Operadores binarios: aplican sobre dos operandos: "); + + console.log("Suma: " + b + " + " + c + " = " + (b + c)); + console.log("Resta: " + b + " - " + c + " = " + (b - c)); + console.log("Multiplicación: " + b + " * " + c + " = " + (b * c)); + console.log("División: " + b + " / " + c + " = " + (b / c)); + console.log("Módulo: " + b + " % " + c + " = " + (b % c)); + + console.log(""); + + /* + * Operadores relacionales: para hacer comparaciones. + * Tipos: + * -- Mayor que (>) + * -- Mayor o igual que (>=) + * -- Menor que (<) + * -- Menor o igual que (<=) + * -- Igual que (==) + * -- Distinto de (!=) + */ + + let d: number = 20; + let e: number = 50; + + console.log("Operadores relacionales: para hacer comparaciones."); + + console.log("¿20 es mayor que 50? : " + (d > e)); + console.log("¿20 es mayor o igual que 50? : " + (d >= e)); + console.log("¿20 es menor que 50? : " + (d < e)); + console.log("¿20 es menor o igual que 50? : " + (d <= e)); + console.log("¿20 es igual que 50? : " + (d == e)); + console.log("¿20 es distinto de 50? : " + (d != e)); + + console.log(""); + + /* + * Operadores lógicos: Operan con valores lógicos para devolver nuevos valores lógicos. + * Tipos: + * -- AND (&&): Evalúa si las dos expresiones son verdaderas. + * -- OR (||): Evalúa si alguna de las expresiones es verdadera. + * -- NOT (!): Cambia el valor de la variable lógica. + */ + + let v: boolean = true; + let f: boolean = false; + + console.log("Operadores lógicos: Operan con valores lógicos para devolver nuevos valores lógicos."); + + console.log("¿true es igual a false? : " + (v && f)); + console.log("¿true o false son verdaderas? : " + (v || f)); + console.log("Cambiamos el valor de true : " + (!v)); + + console.log(""); + + /* + * Operador sobre cadenas de caracteres (+): Para concatenar cadenas de caracteres. + */ + + let text1: string = "¡Hola, " + let text2: string = "TypeScript!" + + console.log("Operador sobre cadenas de caracteres:"); + + console.log(text1 + text2); + + console.log(""); + + /* + * Operadores de asignación: Para asignar un valor a una variable. + * Tipos: + * -- +=: Suma a la variable y sobrescribe el valor de la variable con el resultado. + * -- -=: Resta a la variable y sobrescribe el valor de la variable con el resultado. + * -- *=: Multiplica a la variable y sobrescribe el valor de la variable con el resultado. + * -- /=: Divide a la variable y sobrescribe el valor de la variable con el resultado. + * -- %=: Realiza el módulo a la variable y sobrescribe el valor de la variable con el resultado. + * -- *=: Potencia a la variable y sobrescribe el valor de la variable con el resultado. + * -- &&=: Realiza un AND lógico a la variable y sobrescribe el valor de la variable con el resultado. + * -- ||=: Realiza un OR lógico a la variable y sobrescribe el valor de la variable con el resultado. + */ + + let i: number; + let t: boolean = true; + + console.log("Operadores de asignación: Para asignar un valor a una variable."); + + console.log("Asignamos valor a la variable i = " + (i = 2)); + console.log("Suma y asigna: " + (i += 4)); + console.log("Resta y asigna: " + (i -= 3)); + console.log("Multiplica y asigna: " + (i *= 5)); + console.log("Divide y asigna: " + (i /= 3)); + console.log("Módulo y asigna: " + (i %= 3)); + console.log("Potencia y asigna: " + (i **= 3)); + console.log("AND lógico y asigna: " + (t &&= true)); + console.log("OR lógico y asigna: " + (t ||= false)); + + console.log(""); + + /* + * Operadores a nivel de bits: operan con cada bit del operando, ofreciendo un control más granular sobre los datos. + * Tipos: + * -- AND (&): Operador AND a nivel de bits (1 y 1 = 1). + * -- OR (|): Operador OR a nivel de bits (1 o 1 = 1). + * -- XOR (^): Operador XOR a nivel de bits (1 y 1 = 0). + * -- Complemento (~): Invierte el valor de cada bit. + * -- >> : Desplaza bits a la derecha. + * -- << : Desplaza bits a la izquierda. + * -- >>> : Desplaza bits a la derecha sin signo. + */ + + let x: number = 10; // 1010 + let y: number = 7; // 0111 + + console.info("Operadores a nivel de bits: operan con cada bit del operando, ofreciendo un control más granular sobre los datos."); + + console.log("x AND y : " + (x & y)); + console.log("x OR y : " + (x | y)); + console.log("x XOR y : " + (x ^ y)); + console.log("Complemento de x = " + + ~x); + console.log("Complemento de y = " + + ~y); + console.log("Desplazamiento de bits de x a la izquierda de 2: " + (x << 2)); + console.log("Desplazamiento de bits de y a la derecha de 1: " + (y >> 1)); + console.log("Desplazamiento de bits de y a la derecha de 1 (sin signo): " + (y >>> 1)); + + console.log(""); + + /* + * Excepciones + * uso del try - catch + */ + try { + throw new Error('Este es un ejemplo de excepción.'); + } catch (error) { + console.error('Excepción:', (error as Error).message); + } + + console.log(""); + + + /* + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + */ + + console.log("DIFICULTAD EXTRA \n"); + + console.log("Los números son: "); + + for (let j: number = 10; j <= 55; j++) { + //Compruebo si son pares, distintos de 16 y no son múltiplos de 3 + if (j % 2 == 0 && j != 16 && j % 3 != 0) { + console.log(j); + } + } From 013aba571ee41ad06e10fd3f57be5d31812d36cb Mon Sep 17 00:00:00 2001 From: Mekanicas Date: Thu, 12 Sep 2024 18:39:56 -0300 Subject: [PATCH 181/539] #[00] - [javascript] --- .../javascript/mekanicas.js | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/mekanicas.js diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/mekanicas.js b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/mekanicas.js new file mode 100644 index 0000000000..ac84a69d3b --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/mekanicas.js @@ -0,0 +1,22 @@ +//https://www.javascript.com/ + +/* Esta es otra manera +de colocar +comentarios en más de una línea */ + +let js = "JavaScript"; +const cinco = 5; + +/* - Crea variables representando todos los tipos de datos primitivos + * del lenguaje (cadenas de texto, enteros, booleanos...). */ + +let string = "Un string, se puede utilizar para texto plano"; +let number = 10; +let booleanT = true; +let booleanF = false; +const x = BigInt(Number.MAX_SAFE_INTEGER); +const sym = Symbol(); +let myUndefined; //undefined +let Null = null + +console.log("¡Hola " + js + "¡" ) \ No newline at end of file From 947c1303b40ac62d7b9a07a8becbf377d3d3aacf Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Thu, 12 Sep 2024 18:32:58 -0500 Subject: [PATCH 182/539] #02 - Java --- .../java/martinbohorquez.java | 181 ++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/java/martinbohorquez.java diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/java/martinbohorquez.java b/Roadmap/02 - FUNCIONES Y ALCANCE/java/martinbohorquez.java new file mode 100644 index 0000000000..93d51cc120 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/java/martinbohorquez.java @@ -0,0 +1,181 @@ +import java.text.DecimalFormat; + +/** + * 02 FUNCIONES Y ALCANCE + * + * @author martinbohorquez + */ +public class martinbohorquez { + /* + * Diferentes típos de funciones (en Java, métodos, que suelen estar asociados a objetos.): + * -- Estructura: modificador retorno nombre (parámetros). + * -- Tipos de métodos: + * * Métodos sin retorno. + * * Métodos con retorno. + * * Métodos sin parámetros. + * * Métodos con parámetros. + * * Métodos estáticos (no están asociados a objetos). + * * Métodos constructores: Se utilizan para inicializar un objeto cuando se crea. + * * Métodos abstractos: Se declaran en clases abstractas y deben ser implementados por las subclases. + */ + + /** + * Ejemplo de Constructor + */ + public martinbohorquez() { + } + + /** + * Ejemplo de Método sin retorno y sin parámetros. + * Método estático, es decir que se puede llamar dentro de la clase, + * sin crear un objeto como instancia. + */ + private static void saludar() { + System.out.println("Hola, Java!"); + } + + /** + * Ejemplo de Método sin retorno, con parámetros. + * + * @param name tipo string. + */ + private static void saludar(String name) { + System.out.println("Hola, " + name + "!"); + } + + /** + * Ejemplo de Método con retorno y sin parámetros. + * + * @return con un hola kotlin, tipo string. + */ + private static String saludarKotlin() { + return "Hola, Kotlin!"; + } + + /** + * Ejemplo de Método con retorno y parámetros. + * + * @param salario tipo double. + * @param percentAhorro tipo double. + * @return ahorro mensual, tipo double. + */ + private static double calcularAhorroMensual(double salario, double percentAhorro) { + return salario * percentAhorro; + } + + public static void main(String[] args) { + martinbohorquez mbohorquez = new martinbohorquez(); + System.out.println("---- SALUDAR ----"); + saludar(); + saludar("Python"); + saludar("Typescript"); + System.out.println(saludarKotlin()); + + System.out.println("---- CALCULAR AHORRO ----"); +// double salario = 2500; +// double percentAhorro = 52.75 / 100; +// double tasaAnual = 8.00 / 100; +// int periodos = 60; + double salario = 4000; + double percentAhorro = 62.5 / 100; + double tasaAnual = 8.00 / 100; + int periodos = 3 * 12; + + DecimalFormat df = new DecimalFormat("$ #,###.00"); + DecimalFormat dfp = new DecimalFormat("#.00 %"); + + System.out.println("Salario: " + df.format(salario)); + System.out.println("Porcentaje de ahorro (%): " + dfp.format(percentAhorro)); + System.out.println("Periodos de ahorro (meses): " + periodos); + System.out.println("Tasa de interés anual (%): " + dfp.format(tasaAnual)); + + double ahorroMensual = calcularAhorroMensual(salario, percentAhorro); + System.out.println("El ahorro mensual: " + df.format(ahorroMensual)); + + double ahorroTotal = mbohorquez.calcularAhorro(ahorroMensual, tasaAnual, periodos); + System.out.println("El ahorro total generado es: " + df.format(ahorroTotal)); + System.out.println(); + + salario = 1500; + percentAhorro = 67.5 / 100; + tasaAnual = 7.50 / 100; + periodos = 2 * 12; + + System.out.println("Salario: " + df.format(salario)); + System.out.println("Porcentaje de ahorro (%): " + dfp.format(percentAhorro)); + System.out.println("Periodos de ahorro (meses): " + periodos); + System.out.println("Tasa de interés anual (%): " + dfp.format(tasaAnual)); + + double ahorroTotal2 = mbohorquez.calcularAhorro(salario, percentAhorro, tasaAnual, periodos); + System.out.println("El ahorro total generado es: " + df.format(ahorroTotal2)); + System.out.println(); + + System.out.println("DIFICULTAD EXTRA"); + int numeros = mbohorquez.funcion("fizz", "buzz"); + System.out.println("numeros de: " + numeros); + } + + /** + * Ejemplo de Método con retorno y parámetros. + * No son métodos estáticos, se necesita un objeto como instancia + * para llamar al método. + * + * @param ahorroMensual tipo double. + * @param tasaAnual tipo double. + * @param periodos tipo integer. + * @return ahorro total, tipo double. + */ + private double calcularAhorro(double ahorroMensual, double tasaAnual, int periodos) { + int periodosPorAnio = 12; // Capitalización mensual + double tasaMensual = Math.pow(tasaAnual + 1, (double) 1 / periodosPorAnio) - 1; // Tasa mensual + return ahorroMensual * ((Math.pow(1 + (tasaMensual), periodos) - 1) / (tasaMensual)); + } + + /** + * Ejemplo de Método con retorno y parámetros. + * Se llaman a otros métodos dentro del mismo. + * + * @param salario tipo double. + * @param percentAhorro tipo double. + * @param tasaAnual tipo double. + * @param periodos tipo integer. + * @return ahorro total, tipo double. + */ + private double calcularAhorro(double salario, double percentAhorro, double tasaAnual, int periodos) { + double pago = calcularAhorroMensual(salario, percentAhorro); + return calcularAhorro(pago, tasaAnual, periodos); + } + + /** + * DIFICULTAD EXTRA (Ejercicio fizz buzz) + * Una función que imprima los números del 1 al 100, pero si el número es + * múltiplo de 3, muestre una palabra, si es múltiplo de 5 muestre otra + * y si es múltiplo de los dos muestre las dos palabras. + * + * @param texto1 el texto para los divisores de 3. + * @param texto2 el texto para los divisores de 5. + * @return el número de veces que mostró números y no texto. + */ + public int funcion(String texto1, String texto2) { + int counter = 0; + StringBuilder result; + for (int i = 1; i <= 100; i++) { + result = new StringBuilder(); + + if (i % 3 == 0) { + result.append(texto1); + } + + if (i % 5 == 0) { + result.append(texto2); + } + + if (result.isEmpty()) { + result.append(i); + counter++; + } + System.out.println(result); + } + return counter; + } +} From 4acaf60d3a5e6dd5b7887bbf42bc641ba66f886d Mon Sep 17 00:00:00 2001 From: mouredev Date: Fri, 13 Sep 2024 00:15:01 +0000 Subject: [PATCH 183/539] Update stats --- Roadmap/stats.json | 1674 ++++++++++++++++++++++---------------------- 1 file changed, 849 insertions(+), 825 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index 5391ad2274..da7bc3cf9a 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,23 +1,23 @@ { "challenges_total": 38, "languages_total": 48, - "files_total": 6958, - "users_total": 1164, + "files_total": 6975, + "users_total": 1168, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1271 + "count": 1275 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 767 + "count": 770 }, { "order": 3, "name": "02 - FUNCIONES Y ALCANCE", - "count": 586 + "count": 588 }, { "order": 4, @@ -27,7 +27,7 @@ { "order": 5, "name": "04 - CADENAS DE CARACTERES", - "count": 331 + "count": 333 }, { "order": 6, @@ -52,7 +52,7 @@ { "order": 10, "name": "09 - HERENCIA", - "count": 219 + "count": 221 }, { "order": 11, @@ -82,7 +82,7 @@ { "order": 16, "name": "16 - EXPRESIONES REGULARES", - "count": 125 + "count": 127 }, { "order": 17, @@ -102,7 +102,7 @@ { "order": 20, "name": "19 - ENUMERACIONES", - "count": 99 + "count": 100 }, { "order": 21, @@ -152,7 +152,7 @@ { "order": 30, "name": "29 - SOLID ISP", - "count": 54 + "count": 55 }, { "order": 31, @@ -199,56 +199,56 @@ { "order": 1, "name": "python", - "count": 2995, - "percentage": 43.04 + "count": 3004, + "percentage": 43.07 }, { "order": 2, "name": "javascript", - "count": 1382, - "percentage": 19.86 + "count": 1384, + "percentage": 19.84 }, { "order": 3, "name": "java", - "count": 626, - "percentage": 9.0 + "count": 629, + "percentage": 9.02 }, { "order": 4, "name": "typescript", "count": 308, - "percentage": 4.43 + "percentage": 4.42 }, { "order": 5, "name": "c#", "count": 253, - "percentage": 3.64 + "percentage": 3.63 }, { "order": 6, "name": "kotlin", "count": 220, - "percentage": 3.16 + "percentage": 3.15 }, { "order": 7, "name": "go", - "count": 213, - "percentage": 3.06 + "count": 214, + "percentage": 3.07 }, { "order": 8, "name": "swift", - "count": 166, + "count": 167, "percentage": 2.39 }, { "order": 9, "name": "php", "count": 153, - "percentage": 2.2 + "percentage": 2.19 }, { "order": 10, @@ -277,8 +277,8 @@ { "order": 14, "name": "bash", - "count": 43, - "percentage": 0.62 + "count": 44, + "percentage": 0.63 }, { "order": 15, @@ -567,7 +567,7 @@ { "order": 14, "name": "jesusantonioeescamilla", - "count": 55, + "count": 57, "languages": 3 }, { @@ -776,39 +776,39 @@ }, { "order": 49, - "name": "marcode24", - "count": 30, - "languages": 3 + "name": "raynerpv2022", + "count": 31, + "languages": 2 }, { "order": 50, - "name": "alanshakir", + "name": "marcode24", "count": 30, - "languages": 1 + "languages": 3 }, { "order": 51, - "name": "soohav", + "name": "adra-dev", "count": 30, "languages": 1 }, { "order": 52, - "name": "raynerpv2022", - "count": 29, - "languages": 2 + "name": "alanshakir", + "count": 30, + "languages": 1 }, { "order": 53, - "name": "any7dev", - "count": 29, - "languages": 2 + "name": "soohav", + "count": 30, + "languages": 1 }, { "order": 54, - "name": "adra-dev", + "name": "any7dev", "count": 29, - "languages": 1 + "languages": 2 }, { "order": 55, @@ -974,25 +974,25 @@ }, { "order": 82, - "name": "chartypes", - "count": 19, - "languages": 2 + "name": "gordo-master", + "count": 20, + "languages": 1 }, { "order": 83, - "name": "sorubadguy", + "name": "chartypes", "count": 19, - "languages": 1 + "languages": 2 }, { "order": 84, - "name": "yenneralayon142", + "name": "sorubadguy", "count": 19, "languages": 1 }, { "order": 85, - "name": "gordo-master", + "name": "yenneralayon142", "count": 19, "languages": 1 }, @@ -1088,43 +1088,43 @@ }, { "order": 101, - "name": "kontroldev", + "name": "tofedev", "count": 16, - "languages": 1 + "languages": 2 }, { "order": 102, - "name": "artickun", + "name": "kontroldev", "count": 16, "languages": 1 }, { "order": 103, - "name": "oniricoh", + "name": "artickun", "count": 16, "languages": 1 }, { "order": 104, - "name": "danielhdzr", + "name": "oniricoh", "count": 16, "languages": 1 }, { "order": 105, - "name": "kuroz00", - "count": 15, - "languages": 3 + "name": "danielhdzr", + "count": 16, + "languages": 1 }, { "order": 106, - "name": "alvaro-neyra", + "name": "kuroz00", "count": 15, - "languages": 2 + "languages": 3 }, { "order": 107, - "name": "tofedev", + "name": "alvaro-neyra", "count": 15, "languages": 2 }, @@ -2078,285 +2078,285 @@ }, { "order": 266, - "name": "vasilealexandru02", + "name": "drvito1977", "count": 5, "languages": 1 }, { "order": 267, - "name": "esaens12", + "name": "vasilealexandru02", "count": 5, "languages": 1 }, { "order": 268, - "name": "victormugo", + "name": "esaens12", "count": 5, "languages": 1 }, { "order": 269, - "name": "adridoce", + "name": "victormugo", "count": 5, "languages": 1 }, { "order": 270, - "name": "vixito", + "name": "adridoce", "count": 5, "languages": 1 }, { "order": 271, - "name": "danielbustos342", + "name": "vixito", "count": 5, "languages": 1 }, { "order": 272, - "name": "douglasdiazr", + "name": "danielbustos342", "count": 5, "languages": 1 }, { "order": 273, - "name": "n1sek", + "name": "douglasdiazr", "count": 5, "languages": 1 }, { "order": 274, - "name": "robmxz", + "name": "n1sek", "count": 5, "languages": 1 }, { "order": 275, - "name": "d4-n1", + "name": "robmxz", "count": 5, "languages": 1 }, { "order": 276, - "name": "lauracastrillonmp", + "name": "d4-n1", "count": 5, "languages": 1 }, { "order": 277, - "name": "joanfv-git", + "name": "lauracastrillonmp", "count": 5, "languages": 1 }, { "order": 278, - "name": "yharyarias", + "name": "joanfv-git", "count": 5, "languages": 1 }, { "order": 279, - "name": "jorgeadamowicz", + "name": "yharyarias", "count": 5, "languages": 1 }, { "order": 280, - "name": "franz-arzapalo", + "name": "jorgeadamowicz", "count": 5, "languages": 1 }, { "order": 281, - "name": "d0ubt0", + "name": "franz-arzapalo", "count": 5, "languages": 1 }, { "order": 282, - "name": "gmbarrios", + "name": "d0ubt0", "count": 5, "languages": 1 }, { "order": 283, - "name": "santiago434c", + "name": "gmbarrios", "count": 5, "languages": 1 }, { "order": 284, - "name": "augustdev2003", + "name": "santiago434c", "count": 5, "languages": 1 }, { "order": 285, - "name": "alberba", + "name": "augustdev2003", "count": 5, "languages": 1 }, { "order": 286, - "name": "gabrielramos02", + "name": "alberba", "count": 5, "languages": 1 }, { "order": 287, - "name": "thezhizn", + "name": "gabrielramos02", "count": 5, "languages": 1 }, { "order": 288, - "name": "jose-luis-lanza", + "name": "thezhizn", "count": 5, "languages": 1 }, { "order": 289, - "name": "nomellamodante", + "name": "jose-luis-lanza", "count": 5, "languages": 1 }, { "order": 290, - "name": "karolle", + "name": "nomellamodante", "count": 5, "languages": 1 }, { "order": 291, - "name": "jcrodmir", + "name": "karolle", "count": 5, "languages": 1 }, { "order": 292, - "name": "alvarofernandezavalos", + "name": "jcrodmir", "count": 5, "languages": 1 }, { "order": 293, - "name": "lucasag01", + "name": "alvarofernandezavalos", "count": 5, "languages": 1 }, { "order": 294, - "name": "thaishdz", + "name": "lucasag01", "count": 5, "languages": 1 }, { "order": 295, - "name": "bastianalq", + "name": "thaishdz", "count": 5, "languages": 1 }, { "order": 296, - "name": "w00k", + "name": "bastianalq", "count": 5, "languages": 1 }, { "order": 297, - "name": "mohamedelderkaoui", + "name": "w00k", "count": 5, "languages": 1 }, { "order": 298, - "name": "boterop", + "name": "mohamedelderkaoui", "count": 5, "languages": 1 }, { "order": 299, - "name": "rafacv23", + "name": "boterop", "count": 5, "languages": 1 }, { "order": 300, - "name": "d1d4cum", + "name": "rafacv23", "count": 5, "languages": 1 }, { "order": 301, - "name": "zarakilancelot", - "count": 4, - "languages": 3 + "name": "d1d4cum", + "count": 5, + "languages": 1 }, { "order": 302, - "name": "eonozux", + "name": "zarakilancelot", "count": 4, - "languages": 2 + "languages": 3 }, { "order": 303, - "name": "yablik", + "name": "eonozux", "count": 4, "languages": 2 }, { "order": 304, - "name": "fullovellas", + "name": "yablik", "count": 4, "languages": 2 }, { "order": 305, - "name": "k3nvd", + "name": "fullovellas", "count": 4, "languages": 2 }, { "order": 306, - "name": "josefuentes-dev", + "name": "k3nvd", "count": 4, "languages": 2 }, { "order": 307, - "name": "willr30", + "name": "josefuentes-dev", "count": 4, "languages": 2 }, { "order": 308, - "name": "ruthmp", + "name": "willr30", "count": 4, "languages": 2 }, { "order": 309, - "name": "daeduol", + "name": "ruthmp", "count": 4, "languages": 2 }, { "order": 310, - "name": "mendozalz", + "name": "daeduol", "count": 4, "languages": 2 }, { "order": 311, - "name": "salkalero", + "name": "mendozalz", "count": 4, "languages": 2 }, { "order": 312, - "name": "drvito1977", + "name": "salkalero", "count": 4, - "languages": 1 + "languages": 2 }, { "order": 313, @@ -3260,4212 +3260,4236 @@ }, { "order": 463, - "name": "mstaz4", + "name": "ggtorca", "count": 3, "languages": 1 }, { "order": 464, - "name": "emilianohoyos", + "name": "mstaz4", "count": 3, "languages": 1 }, { "order": 465, - "name": "rgeditv1", + "name": "emilianohoyos", "count": 3, "languages": 1 }, { "order": 466, - "name": "elder202", + "name": "rgeditv1", "count": 3, "languages": 1 }, { "order": 467, - "name": "dandrusco", + "name": "elder202", "count": 3, "languages": 1 }, { "order": 468, - "name": "mizadlogcia", + "name": "dandrusco", "count": 3, "languages": 1 }, { "order": 469, - "name": "antii16", + "name": "mizadlogcia", "count": 3, "languages": 1 }, { "order": 470, - "name": "strooplab", + "name": "antii16", "count": 3, "languages": 1 }, { "order": 471, - "name": "marcoh2325", + "name": "strooplab", "count": 3, "languages": 1 }, { "order": 472, - "name": "frostbitepy", + "name": "marcoh2325", "count": 3, "languages": 1 }, { "order": 473, - "name": "zzepu", + "name": "frostbitepy", "count": 3, "languages": 1 }, { "order": 474, - "name": "tekatoki", + "name": "zzepu", "count": 3, "languages": 1 }, { "order": 475, - "name": "yeam-10", + "name": "tekatoki", "count": 3, "languages": 1 }, { "order": 476, - "name": "exanderguitar", + "name": "yeam-10", "count": 3, "languages": 1 }, { "order": 477, - "name": "camilo-zuluaga", + "name": "exanderguitar", "count": 3, "languages": 1 }, { "order": 478, - "name": "macova96", + "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { "order": 479, - "name": "betzadev", + "name": "macova96", "count": 3, "languages": 1 }, { "order": 480, - "name": "monikgbar", + "name": "betzadev", "count": 3, "languages": 1 }, { "order": 481, - "name": "guillesese", + "name": "monikgbar", "count": 3, "languages": 1 }, { "order": 482, - "name": "artdugarte", + "name": "guillesese", "count": 3, "languages": 1 }, { "order": 483, - "name": "jofedev", + "name": "artdugarte", "count": 3, "languages": 1 }, { "order": 484, - "name": "oscarhub90", + "name": "jofedev", "count": 3, "languages": 1 }, { "order": 485, - "name": "tonywarcode", + "name": "oscarhub90", "count": 3, "languages": 1 }, { "order": 486, - "name": "oscargeovannyrincon", + "name": "tonywarcode", "count": 3, "languages": 1 }, { "order": 487, - "name": "joandevpy", + "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { "order": 488, - "name": "estelacode", + "name": "joandevpy", "count": 3, "languages": 1 }, { "order": 489, - "name": "xurxogz", + "name": "estelacode", "count": 3, "languages": 1 }, { "order": 490, - "name": "freedainew", + "name": "xurxogz", "count": 3, "languages": 1 }, { "order": 491, - "name": "swifty0705", + "name": "freedainew", "count": 3, "languages": 1 }, { "order": 492, - "name": "marce1084", + "name": "swifty0705", "count": 3, "languages": 1 }, { "order": 493, - "name": "rubioj17", + "name": "marce1084", "count": 3, "languages": 1 }, { "order": 494, - "name": "kingsaul22", + "name": "rubioj17", "count": 3, "languages": 1 }, { "order": 495, - "name": "ainoaran", + "name": "kingsaul22", "count": 3, "languages": 1 }, { "order": 496, - "name": "francofmv", + "name": "ainoaran", "count": 3, "languages": 1 }, { "order": 497, - "name": "davidsorroche", + "name": "francofmv", "count": 3, "languages": 1 }, { "order": 498, - "name": "david-quinones", + "name": "davidsorroche", "count": 3, "languages": 1 }, { "order": 499, - "name": "fluna29", + "name": "david-quinones", "count": 3, "languages": 1 }, { "order": 500, - "name": "natalinacn", + "name": "fluna29", "count": 3, "languages": 1 }, { "order": 501, - "name": "kine-jdf", + "name": "natalinacn", "count": 3, "languages": 1 }, { "order": 502, - "name": "yaretzyrb", + "name": "kine-jdf", "count": 3, "languages": 1 }, { "order": 503, - "name": "confley", + "name": "yaretzyrb", "count": 3, "languages": 1 }, { "order": 504, - "name": "beonzj", + "name": "password1989", "count": 3, "languages": 1 }, { "order": 505, - "name": "mantaras96", + "name": "confley", "count": 3, "languages": 1 }, { "order": 506, - "name": "juxxon23", + "name": "beonzj", "count": 3, "languages": 1 }, { "order": 507, - "name": "frangarmez21", + "name": "mantaras96", "count": 3, "languages": 1 }, { "order": 508, - "name": "ikeragi05", + "name": "juxxon23", "count": 3, "languages": 1 }, { "order": 509, - "name": "johnalexguerrero", + "name": "frangarmez21", "count": 3, "languages": 1 }, { "order": 510, + "name": "ikeragi05", + "count": 3, + "languages": 1 + }, + { + "order": 511, + "name": "johnalexguerrero", + "count": 3, + "languages": 1 + }, + { + "order": 512, "name": "devvdroid01", "count": 2, "languages": 2 }, { - "order": 511, + "order": 513, "name": "sgb004", "count": 2, "languages": 2 }, { - "order": 512, + "order": 514, "name": "chuanmi", "count": 2, "languages": 2 }, { - "order": 513, + "order": 515, "name": "jlcareglio", "count": 2, "languages": 2 }, { - "order": 514, + "order": 516, "name": "jurgen-alfaro", "count": 2, "languages": 2 }, { - "order": 515, + "order": 517, "name": "lydaf", "count": 2, "languages": 2 }, { - "order": 516, + "order": 518, "name": "carresoft", "count": 2, "languages": 2 }, { - "order": 517, + "order": 519, "name": "ismaelmatiz", "count": 2, "languages": 2 }, { - "order": 518, + "order": 520, "name": "tecfer", "count": 2, "languages": 2 }, { - "order": 519, + "order": 521, "name": "elsanty08", "count": 2, "languages": 2 }, { - "order": 520, + "order": 522, "name": "jorgesilencio", "count": 2, "languages": 2 }, { - "order": 521, + "order": 523, "name": "berentolkien", "count": 2, "languages": 2 }, { - "order": 522, + "order": 524, "name": "felipedev303", "count": 2, "languages": 2 }, { - "order": 523, + "order": 525, "name": "lemito66", "count": 2, "languages": 2 }, { - "order": 524, + "order": 526, "name": "alexsamboy", "count": 2, "languages": 2 }, { - "order": 525, + "order": 527, "name": "enrgarvic", "count": 2, "languages": 2 }, { - "order": 526, + "order": 528, "name": "jovany-java", "count": 2, "languages": 2 }, { - "order": 527, + "order": 529, "name": "raul-progr", "count": 2, "languages": 2 }, { - "order": 528, + "order": 530, "name": "jmofuture", "count": 2, "languages": 2 }, { - "order": 529, + "order": 531, "name": "angel-alvarez-dev", "count": 2, "languages": 2 }, { - "order": 530, + "order": 532, "name": "lilberick", "count": 2, "languages": 2 }, { - "order": 531, + "order": 533, "name": "camiloforero1997", "count": 2, "languages": 2 }, { - "order": 532, + "order": 534, "name": "alejosor", "count": 2, "languages": 2 }, { - "order": 533, + "order": 535, "name": "juan-wills", "count": 2, "languages": 2 }, { - "order": 534, + "order": 536, "name": "lurtur", "count": 2, "languages": 2 }, { - "order": 535, + "order": 537, "name": "jhonatanmustiolacas", "count": 2, "languages": 2 }, { - "order": 536, + "order": 538, "name": "elmarqueli", "count": 2, "languages": 1 }, { - "order": 537, + "order": 539, "name": "tiaguiito3", "count": 2, "languages": 1 }, { - "order": 538, + "order": 540, "name": "angelargumedo", "count": 2, "languages": 1 }, { - "order": 539, + "order": 541, "name": "reaien", "count": 2, "languages": 1 }, { - "order": 540, + "order": 542, "name": "rikar20", "count": 2, "languages": 1 }, { - "order": 541, + "order": 543, "name": "vdroiid", "count": 2, "languages": 1 }, { - "order": 542, + "order": 544, "name": "frannmv", "count": 2, "languages": 1 }, { - "order": 543, + "order": 545, "name": "rrcoder", "count": 2, "languages": 1 }, { - "order": 544, + "order": 546, "name": "diegosilval", "count": 2, "languages": 1 }, { - "order": 545, + "order": 547, "name": "nandaalf", "count": 2, "languages": 1 }, { - "order": 546, + "order": 548, "name": "hawkbott", "count": 2, "languages": 1 }, { - "order": 547, + "order": 549, "name": "tomasmarquez81", "count": 2, "languages": 1 }, { - "order": 548, + "order": 550, "name": "poetry0354", "count": 2, "languages": 1 }, { - "order": 549, + "order": 551, "name": "santiagocuevas2003", "count": 2, "languages": 1 }, { - "order": 550, + "order": 552, "name": "lmedina96", "count": 2, "languages": 1 }, { - "order": 551, + "order": 553, "name": "lorenamesa", "count": 2, "languages": 1 }, { - "order": 552, + "order": 554, "name": "raulallue", "count": 2, "languages": 1 }, { - "order": 553, + "order": 555, "name": "luciarf", "count": 2, "languages": 1 }, { - "order": 554, + "order": 556, "name": "aserranot", "count": 2, "languages": 1 }, { - "order": 555, + "order": 557, "name": "devcherry1", "count": 2, "languages": 1 }, { - "order": 556, + "order": 558, "name": "yowcloud", "count": 2, "languages": 1 }, { - "order": 557, + "order": 559, "name": "fefestuve", "count": 2, "languages": 1 }, { - "order": 558, + "order": 560, "name": "fsfigueroa77", "count": 2, "languages": 1 }, { - "order": 559, + "order": 561, "name": "nahuelborromeo", "count": 2, "languages": 1 }, { - "order": 560, + "order": 562, "name": "peibolstrike", "count": 2, "languages": 1 }, { - "order": 561, + "order": 563, "name": "dararod", "count": 2, "languages": 1 }, { - "order": 562, + "order": 564, "name": "navarroemiliano", "count": 2, "languages": 1 }, { - "order": 563, + "order": 565, "name": "waldid32", "count": 2, "languages": 1 }, { - "order": 564, + "order": 566, "name": "reanthonyh", "count": 2, "languages": 1 }, { - "order": 565, + "order": 567, "name": "roilhi", "count": 2, "languages": 1 }, { - "order": 566, + "order": 568, "name": "cristiansystem", "count": 2, "languages": 1 }, { - "order": 567, + "order": 569, "name": "evelynnobile", "count": 2, "languages": 1 }, { - "order": 568, + "order": 570, "name": "nicolastapiasanz", "count": 2, "languages": 1 }, { - "order": 569, + "order": 571, "name": "gomezcamilo9701", "count": 2, "languages": 1 }, { - "order": 570, + "order": 572, "name": "vicgallego", "count": 2, "languages": 1 }, { - "order": 571, + "order": 573, "name": "freddyasierraj", "count": 2, "languages": 1 }, { - "order": 572, + "order": 574, "name": "luis-vb", "count": 2, "languages": 1 }, { - "order": 573, + "order": 575, "name": "vikkanh", "count": 2, "languages": 1 }, { - "order": 574, + "order": 576, "name": "juaruibr", "count": 2, "languages": 1 }, { - "order": 575, + "order": 577, "name": "crisdev3", "count": 2, "languages": 1 }, { - "order": 576, + "order": 578, "name": "frealexandro", "count": 2, "languages": 1 }, { - "order": 577, + "order": 579, "name": "gamitocu", "count": 2, "languages": 1 }, { - "order": 578, + "order": 580, "name": "saracorraless", "count": 2, "languages": 1 }, { - "order": 579, + "order": 581, "name": "cesarocbu", "count": 2, "languages": 1 }, { - "order": 580, + "order": 582, "name": "jeisonredondo", "count": 2, "languages": 1 }, { - "order": 581, + "order": 583, "name": "alanox1", "count": 2, "languages": 1 }, { - "order": 582, + "order": 584, "name": "christianumb", "count": 2, "languages": 1 }, { - "order": 583, + "order": 585, "name": "jhonf1992", "count": 2, "languages": 1 }, { - "order": 584, + "order": 586, "name": "k4rv3r", "count": 2, "languages": 1 }, { - "order": 585, + "order": 587, "name": "rikar2o", "count": 2, "languages": 1 }, { - "order": 586, + "order": 588, "name": "rolo27s", "count": 2, "languages": 1 }, { - "order": 587, + "order": 589, "name": "franciscocuminilondero", "count": 2, "languages": 1 }, { - "order": 588, + "order": 590, "name": "wesborland-github", "count": 2, "languages": 1 }, { - "order": 589, + "order": 591, "name": "doblea74", "count": 2, "languages": 1 }, { - "order": 590, + "order": 592, "name": "matiasfarfan89", "count": 2, "languages": 1 }, { - "order": 591, + "order": 593, "name": "nxl22", "count": 2, "languages": 1 }, { - "order": 592, + "order": 594, "name": "valeriatorrealba", "count": 2, "languages": 1 }, { - "order": 593, + "order": 595, "name": "farthaz", "count": 2, "languages": 1 }, { - "order": 594, + "order": 596, "name": "aleoe01", "count": 2, "languages": 1 }, { - "order": 595, + "order": 597, "name": "jaimemunozdev", "count": 2, "languages": 1 }, { - "order": 596, + "order": 598, "name": "miguelrejon96", "count": 2, "languages": 1 }, { - "order": 597, + "order": 599, "name": "jorge186414", "count": 2, "languages": 1 }, { - "order": 598, + "order": 600, "name": "andnikdev", "count": 2, "languages": 1 }, { - "order": 599, + "order": 601, "name": "soldochris", "count": 2, "languages": 1 }, { - "order": 600, + "order": 602, "name": "leonardo291024", "count": 2, "languages": 1 }, { - "order": 601, + "order": 603, "name": "mickel-arroz", "count": 2, "languages": 1 }, { - "order": 602, + "order": 604, "name": "gianbordon", "count": 2, "languages": 1 }, { - "order": 603, + "order": 605, "name": "cpcarlosprieto", "count": 2, "languages": 1 }, { - "order": 604, + "order": 606, "name": "juangomezn", "count": 2, "languages": 1 }, { - "order": 605, + "order": 607, "name": "angelvelasco1", "count": 2, "languages": 1 }, { - "order": 606, + "order": 608, "name": "ssanjua", "count": 2, "languages": 1 }, { - "order": 607, + "order": 609, "name": "murquisdev", "count": 2, "languages": 1 }, { - "order": 608, + "order": 610, + "name": "erysnell", + "count": 2, + "languages": 1 + }, + { + "order": 611, "name": "duendeintemporal", "count": 2, "languages": 1 }, { - "order": 609, + "order": 612, "name": "davhage", "count": 2, "languages": 1 }, { - "order": 610, + "order": 613, "name": "erikayeah", "count": 2, "languages": 1 }, { - "order": 611, + "order": 614, "name": "misterdan100", "count": 2, "languages": 1 }, { - "order": 612, + "order": 615, "name": "memogv", "count": 2, "languages": 1 }, { - "order": 613, + "order": 616, "name": "glaboryp", "count": 2, "languages": 1 }, { - "order": 614, + "order": 617, "name": "ovjohn", "count": 2, "languages": 1 }, { - "order": 615, + "order": 618, "name": "haryblanco20", "count": 2, "languages": 1 }, { - "order": 616, + "order": 619, "name": "christianhernandezb", "count": 2, "languages": 1 }, { - "order": 617, + "order": 620, "name": "akzorla", "count": 2, "languages": 1 }, { - "order": 618, + "order": 621, "name": "0pio", "count": 2, "languages": 1 }, { - "order": 619, + "order": 622, "name": "porto1090", "count": 2, "languages": 1 }, { - "order": 620, + "order": 623, "name": "johannhsdev", "count": 2, "languages": 1 }, { - "order": 621, + "order": 624, "name": "jago86", "count": 2, "languages": 1 }, { - "order": 622, + "order": 625, "name": "diegokarabin", "count": 2, "languages": 1 }, { - "order": 623, + "order": 626, "name": "gugliio", "count": 2, "languages": 1 }, { - "order": 624, + "order": 627, "name": "kcx46", "count": 2, "languages": 1 }, { - "order": 625, + "order": 628, "name": "nachodev7", "count": 2, "languages": 1 }, { - "order": 626, + "order": 629, "name": "fernandoatello", "count": 2, "languages": 1 }, { - "order": 627, + "order": 630, "name": "pablosalme", "count": 2, "languages": 1 }, { - "order": 628, + "order": 631, "name": "jsacristanbeltri", "count": 2, "languages": 1 }, { - "order": 629, + "order": 632, "name": "baauus", "count": 2, "languages": 1 }, { - "order": 630, + "order": 633, "name": "s384", "count": 2, "languages": 1 }, { - "order": 631, + "order": 634, "name": "lauradiazm29", "count": 2, "languages": 1 }, { - "order": 632, + "order": 635, "name": "pakomor", "count": 2, "languages": 1 }, { - "order": 633, + "order": 636, "name": "adogdev", "count": 2, "languages": 1 }, { - "order": 634, + "order": 637, "name": "eriickm", "count": 2, "languages": 1 }, { - "order": 635, + "order": 638, "name": "christiancoc", "count": 2, "languages": 1 }, { - "order": 636, + "order": 639, "name": "rojasricoo", "count": 2, "languages": 1 }, { - "order": 637, + "order": 640, "name": "inf015", "count": 2, "languages": 1 }, { - "order": 638, + "order": 641, "name": "csaraugusto2", "count": 2, "languages": 1 }, { - "order": 639, + "order": 642, "name": "zalazarmartin", "count": 2, "languages": 1 }, { - "order": 640, + "order": 643, "name": "ziellucio01", "count": 2, "languages": 1 }, { - "order": 641, + "order": 644, "name": "dota43ver", "count": 2, "languages": 1 }, { - "order": 642, + "order": 645, "name": "fjsubero", "count": 2, "languages": 1 }, { - "order": 643, + "order": 646, "name": "julind0", "count": 2, "languages": 1 }, { - "order": 644, + "order": 647, "name": "jmontoyac", "count": 2, "languages": 1 }, { - "order": 645, + "order": 648, "name": "dariangl", "count": 2, "languages": 1 }, { - "order": 646, - "name": "ggtorca", - "count": 2, - "languages": 1 - }, - { - "order": 647, + "order": 649, "name": "soydaviddev", "count": 2, "languages": 1 }, { - "order": 648, + "order": 650, "name": "e-techgod", "count": 2, "languages": 1 }, { - "order": 649, + "order": 651, "name": "aboredllama", "count": 2, "languages": 1 }, { - "order": 650, + "order": 652, "name": "nevaito", "count": 2, "languages": 1 }, { - "order": 651, + "order": 653, "name": "josue-py", "count": 2, "languages": 1 }, { - "order": 652, + "order": 654, "name": "nach012", "count": 2, "languages": 1 }, { - "order": 653, + "order": 655, "name": "dans182", "count": 2, "languages": 1 }, { - "order": 654, + "order": 656, "name": "freyfonseca", "count": 2, "languages": 1 }, { - "order": 655, + "order": 657, "name": "aegpgrafologo", "count": 2, "languages": 1 }, { - "order": 656, + "order": 658, "name": "alejandrovelasquezr", "count": 2, "languages": 1 }, { - "order": 657, + "order": 659, "name": "fabianpa505", "count": 2, "languages": 1 }, { - "order": 658, + "order": 660, "name": "carlosmarte23", "count": 2, "languages": 1 }, { - "order": 659, + "order": 661, "name": "anblackter", "count": 2, "languages": 1 }, { - "order": 660, + "order": 662, + "name": "steven9708m", + "count": 2, + "languages": 1 + }, + { + "order": 663, "name": "tic4", "count": 2, "languages": 1 }, { - "order": 661, + "order": 664, "name": "josephfaster", "count": 2, "languages": 1 }, { - "order": 662, + "order": 665, "name": "gregfc95", "count": 2, "languages": 1 }, { - "order": 663, + "order": 666, "name": "victore16", "count": 2, "languages": 1 }, { - "order": 664, + "order": 667, "name": "dokeys28", "count": 2, "languages": 1 }, { - "order": 665, + "order": 668, "name": "noaregui", "count": 2, "languages": 1 }, { - "order": 666, + "order": 669, "name": "alejandro-mantilla", "count": 2, "languages": 1 }, { - "order": 667, + "order": 670, "name": "gmigues", "count": 2, "languages": 1 }, { - "order": 668, + "order": 671, "name": "juanseevn", "count": 2, "languages": 1 }, { - "order": 669, + "order": 672, "name": "vesubius", "count": 2, "languages": 1 }, { - "order": 670, + "order": 673, "name": "zeti1231", "count": 2, "languages": 1 }, { - "order": 671, + "order": 674, "name": "cipollalucas", "count": 2, "languages": 1 }, { - "order": 672, + "order": 675, "name": "miguelberrio0810", "count": 2, "languages": 1 }, { - "order": 673, + "order": 676, "name": "santiagodc8", "count": 2, "languages": 1 }, { - "order": 674, + "order": 677, "name": "pedrojog", "count": 2, "languages": 1 }, { - "order": 675, + "order": 678, "name": "culebropalido", "count": 2, "languages": 1 }, { - "order": 676, + "order": 679, "name": "marioyellowy", "count": 2, "languages": 1 }, { - "order": 677, + "order": 680, "name": "jcknot", "count": 2, "languages": 1 }, { - "order": 678, + "order": 681, "name": "peeanoot", "count": 2, "languages": 1 }, { - "order": 679, + "order": 682, "name": "coronelsam", "count": 2, "languages": 1 }, { - "order": 680, + "order": 683, "name": "arhl2023", "count": 2, "languages": 1 }, { - "order": 681, + "order": 684, "name": "marianoemir", "count": 2, "languages": 1 }, { - "order": 682, + "order": 685, "name": "isidrojng", "count": 2, "languages": 1 }, { - "order": 683, + "order": 686, "name": "anaroncero", "count": 2, "languages": 1 }, { - "order": 684, + "order": 687, "name": "hersac", "count": 2, "languages": 1 }, { - "order": 685, + "order": 688, "name": "vecinacoo", "count": 2, "languages": 1 }, { - "order": 686, + "order": 689, "name": "juanmjimenezs", "count": 2, "languages": 1 }, { - "order": 687, + "order": 690, "name": "armentaangel", "count": 2, "languages": 1 }, { - "order": 688, + "order": 691, "name": "lordzzz777", "count": 2, "languages": 1 }, { - "order": 689, + "order": 692, "name": "sdm29gh", "count": 2, "languages": 1 }, { - "order": 690, + "order": 693, "name": "zonnen69", "count": 2, "languages": 1 }, { - "order": 691, + "order": 694, "name": "jmichael39", "count": 2, "languages": 1 }, { - "order": 692, + "order": 695, "name": "davidvilem", "count": 2, "languages": 1 }, { - "order": 693, + "order": 696, "name": "torvicv", "count": 1, "languages": 1 }, { - "order": 694, + "order": 697, "name": "dgquintero", "count": 1, "languages": 1 }, { - "order": 695, + "order": 698, "name": "c-blskv", "count": 1, "languages": 1 }, { - "order": 696, + "order": 699, "name": "emaerniquez", "count": 1, "languages": 1 }, { - "order": 697, + "order": 700, "name": "carolhs92", "count": 1, "languages": 1 }, { - "order": 698, + "order": 701, "name": "leonardo-henao", "count": 1, "languages": 1 }, { - "order": 699, + "order": 702, "name": "juancamilofvx", "count": 1, "languages": 1 }, { - "order": 700, + "order": 703, "name": "vikernes27666", "count": 1, "languages": 1 }, { - "order": 701, + "order": 704, "name": "cub-tor", "count": 1, "languages": 1 }, { - "order": 702, + "order": 705, "name": "nightmare79", "count": 1, "languages": 1 }, { - "order": 703, + "order": 706, "name": "carlosmperezm", "count": 1, "languages": 1 }, { - "order": 704, + "order": 707, "name": "gonzalinuz18", "count": 1, "languages": 1 }, { - "order": 705, + "order": 708, "name": "qwik-zghieb", "count": 1, "languages": 1 }, { - "order": 706, + "order": 709, "name": "miquelrr", "count": 1, "languages": 1 }, { - "order": 707, + "order": 710, "name": "miguel2rar", "count": 1, "languages": 1 }, { - "order": 708, + "order": 711, "name": "eamartin", "count": 1, "languages": 1 }, { - "order": 709, + "order": 712, "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { - "order": 710, + "order": 713, "name": "agustinfccll", "count": 1, "languages": 1 }, { - "order": 711, + "order": 714, "name": "anitandil", "count": 1, "languages": 1 }, { - "order": 712, + "order": 715, "name": "evilpodato04", "count": 1, "languages": 1 }, { - "order": 713, + "order": 716, "name": "francomyburg", "count": 1, "languages": 1 }, { - "order": 714, + "order": 717, "name": "neicervb", "count": 1, "languages": 1 }, { - "order": 715, + "order": 718, "name": "josephinoo", "count": 1, "languages": 1 }, { - "order": 716, + "order": 719, "name": "arathhh8", "count": 1, "languages": 1 }, { - "order": 717, + "order": 720, "name": "paluzz", "count": 1, "languages": 1 }, { - "order": 718, + "order": 721, "name": "theposi", "count": 1, "languages": 1 }, { - "order": 719, + "order": 722, "name": "vinyoles", "count": 1, "languages": 1 }, { - "order": 720, + "order": 723, "name": "omarroman29", "count": 1, "languages": 1 }, { - "order": 721, + "order": 724, "name": "1cel4nc3", "count": 1, "languages": 1 }, { - "order": 722, + "order": 725, "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { - "order": 723, + "order": 726, "name": "corvo-99", "count": 1, "languages": 1 }, { - "order": 724, + "order": 727, "name": "danielcastillo1112", "count": 1, "languages": 1 }, { - "order": 725, + "order": 728, "name": "malkarmah", "count": 1, "languages": 1 }, { - "order": 726, + "order": 729, + "name": "devm0nk3y", + "count": 1, + "languages": 1 + }, + { + "order": 730, "name": "sirvega83", "count": 1, "languages": 1 }, { - "order": 727, + "order": 731, "name": "franpua", "count": 1, "languages": 1 }, { - "order": 728, + "order": 732, "name": "van-02", "count": 1, "languages": 1 }, { - "order": 729, + "order": 733, "name": "x3mboy", "count": 1, "languages": 1 }, { - "order": 730, + "order": 734, "name": "mickysoft", "count": 1, "languages": 1 }, { - "order": 731, + "order": 735, "name": "deimoshall", "count": 1, "languages": 1 }, { - "order": 732, + "order": 736, "name": "palons29", "count": 1, "languages": 1 }, { - "order": 733, + "order": 737, "name": "serg032", "count": 1, "languages": 1 }, { - "order": 734, + "order": 738, "name": "seigigim", "count": 1, "languages": 1 }, { - "order": 735, + "order": 739, "name": "cibacoa", "count": 1, "languages": 1 }, { - "order": 736, + "order": 740, "name": "axelwestman", "count": 1, "languages": 1 }, { - "order": 737, + "order": 741, "name": "javodevon", "count": 1, "languages": 1 }, { - "order": 738, + "order": 742, "name": "mauricioyair", "count": 1, "languages": 1 }, { - "order": 739, + "order": 743, "name": "manuhssj", "count": 1, "languages": 1 }, { - "order": 740, + "order": 744, "name": "coletonosh", "count": 1, "languages": 1 }, { - "order": 741, + "order": 745, "name": "manugonzalito", "count": 1, "languages": 1 }, { - "order": 742, + "order": 746, "name": "gizelads", "count": 1, "languages": 1 }, { - "order": 743, + "order": 747, "name": "lucc4sz", "count": 1, "languages": 1 }, { - "order": 744, + "order": 748, "name": "feliaguirre7", "count": 1, "languages": 1 }, { - "order": 745, + "order": 749, "name": "rulo77", "count": 1, "languages": 1 }, { - "order": 746, + "order": 750, "name": "is2095", "count": 1, "languages": 1 }, { - "order": 747, + "order": 751, "name": "jancalos", "count": 1, "languages": 1 }, { - "order": 748, + "order": 752, "name": "marcosapodaca", "count": 1, "languages": 1 }, { - "order": 749, + "order": 753, "name": "angelcruzg23", "count": 1, "languages": 1 }, { - "order": 750, + "order": 754, "name": "ca2puntosv", "count": 1, "languages": 1 }, { - "order": 751, + "order": 755, "name": "armm77", "count": 1, "languages": 1 }, { - "order": 752, + "order": 756, "name": "afacorroloscos", "count": 1, "languages": 1 }, { - "order": 753, + "order": 757, "name": "rocadev2714", "count": 1, "languages": 1 }, { - "order": 754, + "order": 758, "name": "chrisfelixgil", "count": 1, "languages": 1 }, { - "order": 755, + "order": 759, "name": "sandrarg85", "count": 1, "languages": 1 }, { - "order": 756, + "order": 760, "name": "rootqui", "count": 1, "languages": 1 }, { - "order": 757, + "order": 761, "name": "ishimaku", "count": 1, "languages": 1 }, { - "order": 758, + "order": 762, "name": "pkmaventura", "count": 1, "languages": 1 }, { - "order": 759, + "order": 763, "name": "miguelgargallo", "count": 1, "languages": 1 }, { - "order": 760, + "order": 764, "name": "astriebeck", "count": 1, "languages": 1 }, { - "order": 761, + "order": 765, "name": "lobogeekmx", "count": 1, "languages": 1 }, { - "order": 762, + "order": 766, "name": "marvinagui", "count": 1, "languages": 1 }, { - "order": 763, + "order": 767, "name": "marqitos", "count": 1, "languages": 1 }, { - "order": 764, + "order": 768, "name": "nunezlagos", "count": 1, "languages": 1 }, { - "order": 765, + "order": 769, "name": "jcrobles99", "count": 1, "languages": 1 }, { - "order": 766, + "order": 770, "name": "ledyam", "count": 1, "languages": 1 }, { - "order": 767, + "order": 771, "name": "jatomas", "count": 1, "languages": 1 }, { - "order": 768, + "order": 772, "name": "jaennova", "count": 1, "languages": 1 }, { - "order": 769, + "order": 773, "name": "luisalberto22", "count": 1, "languages": 1 }, { - "order": 770, + "order": 774, "name": "francisleble", "count": 1, "languages": 1 }, { - "order": 771, + "order": 775, "name": "deiiviitdev", "count": 1, "languages": 1 }, { - "order": 772, + "order": 776, "name": "braiso-22", "count": 1, "languages": 1 }, { - "order": 773, + "order": 777, "name": "daniel-cas", "count": 1, "languages": 1 }, { - "order": 774, + "order": 778, "name": "acirdevelper", "count": 1, "languages": 1 }, { - "order": 775, + "order": 779, "name": "borjadelgadodev", "count": 1, "languages": 1 }, { - "order": 776, + "order": 780, "name": "elpeque29", "count": 1, "languages": 1 }, { - "order": 777, + "order": 781, "name": "jhordanluyo", "count": 1, "languages": 1 }, { - "order": 778, + "order": 782, "name": "davidcv-dev", "count": 1, "languages": 1 }, { - "order": 779, + "order": 783, "name": "mbmaeso", "count": 1, "languages": 1 }, { - "order": 780, + "order": 784, "name": "alvarominarro", "count": 1, "languages": 1 }, { - "order": 781, + "order": 785, "name": "bjchavez", "count": 1, "languages": 1 }, { - "order": 782, + "order": 786, "name": "madelefonb", "count": 1, "languages": 1 }, { - "order": 783, + "order": 787, "name": "lfwzk", "count": 1, "languages": 1 }, { - "order": 784, + "order": 788, "name": "ercky1980", "count": 1, "languages": 1 }, { - "order": 785, + "order": 789, "name": "jsruedatorres", "count": 1, "languages": 1 }, { - "order": 786, + "order": 790, "name": "jacobrwx", "count": 1, "languages": 1 }, { - "order": 787, + "order": 791, "name": "abengl", "count": 1, "languages": 1 }, { - "order": 788, + "order": 792, "name": "jd-gm", "count": 1, "languages": 1 }, { - "order": 789, + "order": 793, "name": "lucianogriffa", "count": 1, "languages": 1 }, { - "order": 790, + "order": 794, "name": "quirogapau", "count": 1, "languages": 1 }, { - "order": 791, + "order": 795, "name": "joseperesini", "count": 1, "languages": 1 }, { - "order": 792, + "order": 796, "name": "mhrosariom", "count": 1, "languages": 1 }, { - "order": 793, + "order": 797, "name": "sergioab7", "count": 1, "languages": 1 }, { - "order": 794, + "order": 798, "name": "santaravena", "count": 1, "languages": 1 }, { - "order": 795, + "order": 799, "name": "datrujillog", "count": 1, "languages": 1 }, { - "order": 796, + "order": 800, "name": "johnniew81", "count": 1, "languages": 1 }, { - "order": 797, + "order": 801, "name": "chriszaldana", "count": 1, "languages": 1 }, { - "order": 798, + "order": 802, "name": "antonioverdugo", "count": 1, "languages": 1 }, { - "order": 799, + "order": 803, "name": "kronomio", "count": 1, "languages": 1 }, { - "order": 800, + "order": 804, "name": "kevinramirez28", "count": 1, "languages": 1 }, { - "order": 801, + "order": 805, "name": "juanpablo-a", "count": 1, "languages": 1 }, { - "order": 802, + "order": 806, "name": "gerespinosa", "count": 1, "languages": 1 }, { - "order": 803, + "order": 807, "name": "1978acb", "count": 1, "languages": 1 }, { - "order": 804, + "order": 808, "name": "alexxawada", "count": 1, "languages": 1 }, { - "order": 805, + "order": 809, "name": "ricarsur", "count": 1, "languages": 1 }, { - "order": 806, + "order": 810, "name": "alemar16", "count": 1, "languages": 1 }, { - "order": 807, + "order": 811, "name": "pointfs", "count": 1, "languages": 1 }, { - "order": 808, + "order": 812, "name": "edperez07", "count": 1, "languages": 1 }, { - "order": 809, + "order": 813, "name": "dacronik", "count": 1, "languages": 1 }, { - "order": 810, + "order": 814, "name": "abraham9804", "count": 1, "languages": 1 }, { - "order": 811, + "order": 815, "name": "afl0r3s", "count": 1, "languages": 1 }, { - "order": 812, + "order": 816, "name": "dianelis1", "count": 1, "languages": 1 }, { - "order": 813, + "order": 817, "name": "fernandofl", "count": 1, "languages": 1 }, { - "order": 814, + "order": 818, "name": "conrado85", "count": 1, "languages": 1 }, { - "order": 815, + "order": 819, "name": "agus-ig", "count": 1, "languages": 1 }, { - "order": 816, + "order": 820, "name": "alvarommedia", "count": 1, "languages": 1 }, { - "order": 817, + "order": 821, "name": "maximotoro", "count": 1, "languages": 1 }, { - "order": 818, + "order": 822, "name": "m4xisil", "count": 1, "languages": 1 }, { - "order": 819, + "order": 823, "name": "francomoreira", "count": 1, "languages": 1 }, { - "order": 820, + "order": 824, "name": "aleclto7", "count": 1, "languages": 1 }, { - "order": 821, + "order": 825, "name": "nnunezmedina", "count": 1, "languages": 1 }, { - "order": 822, + "order": 826, "name": "codejoss", "count": 1, "languages": 1 }, { - "order": 823, + "order": 827, "name": "yaojema", "count": 1, "languages": 1 }, { - "order": 824, + "order": 828, "name": "romanocoder", "count": 1, "languages": 1 }, { - "order": 825, + "order": 829, "name": "sixtodev", "count": 1, "languages": 1 }, { - "order": 826, + "order": 830, "name": "cgomezadolfo", "count": 1, "languages": 1 }, { - "order": 827, + "order": 831, "name": "rojasvargas", "count": 1, "languages": 1 }, { - "order": 828, + "order": 832, "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { - "order": 829, + "order": 833, "name": "l3v1xx", "count": 1, "languages": 1 }, { - "order": 830, + "order": 834, "name": "patricioguerra30", "count": 1, "languages": 1 }, { - "order": 831, + "order": 835, "name": "lytsar", "count": 1, "languages": 1 }, { - "order": 832, + "order": 836, "name": "siuldev", "count": 1, "languages": 1 }, { - "order": 833, + "order": 837, "name": "brayancordova1", "count": 1, "languages": 1 }, { - "order": 834, + "order": 838, "name": "ronnieruuz", "count": 1, "languages": 1 }, { - "order": 835, + "order": 839, "name": "yessikamichelle", "count": 1, "languages": 1 }, { - "order": 836, + "order": 840, "name": "vainsito1", "count": 1, "languages": 1 }, { - "order": 837, + "order": 841, "name": "oscarletelier", "count": 1, "languages": 1 }, { - "order": 838, + "order": 842, "name": "kocho03", "count": 1, "languages": 1 }, { - "order": 839, + "order": 843, "name": "aidicoop", "count": 1, "languages": 1 }, { - "order": 840, + "order": 844, "name": "albabp", "count": 1, "languages": 1 }, { - "order": 841, + "order": 845, "name": "nozodev", "count": 1, "languages": 1 }, { - "order": 842, + "order": 846, "name": "mvillegas18", "count": 1, "languages": 1 }, { - "order": 843, + "order": 847, "name": "augustbs", "count": 1, "languages": 1 }, { - "order": 844, + "order": 848, "name": "luchof5", "count": 1, "languages": 1 }, { - "order": 845, + "order": 849, "name": "fullstackarlo", "count": 1, "languages": 1 }, { - "order": 846, + "order": 850, "name": "mdemena", "count": 1, "languages": 1 }, { - "order": 847, + "order": 851, "name": "cliverjimny123", "count": 1, "languages": 1 }, { - "order": 848, + "order": 852, "name": "rodmiggithub", "count": 1, "languages": 1 }, { - "order": 849, + "order": 853, "name": "s9code", "count": 1, "languages": 1 }, { - "order": 850, + "order": 854, "name": "javieradev", "count": 1, "languages": 1 }, { - "order": 851, + "order": 855, "name": "xnomada", "count": 1, "languages": 1 }, { - "order": 852, + "order": 856, "name": "miguelsarm", "count": 1, "languages": 1 }, { - "order": 853, + "order": 857, "name": "royhuamanavila", "count": 1, "languages": 1 }, { - "order": 854, + "order": 858, "name": "imista", "count": 1, "languages": 1 }, { - "order": 855, + "order": 859, "name": "denisortega", "count": 1, "languages": 1 }, { - "order": 856, + "order": 860, "name": "kouski", "count": 1, "languages": 1 }, { - "order": 857, + "order": 861, "name": "leydimadrid", "count": 1, "languages": 1 }, { - "order": 858, + "order": 862, "name": "frannm29", "count": 1, "languages": 1 }, { - "order": 859, + "order": 863, "name": "saintsluis", "count": 1, "languages": 1 }, { - "order": 860, + "order": 864, "name": "gc796", "count": 1, "languages": 1 }, { - "order": 861, + "order": 865, "name": "pierre-ol", "count": 1, "languages": 1 }, { - "order": 862, + "order": 866, "name": "francescoalterio", "count": 1, "languages": 1 }, { - "order": 863, + "order": 867, "name": "gustavoguerrero", "count": 1, "languages": 1 }, { - "order": 864, + "order": 868, "name": "diegoxxd", "count": 1, "languages": 1 }, { - "order": 865, + "order": 869, "name": "fzcarlitos", "count": 1, "languages": 1 }, { - "order": 866, + "order": 870, "name": "walkerlyna", "count": 1, "languages": 1 }, { - "order": 867, - "name": "erysnell", - "count": 1, - "languages": 1 - }, - { - "order": 868, + "order": 871, "name": "sejotaz", "count": 1, "languages": 1 }, { - "order": 869, + "order": 872, "name": "frcan89", "count": 1, "languages": 1 }, { - "order": 870, + "order": 873, "name": "nicorey89", "count": 1, "languages": 1 }, { - "order": 871, + "order": 874, "name": "alexis0717", "count": 1, "languages": 1 }, { - "order": 872, + "order": 875, "name": "edgonzz", "count": 1, "languages": 1 }, { - "order": 873, + "order": 876, "name": "vmga09", "count": 1, "languages": 1 }, { - "order": 874, + "order": 877, "name": "lfam200", "count": 1, "languages": 1 }, { - "order": 875, + "order": 878, "name": "kenzambrano", "count": 1, "languages": 1 }, { - "order": 876, + "order": 879, "name": "dmhenaopa", "count": 1, "languages": 1 }, { - "order": 877, + "order": 880, "name": "jpiacaruso", "count": 1, "languages": 1 }, { - "order": 878, + "order": 881, "name": "isnatthy", "count": 1, "languages": 1 }, { - "order": 879, + "order": 882, "name": "diego-santana23", "count": 1, "languages": 1 }, { - "order": 880, + "order": 883, "name": "peticas", "count": 1, "languages": 1 }, { - "order": 881, + "order": 884, "name": "flarien", "count": 1, "languages": 1 }, { - "order": 882, + "order": 885, "name": "franciscokarriere", "count": 1, "languages": 1 }, { - "order": 883, + "order": 886, "name": "pipeyz21", "count": 1, "languages": 1 }, { - "order": 884, + "order": 887, "name": "luisgarm", "count": 1, "languages": 1 }, { - "order": 885, + "order": 888, "name": "tetotille", "count": 1, "languages": 1 }, { - "order": 886, + "order": 889, "name": "vorosdev", "count": 1, "languages": 1 }, { - "order": 887, + "order": 890, "name": "santiagomac", "count": 1, "languages": 1 }, { - "order": 888, + "order": 891, "name": "implevacui", "count": 1, "languages": 1 }, { - "order": 889, + "order": 892, "name": "fede6299", "count": 1, "languages": 1 }, { - "order": 890, + "order": 893, "name": "kevin05m", "count": 1, "languages": 1 }, { - "order": 891, + "order": 894, "name": "diegomm27", "count": 1, "languages": 1 }, { - "order": 892, + "order": 895, "name": "pablo-lnx", "count": 1, "languages": 1 }, { - "order": 893, + "order": 896, "name": "darkohokage", "count": 1, "languages": 1 }, { - "order": 894, + "order": 897, "name": "jhonnfl", "count": 1, "languages": 1 }, { - "order": 895, + "order": 898, "name": "jarzatedev", "count": 1, "languages": 1 }, { - "order": 896, + "order": 899, "name": "brunom-93", "count": 1, "languages": 1 }, { - "order": 897, + "order": 900, "name": "alejandroruiz23", "count": 1, "languages": 1 }, { - "order": 898, + "order": 901, "name": "trollface77", "count": 1, "languages": 1 }, { - "order": 899, + "order": 902, "name": "jaimesoftdev", "count": 1, "languages": 1 }, { - "order": 900, + "order": 903, "name": "edm1ya", "count": 1, "languages": 1 }, { - "order": 901, + "order": 904, "name": "tartabullroberto", "count": 1, "languages": 1 }, { - "order": 902, + "order": 905, "name": "serg-pq", "count": 1, "languages": 1 }, { - "order": 903, + "order": 906, "name": "lara-vel-dev", "count": 1, "languages": 1 }, { - "order": 904, + "order": 907, "name": "alexisbarradev", "count": 1, "languages": 1 }, { - "order": 905, + "order": 908, "name": "kelvincb", "count": 1, "languages": 1 }, { - "order": 906, + "order": 909, "name": "carlostoledoe", "count": 1, "languages": 1 }, { - "order": 907, + "order": 910, "name": "gilbertho502", "count": 1, "languages": 1 }, { - "order": 908, + "order": 911, "name": "v0l0v", "count": 1, "languages": 1 }, { - "order": 909, + "order": 912, "name": "johao23", "count": 1, "languages": 1 }, { - "order": 910, + "order": 913, "name": "geridage", "count": 1, "languages": 1 }, { - "order": 911, + "order": 914, "name": "vmarialuzm", "count": 1, "languages": 1 }, { - "order": 912, + "order": 915, "name": "snowcardenas", "count": 1, "languages": 1 }, { - "order": 913, + "order": 916, "name": "and-y21", "count": 1, "languages": 1 }, { - "order": 914, + "order": 917, "name": "arturodlapaz17", "count": 1, "languages": 1 }, { - "order": 915, + "order": 918, "name": "manuu42", "count": 1, "languages": 1 }, { - "order": 916, + "order": 919, "name": "howlett9999", "count": 1, "languages": 1 }, { - "order": 917, + "order": 920, "name": "dkp-dev", "count": 1, "languages": 1 }, { - "order": 918, + "order": 921, "name": "hnaranjog", "count": 1, "languages": 1 }, { - "order": 919, + "order": 922, "name": "wallsified", "count": 1, "languages": 1 }, { - "order": 920, + "order": 923, + "name": "javitron100", + "count": 1, + "languages": 1 + }, + { + "order": 924, "name": "lluistech", "count": 1, "languages": 1 }, { - "order": 921, + "order": 925, "name": "mamartinez14", "count": 1, "languages": 1 }, { - "order": 922, + "order": 926, "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { - "order": 923, + "order": 927, "name": "bassalex27", "count": 1, "languages": 1 }, { - "order": 924, + "order": 928, "name": "yetlanezils", "count": 1, "languages": 1 }, { - "order": 925, + "order": 929, "name": "ndepaul82", "count": 1, "languages": 1 }, { - "order": 926, + "order": 930, "name": "amitchellg", "count": 1, "languages": 1 }, { - "order": 927, + "order": 931, "name": "turudev1979", "count": 1, "languages": 1 }, { - "order": 928, + "order": 932, "name": "deivimiller", "count": 1, "languages": 1 }, { - "order": 929, + "order": 933, "name": "haroldalb", "count": 1, "languages": 1 }, { - "order": 930, + "order": 934, "name": "dakkaj", "count": 1, "languages": 1 }, { - "order": 931, + "order": 935, "name": "jheisonquiroga", "count": 1, "languages": 1 }, { - "order": 932, + "order": 936, "name": "juli-m4", "count": 1, "languages": 1 }, { - "order": 933, + "order": 937, "name": "sergiomhernandez", "count": 1, "languages": 1 }, { - "order": 934, + "order": 938, "name": "masenace", "count": 1, "languages": 1 }, { - "order": 935, + "order": 939, "name": "e-xtian", "count": 1, "languages": 1 }, { - "order": 936, + "order": 940, "name": "vickalck", "count": 1, "languages": 1 }, { - "order": 937, + "order": 941, "name": "gmedinat911", "count": 1, "languages": 1 }, { - "order": 938, + "order": 942, "name": "eljavi0", "count": 1, "languages": 1 }, { - "order": 939, + "order": 943, "name": "yeisongil", "count": 1, "languages": 1 }, { - "order": 940, + "order": 944, "name": "julioorozco05", "count": 1, "languages": 1 }, { - "order": 941, + "order": 945, "name": "fergz1988", "count": 1, "languages": 1 }, { - "order": 942, + "order": 946, "name": "marcos0803", "count": 1, "languages": 1 }, { - "order": 943, + "order": 947, "name": "xcortes", "count": 1, "languages": 1 }, { - "order": 944, + "order": 948, "name": "facundorsabia", "count": 1, "languages": 1 }, { - "order": 945, + "order": 949, "name": "nico70012", "count": 1, "languages": 1 }, { - "order": 946, + "order": 950, "name": "charly024", "count": 1, "languages": 1 }, { - "order": 947, + "order": 951, "name": "devjerez", "count": 1, "languages": 1 }, { - "order": 948, + "order": 952, + "name": "copamire", + "count": 1, + "languages": 1 + }, + { + "order": 953, "name": "gersonoroz", "count": 1, "languages": 1 }, { - "order": 949, + "order": 954, "name": "jafuma0320", "count": 1, "languages": 1 }, { - "order": 950, + "order": 955, "name": "g4nd4lf", "count": 1, "languages": 1 }, { - "order": 951, + "order": 956, "name": "obed-tc", "count": 1, "languages": 1 }, { - "order": 952, + "order": 957, "name": "devkenn", "count": 1, "languages": 1 }, { - "order": 953, + "order": 958, "name": "xalejandrow", "count": 1, "languages": 1 }, { - "order": 954, + "order": 959, "name": "henrydavidprimera", "count": 1, "languages": 1 }, { - "order": 955, + "order": 960, "name": "luceldasilva", "count": 1, "languages": 1 }, { - "order": 956, + "order": 961, "name": "mjordanaam", "count": 1, "languages": 1 }, { - "order": 957, + "order": 962, "name": "betulioo", "count": 1, "languages": 1 }, { - "order": 958, + "order": 963, "name": "judithernandez", "count": 1, "languages": 1 }, { - "order": 959, + "order": 964, "name": "dimanu-py", "count": 1, "languages": 1 }, { - "order": 960, + "order": 965, "name": "snowale", "count": 1, "languages": 1 }, { - "order": 961, + "order": 966, "name": "cd1974", "count": 1, "languages": 1 }, { - "order": 962, + "order": 967, "name": "acobo3", "count": 1, "languages": 1 }, { - "order": 963, + "order": 968, "name": "isaacdci", "count": 1, "languages": 1 }, { - "order": 964, + "order": 969, "name": "manueldenisdev", "count": 1, "languages": 1 }, { - "order": 965, + "order": 970, "name": "anexo01", "count": 1, "languages": 1 }, { - "order": 966, + "order": 971, "name": "yamiyugi25", "count": 1, "languages": 1 }, { - "order": 967, + "order": 972, "name": "gl-informatica", "count": 1, "languages": 1 }, { - "order": 968, + "order": 973, "name": "miguelmancebo", "count": 1, "languages": 1 }, { - "order": 969, + "order": 974, "name": "neusier101", "count": 1, "languages": 1 }, { - "order": 970, + "order": 975, "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { - "order": 971, + "order": 976, "name": "xhinto", "count": 1, "languages": 1 }, { - "order": 972, + "order": 977, "name": "dacaldev", "count": 1, "languages": 1 }, { - "order": 973, + "order": 978, "name": "juan-cruz01", "count": 1, "languages": 1 }, { - "order": 974, + "order": 979, "name": "juanalbornoz32", "count": 1, "languages": 1 }, { - "order": 975, + "order": 980, "name": "cisneros2404", "count": 1, "languages": 1 }, { - "order": 976, + "order": 981, "name": "neftalyr", "count": 1, "languages": 1 }, { - "order": 977, + "order": 982, "name": "latorredev", "count": 1, "languages": 1 }, { - "order": 978, + "order": 983, "name": "osneidert", "count": 1, "languages": 1 }, { - "order": 979, + "order": 984, "name": "jrgranadosb", "count": 1, "languages": 1 }, { - "order": 980, + "order": 985, "name": "vicvilla30", "count": 1, "languages": 1 }, { - "order": 981, + "order": 986, "name": "carlosbb70", "count": 1, "languages": 1 }, { - "order": 982, + "order": 987, "name": "pablom-2015", "count": 1, "languages": 1 }, { - "order": 983, + "order": 988, "name": "xtinarita", "count": 1, "languages": 1 }, { - "order": 984, + "order": 989, "name": "wilsonbarrera", "count": 1, "languages": 1 }, { - "order": 985, + "order": 990, "name": "jereaguilar", "count": 1, "languages": 1 }, { - "order": 986, + "order": 991, "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { - "order": 987, + "order": 992, "name": "danidan1214", "count": 1, "languages": 1 }, { - "order": 988, + "order": 993, "name": "demegorash", "count": 1, "languages": 1 }, { - "order": 989, + "order": 994, "name": "cris10026", "count": 1, "languages": 1 }, { - "order": 990, + "order": 995, "name": "davidgramiro", "count": 1, "languages": 1 }, { - "order": 991, + "order": 996, "name": "jgarteag", "count": 1, "languages": 1 }, { - "order": 992, + "order": 997, "name": "adcarret", "count": 1, "languages": 1 }, { - "order": 993, + "order": 998, "name": "natanaelzubiri", "count": 1, "languages": 1 }, { - "order": 994, + "order": 999, "name": "diegogomezcor4", "count": 1, "languages": 1 }, { - "order": 995, + "order": 1000, "name": "perla-zg", "count": 1, "languages": 1 }, { - "order": 996, + "order": 1001, "name": "neshurtado", "count": 1, "languages": 1 }, { - "order": 997, + "order": 1002, "name": "marcelinoarias369", "count": 1, "languages": 1 }, { - "order": 998, + "order": 1003, "name": "pushodev", "count": 1, "languages": 1 }, { - "order": 999, + "order": 1004, "name": "sherkla12e", "count": 1, "languages": 1 }, { - "order": 1000, + "order": 1005, "name": "luisangeles20", "count": 1, "languages": 1 }, { - "order": 1001, + "order": 1006, "name": "omar8102", "count": 1, "languages": 1 }, { - "order": 1002, + "order": 1007, "name": "eatsangels", "count": 1, "languages": 1 }, { - "order": 1003, + "order": 1008, "name": "alejarandro", "count": 1, "languages": 1 }, { - "order": 1004, + "order": 1009, "name": "tashidian", "count": 1, "languages": 1 }, { - "order": 1005, + "order": 1010, "name": "alejandro000", "count": 1, "languages": 1 }, { - "order": 1006, + "order": 1011, "name": "francgci", "count": 1, "languages": 1 }, { - "order": 1007, + "order": 1012, "name": "krisipo", "count": 1, "languages": 1 }, { - "order": 1008, + "order": 1013, "name": "jalonso76", "count": 1, "languages": 1 }, { - "order": 1009, + "order": 1014, "name": "leo18q", "count": 1, "languages": 1 }, { - "order": 1010, + "order": 1015, "name": "sofiamfernandez", "count": 1, "languages": 1 }, { - "order": 1011, + "order": 1016, "name": "jgregoris", "count": 1, "languages": 1 }, { - "order": 1012, + "order": 1017, "name": "josuelopez5", "count": 1, "languages": 1 }, { - "order": 1013, + "order": 1018, "name": "mrf1989", "count": 1, "languages": 1 }, { - "order": 1014, + "order": 1019, "name": "zeraven09", "count": 1, "languages": 1 }, { - "order": 1015, + "order": 1020, "name": "pr1de-23", "count": 1, "languages": 1 }, { - "order": 1016, + "order": 1021, "name": "kronoscba", "count": 1, "languages": 1 }, { - "order": 1017, + "order": 1022, "name": "erickcis", "count": 1, "languages": 1 }, { - "order": 1018, + "order": 1023, "name": "experthacker444", "count": 1, "languages": 1 }, { - "order": 1019, + "order": 1024, "name": "javirr4", "count": 1, "languages": 1 }, { - "order": 1020, + "order": 1025, "name": "ignacioskm", "count": 1, "languages": 1 }, { - "order": 1021, + "order": 1026, "name": "jchernandez87", "count": 1, "languages": 1 }, { - "order": 1022, + "order": 1027, "name": "ferngpv", "count": 1, "languages": 1 }, { - "order": 1023, + "order": 1028, "name": "kshields51", "count": 1, "languages": 1 }, { - "order": 1024, + "order": 1029, "name": "salas89", "count": 1, "languages": 1 }, { - "order": 1025, + "order": 1030, "name": "90dread", "count": 1, "languages": 1 }, { - "order": 1026, + "order": 1031, "name": "chema-dw", "count": 1, "languages": 1 }, { - "order": 1027, + "order": 1032, "name": "sbngl", "count": 1, "languages": 1 }, { - "order": 1028, + "order": 1033, "name": "m4xxdev", "count": 1, "languages": 1 }, { - "order": 1029, + "order": 1034, "name": "cristianvergaraf", "count": 1, "languages": 1 }, { - "order": 1030, + "order": 1035, "name": "lizzymaken", "count": 1, "languages": 1 }, { - "order": 1031, + "order": 1036, "name": "jandortiz", "count": 1, "languages": 1 }, { - "order": 1032, + "order": 1037, "name": "claudios1980", "count": 1, "languages": 1 }, { - "order": 1033, + "order": 1038, "name": "sergiovelayos", "count": 1, "languages": 1 }, { - "order": 1034, + "order": 1039, "name": "miguelangel861", "count": 1, "languages": 1 }, { - "order": 1035, + "order": 1040, "name": "marcosjarrin", "count": 1, "languages": 1 }, { - "order": 1036, + "order": 1041, "name": "jandresalvar", "count": 1, "languages": 1 }, { - "order": 1037, + "order": 1042, "name": "joferpg", "count": 1, "languages": 1 }, { - "order": 1038, + "order": 1043, "name": "jlrojano", "count": 1, "languages": 1 }, { - "order": 1039, + "order": 1044, "name": "ivanserran", "count": 1, "languages": 1 }, { - "order": 1040, + "order": 1045, "name": "dany3gs", "count": 1, "languages": 1 }, { - "order": 1041, + "order": 1046, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1042, + "order": 1047, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1043, + "order": 1048, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1044, + "order": 1049, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1045, + "order": 1050, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1046, + "order": 1051, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1047, + "order": 1052, "name": "bycris13", "count": 1, "languages": 1 }, { - "order": 1048, + "order": 1053, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1049, + "order": 1054, "name": "v1k770r", "count": 1, "languages": 1 }, { - "order": 1050, + "order": 1055, "name": "gianellannie", "count": 1, "languages": 1 }, { - "order": 1051, + "order": 1056, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1052, + "order": 1057, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1053, + "order": 1058, "name": "fredylopez01", "count": 1, "languages": 1 }, { - "order": 1054, + "order": 1059, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1055, + "order": 1060, "name": "lautimorales", "count": 1, "languages": 1 }, { - "order": 1056, + "order": 1061, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1057, + "order": 1062, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1058, + "order": 1063, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1059, + "order": 1064, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1060, + "order": 1065, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1061, + "order": 1066, "name": "adriansaint07", "count": 1, "languages": 1 }, { - "order": 1062, + "order": 1067, "name": "javiir", "count": 1, "languages": 1 }, { - "order": 1063, + "order": 1068, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1064, + "order": 1069, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1065, + "order": 1070, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1066, + "order": 1071, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1067, + "order": 1072, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1068, + "order": 1073, "name": "jrgim", "count": 1, "languages": 1 }, { - "order": 1069, + "order": 1074, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1070, + "order": 1075, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1076, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1077, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1078, "name": "robermejia", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1079, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1080, "name": "reneguzman7", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1081, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1082, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1083, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1084, "name": "queralesdev", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1085, "name": "dovinhoyos", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1086, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1087, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1088, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1089, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1090, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1091, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1092, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1093, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1094, "name": "antoniojzp86", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1095, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1096, "name": "zyn7e", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1097, "name": "diegopardomontero", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1098, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1099, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1095, - "name": "password1989", - "count": 1, - "languages": 1 - }, - { - "order": 1096, + "order": 1100, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1101, "name": "clespinosa2024", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1102, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1103, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1104, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1105, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1106, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1107, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1108, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1109, "name": "rawc1nnamon", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1110, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1111, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1112, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1113, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1114, "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1115, "name": "orzefox", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1116, "name": "acirdeveloper", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1117, "name": "emiliordev", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1118, "name": "sve-nnn", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1119, "name": "edgarmedranoa", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1120, "name": "rafapg93", "count": 1, "languages": 1 }, { - "order": 1117, + "order": 1121, "name": "vickalc", "count": 1, "languages": 1 }, { - "order": 1118, + "order": 1122, "name": "riukac", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1123, "name": "rusian69", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1124, "name": "wijimenezz", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1125, "name": "albertovf", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1126, "name": "markayala13", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1127, "name": "rocha30", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1128, "name": "righelch", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1129, "name": "deathbat00", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1130, "name": "nicoloboo02", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1131, "name": "sergiopq", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1132, "name": "angeloro", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1133, "name": "jony-english22", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1134, "name": "tilordqwerty", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1135, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1136, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1137, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1138, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1139, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1140, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1141, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1142, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1143, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1144, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1145, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1146, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1147, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1144, + "order": 1148, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1145, + "order": 1149, "name": "willypaz243", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1150, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1151, "name": "alecraft8", "count": 1, "languages": 1 }, { - "order": 1148, + "order": 1152, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1149, + "order": 1153, "name": "juampaweb", "count": 1, "languages": 1 }, { - "order": 1150, + "order": 1154, "name": "girngoma", "count": 1, "languages": 1 }, { - "order": 1151, + "order": 1155, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1152, + "order": 1156, "name": "ddaniel27", "count": 1, "languages": 1 }, { - "order": 1153, + "order": 1157, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1154, + "order": 1158, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1155, + "order": 1159, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1156, + "order": 1160, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1157, + "order": 1161, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1158, + "order": 1162, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1159, + "order": 1163, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1160, + "order": 1164, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1161, + "order": 1165, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1162, + "order": 1166, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1163, + "order": 1167, "name": "ouendinga", "count": 1, "languages": 1 }, { - "order": 1164, + "order": 1168, "name": "melonconyogurt", "count": 1, "languages": 1 From 81a5fabbbdbc613f75f7211d74e6c24e803b0b6d Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Thu, 12 Sep 2024 19:51:54 -0500 Subject: [PATCH 184/539] Ejemplo de singleton generico --- Roadmap/23 - SINGLETON/java/simonguzman.java | 29 ++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Roadmap/23 - SINGLETON/java/simonguzman.java diff --git a/Roadmap/23 - SINGLETON/java/simonguzman.java b/Roadmap/23 - SINGLETON/java/simonguzman.java new file mode 100644 index 0000000000..67517b1246 --- /dev/null +++ b/Roadmap/23 - SINGLETON/java/simonguzman.java @@ -0,0 +1,29 @@ +public class simonguzman { + public static void main(String[] args) { + genericSingleton(); + } + + public static void genericSingleton(){ + Singleton singleton = Singleton.getInstance(); + singleton.showMessage(); + } + + public static class Singleton{ + private static Singleton instance; + + private Singleton(){ + + } + + public static Singleton getInstance(){ + if(instance == null){ + instance = new Singleton(); + } + return instance; + } + + public static void showMessage(){ + System.out.println("Soy un Singleton."); + } + } +} From cbdf00cb2b42bde2d2f3fca957fb29ca4f67e986 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Thu, 12 Sep 2024 20:05:23 -0500 Subject: [PATCH 185/539] Ejercicio #23 completado --- Roadmap/23 - SINGLETON/java/simonguzman.java | 52 ++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/Roadmap/23 - SINGLETON/java/simonguzman.java b/Roadmap/23 - SINGLETON/java/simonguzman.java index 67517b1246..6f12ee17e3 100644 --- a/Roadmap/23 - SINGLETON/java/simonguzman.java +++ b/Roadmap/23 - SINGLETON/java/simonguzman.java @@ -1,8 +1,60 @@ + public class simonguzman { public static void main(String[] args) { genericSingleton(); + additionalExercise(); + } + /**************************** Ejercicio adicional ****************************/ + public static void additionalExercise(){ + UserSession session = UserSession.getUserInstance(); + session.assignUser("001", "Simon Guzman", "sguzman", "sguzman@hotmail.com"); + System.out.println(session.getUserData()); + session.deleteSession(); + System.out.println(session.getClass()); + } + + public static class UserSession{ + private static UserSession instance; + + private String id; + private String name; + private String userName; + private String email; + + private UserSession(){ + + } + + public static UserSession getUserInstance(){ + if(instance == null){ + instance = new UserSession(); + } + return instance; + } + + public void assignUser(String id, String name, String userName, String email){ + this.id = id; + this.name = name; + this.userName = userName; + this.email = email; + } + + public String getUserData(){ + if (id == null){ + return "No hay usuarios en la sesion"; + } + return "ID: "+id+" ,username: " + userName + " ,name: " + name + " ,email: " + email; + } + + public void deleteSession(){ + id = null; + name = null; + userName = null; + email = null; + } } + /**************************** Ejemplo de singleton ****************************/ public static void genericSingleton(){ Singleton singleton = Singleton.getInstance(); singleton.showMessage(); From ebd2494642b07a35d33801978a05aaacc1e842a0 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Fri, 13 Sep 2024 00:23:31 -0400 Subject: [PATCH 186/539] 37 - JavaScript --- .../javascript/RicJDev.js | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js new file mode 100644 index 0000000000..a076937838 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js @@ -0,0 +1,114 @@ +/* +fetch('https://accounts.spotify.com/api/token', { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: new URLSearchParams({ + grant_type: 'client_credentials', + client_id: clientId, + client_secret: clientSecret, + }), +}) + .then((response) => response.json()) + .then((data) => { + const artistId = '4Z8W4fKeB5YxbusRsdQVPb' + + const url = `https://api.spotify.com/v1/artists/${artistId}` + + fetch(url, { + method: 'GET', + headers: { + Authorization: `${data.token_type} ${data.access_token}`, + }, + }) + .then((response) => { + if (!response.ok) { + throw new Error('Network response was not ok') + } + return response.json() + }) + .then((dataArtist) => { + console.log(dataArtist) + }) + .catch((error) => { + console.error('Error:', error) + }) + }) + .catch((error) => { + console.error('Error:', error) + }) +*/ + +// import * as readline from 'readline/promises' + +// const rl = readline.createInterface({ +// input: process.stdin, +// output: process.stdout, +// }) + +// async function getToken(clientId, clientSecret) { +// fetch('https://accounts.spotify.com/api/token', { +// method: 'POST', +// headers: { +// 'Content-Type': 'application/x-www-form-urlencoded', +// }, +// body: new URLSearchParams({ +// grant_type: 'client_credentials', +// client_id: clientId, +// client_secret: clientSecret, +// }), +// }) +// .then((response) => +// response +// .json() +// .then((data) => { +// return `${data.token_type} ${data.access_token}` +// }) +// .catch((err) => console.log(err)) +// ) +// .catch((err) => console.log(err)) +// } + +// const clientId = await rl.question('Ingrese su client ID. ') +// const clientSecret = await rl.question('Ingrese su client secret ID. ') + +// const token = await getToken(clientId, clientSecret).catch((err) => console.log(err)) + +// const artistId = '4Z8W4fKeB5YxbusRsdQVPb' + +// const url = `https://api.spotify.com/v1/artists/${artistId}` + +// fetch(url, { +// method: 'GET', +// headers: { +// Authorization: token, +// }, +// }) +// .then((response) => { +// if (!response.ok) { +// throw new Error('Network response was not ok') +// } +// return response.json() +// }) +// .then((dataArtist) => { +// console.log(dataArtist) +// }) +// .catch((error) => { +// console.error('Error:', error) +// }) + +// rl.close() + +/* + +* El archivo client.js (que no estará disponible dentro del repo) contiene las ID's de mi cuenta. + +* Para ejecutar el programa deberá crear las variables clientId y clientSecret y asignarles +* sus propias ID's o pasarlas como parámetros de la función getToken(). + +*/ +import { clientId, clientSecret } from './client.js' + +console.log(clientId) +console.log(clientSecret) From da13aecec4bf39b0e1343a5ba425401ed9cadb5a Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Fri, 13 Sep 2024 08:55:36 +0200 Subject: [PATCH 187/539] #02 javascript --- .../javascript/eulogioep.js | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/javascript/eulogioep.js diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/javascript/eulogioep.js b/Roadmap/02 - FUNCIONES Y ALCANCE/javascript/eulogioep.js new file mode 100644 index 0000000000..3ebd84e03f --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/javascript/eulogioep.js @@ -0,0 +1,82 @@ +// Variables globales +let contadorGlobal = 0; + +// 1. Función sin parámetros ni retorno +function saludar() { + console.log("¡Hola, mundo!"); +} + +// 2. Función con un parámetro y sin retorno +function saludarPersona(nombre) { + console.log(`¡Hola, ${nombre}!`); +} + +// 3. Función con múltiples parámetros y retorno +function sumar(a, b) { + return a + b; +} + +// 4. Función dentro de otra función +function operacionMatematica(a, b) { + function multiplicar(x, y) { + return x * y; + } + return multiplicar(a, b) + 10; +} + +// 5. Uso de una función incorporada en JavaScript +function obtenerFechaActual() { + return new Date().toLocaleDateString(); +} + +// 6. Demostración de variable local vs global +function incrementarContador() { + let contadorLocal = 0; + contadorLocal++; + contadorGlobal++; + console.log(`Contador local: ${contadorLocal}, Contador global: ${contadorGlobal}`); +} + +// Llamadas a las funciones y impresión de resultados +console.log("1. Función sin parámetros ni retorno:"); +saludar(); + +console.log("\n2. Función con un parámetro y sin retorno:"); +saludarPersona("Alice"); + +console.log("\n3. Función con múltiples parámetros y retorno:"); +console.log(`Suma de 5 y 3: ${sumar(5, 3)}`); + +console.log("\n4. Función dentro de otra función:"); +console.log(`Resultado de operación matemática: ${operacionMatematica(4, 5)}`); + +console.log("\n5. Uso de una función incorporada en JavaScript:"); +console.log(`Fecha actual: ${obtenerFechaActual()}`); + +console.log("\n6. Demostración de variable local vs global:"); +incrementarContador(); +incrementarContador(); + +// DIFICULTAD EXTRA +function imprimirYContar(texto1, texto2) { + let contadorNumeros = 0; + + for (let i = 1; i <= 100; i++) { + if (i % 3 === 0 && i % 5 === 0) { + console.log(texto1 + texto2); + } else if (i % 3 === 0) { + console.log(texto1); + } else if (i % 5 === 0) { + console.log(texto2); + } else { + console.log(i); + contadorNumeros++; + } + } + + return contadorNumeros; +} + +console.log("\nDIFICULTAD EXTRA:"); +const numerosPuros = imprimirYContar("Fizz", "Buzz"); +console.log(`Números impresos sin ser reemplazados por texto: ${numerosPuros}`); \ No newline at end of file From 7a6606ef639d4496b67a12ba0a00e94a214ba083 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Fri, 13 Sep 2024 08:57:05 +0200 Subject: [PATCH 188/539] #02 java --- .../java/eulogioep.java | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/java/eulogioep.java diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/java/eulogioep.java b/Roadmap/02 - FUNCIONES Y ALCANCE/java/eulogioep.java new file mode 100644 index 0000000000..2947377fbf --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/java/eulogioep.java @@ -0,0 +1,88 @@ +public class eulogioep { + // Variable global (estática en Java) + private static int contadorGlobal = 0; + + // 1. Método sin parámetros ni retorno + public static void saludar() { + System.out.println("¡Hola, mundo!"); + } + + // 2. Método con un parámetro y sin retorno + public static void saludarPersona(String nombre) { + System.out.println("¡Hola, " + nombre + "!"); + } + + // 3. Método con múltiples parámetros y retorno + public static int sumar(int a, int b) { + return a + b; + } + + // 4. Método que demuestra una "función" dentro de otra (usando una clase interna) + public static int operacionMatematica(int a, int b) { + class Multiplicador { + int multiplicar(int x, int y) { + return x * y; + } + } + Multiplicador mult = new Multiplicador(); + return mult.multiplicar(a, b) + 10; + } + + // 5. Uso de un método incorporado en Java + public static String obtenerFechaActual() { + return java.time.LocalDate.now().toString(); + } + + // 6. Demostración de variable local vs global (estática) + public static void incrementarContador() { + int contadorLocal = 0; + contadorLocal++; + contadorGlobal++; + System.out.println("Contador local: " + contadorLocal + ", Contador global: " + contadorGlobal); + } + + // DIFICULTAD EXTRA + public static int imprimirYContar(String texto1, String texto2) { + int contadorNumeros = 0; + + for (int i = 1; i <= 100; i++) { + if (i % 3 == 0 && i % 5 == 0) { + System.out.println(texto1 + texto2); + } else if (i % 3 == 0) { + System.out.println(texto1); + } else if (i % 5 == 0) { + System.out.println(texto2); + } else { + System.out.println(i); + contadorNumeros++; + } + } + + return contadorNumeros; + } + + public static void main(String[] args) { + System.out.println("1. Método sin parámetros ni retorno:"); + saludar(); + + System.out.println("\n2. Método con un parámetro y sin retorno:"); + saludarPersona("Alice"); + + System.out.println("\n3. Método con múltiples parámetros y retorno:"); + System.out.println("Suma de 5 y 3: " + sumar(5, 3)); + + System.out.println("\n4. Método que demuestra una \"función\" dentro de otra:"); + System.out.println("Resultado de operación matemática: " + operacionMatematica(4, 5)); + + System.out.println("\n5. Uso de un método incorporado en Java:"); + System.out.println("Fecha actual: " + obtenerFechaActual()); + + System.out.println("\n6. Demostración de variable local vs global:"); + incrementarContador(); + incrementarContador(); + + System.out.println("\nDIFICULTAD EXTRA:"); + int numerosPuros = imprimirYContar("Fizz", "Buzz"); + System.out.println("Números impresos sin ser reemplazados por texto: " + numerosPuros); + } +} \ No newline at end of file From 49fc82bfe168c9b18383be82f116074a4e5c8bda Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Fri, 13 Sep 2024 08:57:58 +0200 Subject: [PATCH 189/539] #02 php --- .../php/eulogioep.php | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/php/eulogioep.php diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/php/eulogioep.php b/Roadmap/02 - FUNCIONES Y ALCANCE/php/eulogioep.php new file mode 100644 index 0000000000..33ee4434de --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/php/eulogioep.php @@ -0,0 +1,87 @@ + \ No newline at end of file From 7eedb951233399310b98fc1b7053b979dc3f88e4 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Fri, 13 Sep 2024 08:59:23 +0200 Subject: [PATCH 190/539] #02 sql --- .../sql/eulogioep.sql | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/sql/eulogioep.sql diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/sql/eulogioep.sql b/Roadmap/02 - FUNCIONES Y ALCANCE/sql/eulogioep.sql new file mode 100644 index 0000000000..4b8b2a5a28 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/sql/eulogioep.sql @@ -0,0 +1,107 @@ +-- Asumimos que estamos usando MySQL para este ejemplo + +-- Creamos una base de datos para nuestros ejemplos +CREATE DATABASE IF NOT EXISTS ejemplos_funciones; +USE ejemplos_funciones; + +-- Creamos una tabla para almacenar un contador global +CREATE TABLE IF NOT EXISTS contador_global ( + valor INT DEFAULT 0 +); +INSERT INTO contador_global (valor) VALUES (0); + +-- 1. Procedimiento almacenado sin parámetros ni retorno +DELIMITER // +CREATE PROCEDURE saludar() +BEGIN + SELECT 'Hola, mundo!' AS mensaje; +END // +DELIMITER ; + +-- 2. Procedimiento almacenado con un parámetro y sin retorno +DELIMITER // +CREATE PROCEDURE saludarPersona(IN nombre VARCHAR(50)) +BEGIN + SELECT CONCAT('¡Hola, ', nombre, '!') AS mensaje; +END // +DELIMITER ; + +-- 3. Función con múltiples parámetros y retorno +DELIMITER // +CREATE FUNCTION sumar(a INT, b INT) RETURNS INT +DETERMINISTIC +BEGIN + RETURN a + b; +END // +DELIMITER ; + +-- 4. Función que simula una "función dentro de otra" +-- (En SQL no podemos definir funciones dentro de otras, pero podemos simular el comportamiento) +DELIMITER // +CREATE FUNCTION operacionMatematica(a INT, b INT) RETURNS INT +DETERMINISTIC +BEGIN + DECLARE resultado INT; + SET resultado = a * b + 10; + RETURN resultado; +END // +DELIMITER ; + +-- 5. Uso de una función incorporada en SQL +SELECT CURRENT_DATE() AS fecha_actual; + +-- 6. Demostración de variable local vs global +DELIMITER // +CREATE PROCEDURE incrementarContador() +BEGIN + DECLARE contador_local INT DEFAULT 0; + SET contador_local = contador_local + 1; + + UPDATE contador_global SET valor = valor + 1; + + SELECT contador_local AS contador_local, valor AS contador_global + FROM contador_global; +END // +DELIMITER ; + +-- DIFICULTAD EXTRA +DELIMITER // +CREATE PROCEDURE imprimirYContar(IN texto1 VARCHAR(50), IN texto2 VARCHAR(50), OUT numeros_puros INT) +BEGIN + DECLARE i INT DEFAULT 1; + DECLARE resultado VARCHAR(100); + SET numeros_puros = 0; + + WHILE i <= 100 DO + IF i % 3 = 0 AND i % 5 = 0 THEN + SET resultado = CONCAT(texto1, texto2); + ELSEIF i % 3 = 0 THEN + SET resultado = texto1; + ELSEIF i % 5 = 0 THEN + SET resultado = texto2; + ELSE + SET resultado = CAST(i AS CHAR); + SET numeros_puros = numeros_puros + 1; + END IF; + + SELECT resultado; + + SET i = i + 1; + END WHILE; +END // +DELIMITER ; + +-- Llamadas a los procedimientos y funciones +CALL saludar(); + +CALL saludarPersona('Alice'); + +SELECT sumar(5, 3) AS suma; + +SELECT operacionMatematica(4, 5) AS resultado_operacion; + +CALL incrementarContador(); +CALL incrementarContador(); + +CALL imprimirYContar('Fizz', 'Buzz', @numeros_puros); +SELECT @numeros_puros AS numeros_sin_reemplazar; \ No newline at end of file From 7dcff3de448ff299f8a11e56c731834129f1e382 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Fri, 13 Sep 2024 09:01:38 +0200 Subject: [PATCH 191/539] #02 typescript --- .../typescript/eulogioep.ts | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/typescript/eulogioep.ts diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/typescript/eulogioep.ts b/Roadmap/02 - FUNCIONES Y ALCANCE/typescript/eulogioep.ts new file mode 100644 index 0000000000..3d183414c8 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/typescript/eulogioep.ts @@ -0,0 +1,80 @@ +// Variable global +let contadorGlobal: number = 0; + +// 1. Función sin parámetros ni retorno +function saludar(): void { + console.log("¡Hola, mundo!"); +} + +// 2. Función con un parámetro y sin retorno +function saludarPersona(nombre: string): void { + console.log(`¡Hola, ${nombre}!`); +} + +// 3. Función con múltiples parámetros y retorno +function sumar(a: number, b: number): number { + return a + b; +} + +// 4. Función que demuestra una "función" dentro de otra +function operacionMatematica(a: number, b: number): number { + const multiplicar = (x: number, y: number): number => x * y; + return multiplicar(a, b) + 10; +} + +// 5. Uso de una función incorporada en TypeScript/JavaScript +function obtenerFechaActual(): string { + return new Date().toISOString().split('T')[0]; +} + +// 6. Demostración de variable local vs global +function incrementarContador(): void { + let contadorLocal: number = 0; + contadorLocal++; + contadorGlobal++; + console.log(`Contador local: ${contadorLocal}, Contador global: ${contadorGlobal}`); +} + +// DIFICULTAD EXTRA +function imprimirYContar(texto1: string, texto2: string): number { + let contadorNumeros: number = 0; + + for (let i: number = 1; i <= 100; i++) { + if (i % 3 === 0 && i % 5 === 0) { + console.log(texto1 + texto2); + } else if (i % 3 === 0) { + console.log(texto1); + } else if (i % 5 === 0) { + console.log(texto2); + } else { + console.log(i); + contadorNumeros++; + } + } + + return contadorNumeros; +} + +// Llamadas a las funciones y impresión de resultados +console.log("1. Función sin parámetros ni retorno:"); +saludar(); + +console.log("\n2. Función con un parámetro y sin retorno:"); +saludarPersona("Alice"); + +console.log("\n3. Función con múltiples parámetros y retorno:"); +console.log(`Suma de 5 y 3: ${sumar(5, 3)}`); + +console.log("\n4. Función que demuestra una \"función\" dentro de otra:"); +console.log(`Resultado de operación matemática: ${operacionMatematica(4, 5)}`); + +console.log("\n5. Uso de una función incorporada en TypeScript/JavaScript:"); +console.log(`Fecha actual: ${obtenerFechaActual()}`); + +console.log("\n6. Demostración de variable local vs global:"); +incrementarContador(); +incrementarContador(); + +console.log("\nDIFICULTAD EXTRA:"); +const numerosPuros: number = imprimirYContar("Fizz", "Buzz"); +console.log(`Números impresos sin ser reemplazados por texto: ${numerosPuros}`); \ No newline at end of file From 754d59992ae9a7942788e173988bbf4258b55ccd Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Fri, 13 Sep 2024 09:03:17 +0200 Subject: [PATCH 192/539] #01 typescript --- .../typescript/eulogioep.ts | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/eulogioep.ts diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/eulogioep.ts b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/eulogioep.ts new file mode 100644 index 0000000000..144674a2aa --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/eulogioep.ts @@ -0,0 +1,118 @@ +// Operadores Aritméticos +console.log("Operadores Aritméticos:"); +console.log(5 + 3); // Suma: 8 +console.log(10 - 4); // Resta: 6 +console.log(3 * 4); // Multiplicación: 12 +console.log(20 / 5); // División: 4 +console.log(23 % 5); // Módulo: 3 +console.log(2 ** 3); // Exponenciación: 8 + +// Operadores de Comparación +console.log("\nOperadores de Comparación:"); +console.log(5 > 3); // Mayor que: true +console.log(5 < 3); // Menor que: false +console.log(5 >= 5); // Mayor o igual que: true +console.log(5 <= 4); // Menor o igual que: false +console.log(5 === 5);// Igualdad estricta: true +console.log(5 !== 4);// Desigualdad estricta: true + +// Operadores Lógicos +console.log("\nOperadores Lógicos:"); +console.log(true && false); // AND lógico: false +console.log(true || false); // OR lógico: true +console.log(!true); // NOT lógico: false + +// Operadores de Asignación +console.log("\nOperadores de Asignación:"); +let x = 10; +console.log(x); // 10 +x += 5; +console.log(x); // 15 +x -= 3; +console.log(x); // 12 +x *= 2; +console.log(x); // 24 +x /= 4; +console.log(x); // 6 + +// Operadores de Identidad (para objetos) +console.log("\nOperadores de Identidad:"); +let obj1 = { name: "John" }; +let obj2 = { name: "John" }; +let obj3 = obj1; +console.log(obj1 === obj2); // false (diferentes objetos) +console.log(obj1 === obj3); // true (mismo objeto) + +// Operadores de Bits +console.log("\nOperadores de Bits:"); +console.log(5 & 3); // AND bit a bit: 1 +console.log(5 | 3); // OR bit a bit: 7 +console.log(5 ^ 3); // XOR bit a bit: 6 +console.log(~5); // NOT bit a bit: -6 +console.log(5 << 1); // Desplazamiento a la izquierda: 10 +console.log(5 >> 1); // Desplazamiento a la derecha: 2 + +// Estructuras de Control + +// Condicional if-else +console.log("\nCondicional if-else:"); +let age = 18; +if (age >= 18) { + console.log("Eres mayor de edad"); +} else { + console.log("Eres menor de edad"); +} + +// Condicional switch +console.log("\nCondicional switch:"); +let day = "Lunes"; +switch (day) { + case "Lunes": + console.log("Hoy es lunes"); + break; + case "Martes": + console.log("Hoy es martes"); + break; + default: + console.log("Es otro día de la semana"); +} + +// Bucle for +console.log("\nBucle for:"); +for (let i = 0; i < 5; i++) { + console.log(`Iteración ${i}`); +} + +// Bucle while +console.log("\nBucle while:"); +let count = 0; +while (count < 3) { + console.log(`Contador: ${count}`); + count++; +} + +// Bucle do-while +console.log("\nBucle do-while:"); +let num = 0; +do { + console.log(`Número: ${num}`); + num++; +} while (num < 3); + +// Manejo de excepciones +console.log("\nManejo de excepciones:"); +try { + throw new Error("Este es un error de ejemplo"); +} catch (error) { + console.log(`Error capturado: ${error.message}`); +} finally { + console.log("Este bloque siempre se ejecuta"); +} + +// DIFICULTAD EXTRA +console.log("\nDIFICULTAD EXTRA:"); +for (let i = 10; i <= 55; i++) { + if (i % 2 === 0 && i !== 16 && i % 3 !== 0) { + console.log(i); + } +} \ No newline at end of file From 59c0329fc4d38c6d0d9ebcc8bf4ea4974e7a833e Mon Sep 17 00:00:00 2001 From: Bruce <88008233+Roswell468@users.noreply.github.com> Date: Fri, 13 Sep 2024 10:29:47 -0300 Subject: [PATCH 193/539] Rename Yampi to cdryampi.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Atención a las reglas. El nombre del fichero debe coincidir con el de tu usuario de GitHub más la extensión del lenguaje utilizado 😉 --- Roadmap/37 - OASIS VS LINKIN PARK/python/{Yampi => cdryampi.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/37 - OASIS VS LINKIN PARK/python/{Yampi => cdryampi.py} (100%) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/Yampi b/Roadmap/37 - OASIS VS LINKIN PARK/python/cdryampi.py similarity index 100% rename from Roadmap/37 - OASIS VS LINKIN PARK/python/Yampi rename to Roadmap/37 - OASIS VS LINKIN PARK/python/cdryampi.py From ec6f9c99db744270bc9de0c8a22a6122336c527b Mon Sep 17 00:00:00 2001 From: Bruce <88008233+Roswell468@users.noreply.github.com> Date: Fri, 13 Sep 2024 10:34:03 -0300 Subject: [PATCH 194/539] Rename andry.py to arperezinf.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El nombre del fichero debe coincidir con tu usuario de GitHub 😉 --- .../python/{andry.py => arperezinf.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/{andry.py => arperezinf.py} (100%) diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/andry.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/arperezinf.py similarity index 100% rename from Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/andry.py rename to Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/arperezinf.py From febb29b44b544c97bb1a001bc4b7953efaac2e1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?fabi=C3=A1n?= Date: Fri, 13 Sep 2024 11:24:18 -0300 Subject: [PATCH 195/539] #01 - C++ --- .../c++/whiterunjarl.cpp | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/whiterunjarl.cpp diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/whiterunjarl.cpp b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/whiterunjarl.cpp new file mode 100644 index 0000000000..c70c75b645 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/whiterunjarl.cpp @@ -0,0 +1,48 @@ +#include +using namespace std; + +// operadores aritméticos + +int suma = 1 + 2; // 3 +int resta = 4 - 2; // 2 +int multiplicar = 4 * 2; // 8 +int division = 80 / 2; // 40 +int modulo = 10 % 4; // resto es 2 + + +// Conjunción (&&) chequeo de dos condiciones que se deben cumplir simultaneamente +// no olvidarse el camelCase al declarar +void mostrarValidacion() +{ + cout << "Esto es valido, ha funcionado"; +} + +// negación ! +bool esFalso = !true; // false + + +int c = 1; +// Disyunción(|| ) : es igual al OR (si una de las dos se cumple, ejecuta) +bool opcionValida = (c == 1) || (c == 2); // true si c es 1 o 2 + + + + +int main() +{ + cout << "esto funciona" << endl; + cout << suma << endl; + cout << resta << endl; + cout << multiplicar << endl; + cout << division << endl; + cout << modulo << endl; + cout << opcionValida << endl; + if (multiplicar < 10 && modulo > 0) + { + mostrarValidacion(); + } + + + + return 0; +} From b228ad8291d2a41cf170e1944ba8977b763ccc46 Mon Sep 17 00:00:00 2001 From: resbaloso <134111217+raynerpv2022@users.noreply.github.com> Date: Fri, 13 Sep 2024 17:33:28 +0200 Subject: [PATCH 196/539] #18 PYTHON and GO --- Roadmap/18 - CONJUNTOS/go/raynerpv2022.go | 128 ++++++++++++++++++ Roadmap/18 - CONJUNTOS/python/raynerpv2022.py | 107 +++++++++++++++ 2 files changed, 235 insertions(+) create mode 100644 Roadmap/18 - CONJUNTOS/go/raynerpv2022.go create mode 100644 Roadmap/18 - CONJUNTOS/python/raynerpv2022.py diff --git a/Roadmap/18 - CONJUNTOS/go/raynerpv2022.go b/Roadmap/18 - CONJUNTOS/go/raynerpv2022.go new file mode 100644 index 0000000000..fc90e202fd --- /dev/null +++ b/Roadmap/18 - CONJUNTOS/go/raynerpv2022.go @@ -0,0 +1,128 @@ +package main + +import "fmt" + +// /* +// * EJERCICIO: +// * Utilizando tu lenguaje crea un conjunto de datos y realiza las siguientes +// * operaciones (debes utilizar una estructura que las soporte): +// * - Añade un elemento al final. +// * - Añade un elemento al principio. +// * - Añade varios elementos en bloque al final. +// * - Añade varios elementos en bloque en una posición concreta. +// * - Elimina un elemento en una posición concreta. +// * - Actualiza el valor de un elemento en una posición concreta. +// * - Comprueba si un elemento está en un conjunto. +// * - Elimina todo el contenido del conjunto. +// * + +/* DIFICULTAD EXTRA (opcional): + * Muestra ejemplos de las siguientes operaciones con conjuntos: + * - Unión. + * - Intersección. + * - Diferencia. + * - Diferencia simétrica. + */ + +func main() { + + data := []int{1, 2, 3, 4} + fmt.Printf("Original DATA %v\n", data) + data = append(data, 5) + fmt.Printf("add items at the end %v\n", data) + + // append(data[:1], data[0:]...) en este ejemplo, da como resultado [1, 1, 2, 3, 4]. + // Aquí, el primer elemento [1] se duplica, pero se está agregando un espacio adicional para el nuevo elemento. + data = append(data[:1], data[0:]...) + data[0] = 0 + fmt.Printf("add item at the Start %v\n", data) + + data = append(data, []int{6, 7, 8}...) + fmt.Printf("add several items at the end %v\n", data) + + // Crear una nueva slice con espacio para los valores adicionales + // y concatenar las partes del slice con los nuevos valores + // es decir parto desde 0 hasta 4, conacteno el nuevo slice, y pego de 5 hasta final + data = append(data[:5], append([]int{-1, -2, -3}, data[5:]...)...) + fmt.Printf("add several items at index position %v\n", data) + + // creo primer slice hasta posicion deseada a eliminar y el segundo slice desde la posicion siguente, + // eliinando el elemento + data = append(data[:3], data[4:]...) + fmt.Printf("add several items at index position %v\n", data) + + data[3] = 100 + fmt.Printf("Update item at index position %v\n", data) + + found := false + for _, v := range data { + if v == 100 { + fmt.Printf(" %v is in slice %v\n", 100, data) + found = true + break + } + } + if !found { + fmt.Printf(" %v is NOT in slice %v\n", 100, data) + } + data = []int{} + fmt.Printf(" Data empty %v\n", data) + + // EXTRA + + set1 := map[int]bool{0: true, 2: true, 4: true, 6: true, 8: true, 10: true} + set2 := map[int]bool{1: true, 2: true, 3: true, 4: true, 5: true, 6: true, 7: true, 8: true, 9: true, 10: true} + + // Interseccion + interseccion := map[int]bool{} + for i, _ := range set1 { + + intValue := set2[i] + if intValue { + interseccion[i] = true + } + } + fmt.Printf(" INTERSECCION %v\n", interseccion) + + // diferencia set 1 con set2 + + diferencia1 := map[int]bool{} + for i, _ := range set1 { + dif := set2[i] + if !dif { + diferencia1[i] = true + } + } + + fmt.Printf(" Diferencia Set1 con Set2 %v\n", diferencia1) + + // diferencia set 1 con set2 + + diferencia2 := map[int]bool{} + for i, _ := range set2 { + dif := set1[i] + if !dif { + diferencia2[i] = true + } + } + + fmt.Printf(" Diferencia Set2 con Set1 %v\n", diferencia2) + + // diferencia simetrica + + for i, _ := range diferencia1 { + + diferencia2[i] = true + + } + + fmt.Printf(" Diferencia simetrica %v\n", diferencia2) + + // union + + for i, _ := range set1 { + set2[i] = true + } + fmt.Printf(" UNION %v\n", set2) + +} diff --git a/Roadmap/18 - CONJUNTOS/python/raynerpv2022.py b/Roadmap/18 - CONJUNTOS/python/raynerpv2022.py new file mode 100644 index 0000000000..70d5a45d0b --- /dev/null +++ b/Roadmap/18 - CONJUNTOS/python/raynerpv2022.py @@ -0,0 +1,107 @@ +# /* +# * EJERCICIO: +# * Utilizando tu lenguaje crea un conjunto de datos y realiza las siguientes +# * operaciones (debes utilizar una estructura que las soporte): + +class MyConjunto: + def __init__(self, conjunto=[]) -> None: + self.conjunto = conjunto + +# * - Añade un elemento al final. + def insert_at_end(self, items): + self.conjunto.append(items) + + # * - Añade un elemento al principio. + def insert_at_start(self, items): + self.conjunto.insert(0,items) + + # * - Añade varios elementos en bloque al final. + def bloque_At_end(self, bloque): + self.conjunto.extend(bloque) + + + # * - Añade varios elementos en bloque en una posición concreta. + def insertBloque(self,pos, bloque): + self.conjunto[pos:pos] = bloque + + + # * - Elimina un elemento en una posición concreta. + def delete_at_index(self, index): + + print(f"se elimino el items {self.conjunto.pop(index)}") + + # * - Actualiza el valor de un elemento en una posición concreta. + def update_at_index(self, index, new_value): + self.conjunto[index] = new_value + + # * - Comprueba si un elemento está en un conjunto. + def chek_value(self, items): + print(f"Elemento {items} esta en {self.conjunto}? : {items in self.conjunto}") + + + + # * - Elimina todo el contenido del conjunto. + def remove_data(self): + self.conjunto.clear() + + def print_data(self): + print(self.conjunto) + + +conjunto = MyConjunto() +conjunto.print_data() +conjunto.insert_at_end(4) +conjunto.print_data() +conjunto.bloque_At_end([1,2,3,4,5,6]) +conjunto.print_data() +conjunto.insert_at_start(0) +conjunto.print_data() +conjunto.insertBloque(3,[99,98,97]) +conjunto.print_data() +conjunto.update_at_index(0,100) +conjunto.print_data() +conjunto.delete_at_index(4) +conjunto.print_data() +conjunto.chek_value(100) +conjunto.print_data() +conjunto.chek_value(123) +conjunto.print_data() +conjunto.print_data() +conjunto.remove_data() +conjunto.print_data() + + + + # * + + + + + + +# * DIFICULTAD EXTRA (opcional): +# * Muestra ejemplos de las siguientes operaciones con conjuntos: +# * - Unión. +# * - Intersección. +# * - Diferencia. +# * - Diferencia simétrica. +# */ + +set1 = {2,4,6,8,10} +set2 = {1,2,3,4,5,7,9} + + +print(f"UNION {set1.union(set2)}") +print(f"INTERSECCION {set1.intersection(set2)}") +print(f"Diferencia {set1.difference(set2)}") +print(f"Diferencia {set2.difference(set1)}") +print(f"Diferencia Simetrica {set1.symmetric_difference(set2)}") + +# usando lista +s1 = [2,4,6,8,10] +s2 = [1,2,3,4,5,7,9] + +# Union + +print("UNION", set(s1+s2)) + From 785ac981a51a281c137f86bb46876a7f9540116c Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 13 Sep 2024 10:57:51 -0500 Subject: [PATCH 197/539] Ejemplo generico de patron decorator --- .../24 - DECORADORES/java/simonguzman.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Roadmap/24 - DECORADORES/java/simonguzman.java diff --git a/Roadmap/24 - DECORADORES/java/simonguzman.java b/Roadmap/24 - DECORADORES/java/simonguzman.java new file mode 100644 index 0000000000..23671dd918 --- /dev/null +++ b/Roadmap/24 - DECORADORES/java/simonguzman.java @@ -0,0 +1,54 @@ + + +public class simonguzman { + public static void main(String[] args) { + genericExample(); + } + + + /***************************** Ejemplo generico *****************************/ + + static void genericExample(){ + Component component = new ConcreteComponent(); + Component decorated = new ConcreteDecorator(component); + decorated.operation(); + } + static interface Component{ + void operation(); + } + + static class ConcreteComponent implements Component{ + @Override + public void operation() { + System.out.println("Ejecutando operacion base..."); + } + } + + static abstract class Decorator implements Component{ + protected Component component; + + public Decorator(Component component){ + this.component = component; + } + + public void operation() { + this.component.operation(); + } + } + + static class ConcreteDecorator extends Decorator{ + public ConcreteDecorator(Component component){ + super(component); + } + + @Override + public void operation() { + super.operation(); + addFunctionality(); + } + + private void addFunctionality(){ + System.out.println("Funcionalidad adicional del decorador."); + } + } +} From cba9518b5c83d1dbb5396cec1567985ca3694fef Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 13 Sep 2024 11:01:16 -0500 Subject: [PATCH 198/539] =?UTF-8?q?Documentacion=20peque=C3=B1a=20del=20co?= =?UTF-8?q?digo=20generico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Roadmap/24 - DECORADORES/java/simonguzman.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Roadmap/24 - DECORADORES/java/simonguzman.java b/Roadmap/24 - DECORADORES/java/simonguzman.java index 23671dd918..48dc429719 100644 --- a/Roadmap/24 - DECORADORES/java/simonguzman.java +++ b/Roadmap/24 - DECORADORES/java/simonguzman.java @@ -8,15 +8,19 @@ public static void main(String[] args) { /***************************** Ejemplo generico *****************************/ + static void genericExample(){ Component component = new ConcreteComponent(); Component decorated = new ConcreteDecorator(component); decorated.operation(); } + + //Interfaz base static interface Component{ void operation(); } + //Componente concreto static class ConcreteComponent implements Component{ @Override public void operation() { @@ -24,6 +28,7 @@ public void operation() { } } + //Decorador abstracto static abstract class Decorator implements Component{ protected Component component; @@ -36,6 +41,7 @@ public void operation() { } } + //Decorador concreto que añade funcionalidad static class ConcreteDecorator extends Decorator{ public ConcreteDecorator(Component component){ super(component); From 3a3250ba7beb213afb6e57f148c935cf8b2f5430 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 13 Sep 2024 11:23:56 -0500 Subject: [PATCH 199/539] Ejemplo adicional aplicando el patron decorator --- .../24 - DECORADORES/java/simonguzman.java | 70 ++++++++++++++++++- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/Roadmap/24 - DECORADORES/java/simonguzman.java b/Roadmap/24 - DECORADORES/java/simonguzman.java index 48dc429719..fabcfd5e13 100644 --- a/Roadmap/24 - DECORADORES/java/simonguzman.java +++ b/Roadmap/24 - DECORADORES/java/simonguzman.java @@ -1,14 +1,80 @@ +import java.util.HashMap; +import java.util.Map; + + public class simonguzman { public static void main(String[] args) { genericExample(); + example(); } + /***************************** Ejemplo de implemetacion mas complejo *****************************/ + static void example(){ + UserService userService = new LoginAttemptsDecorator(new BasicUserService(), 3); + userService.login("user1", "password"); + userService.login("user1", "wrongpassword"); + userService.login("user1", "wrongpassword"); + userService.login("user1", "wrongpassword"); + userService.login("user1", "wrongpassword"); + } + static interface UserService{ + boolean login(String username, String password); + } - /***************************** Ejemplo generico *****************************/ + static class BasicUserService implements UserService{ + private Map userDatabase = new HashMap<>(); - + public BasicUserService(){ + userDatabase.put("user1", "password"); + userDatabase.put("user2", "12345"); + } + + @Override + public boolean login(String username, String password){ + String storedPassword = userDatabase.get(username); + if(storedPassword != null && storedPassword.equals(password)){ + System.out.println("Inicio de sesion exitoso para "+username); + return true; + }else{ + System.out.println("Credenciales incorrectas para "+username); + return false; + } + } + } + + static class LoginAttemptsDecorator implements UserService{ + private UserService userService; + private Map loginAttempts; + private int maxAttempts; + + public LoginAttemptsDecorator(UserService userService, int maxAttempts) { + this.userService = userService; + this.maxAttempts = maxAttempts; + this.loginAttempts = new HashMap<>(); + } + + @Override + public boolean login(String username, String password) { + if(loginAttempts.getOrDefault(username, 0) >= maxAttempts){ + System.out.println("Cuenta bloqueada para "+username+" por exceder los intentos permitidos"); + return false; + } + + boolean success = userService.login(username, password); + if(!success){ + loginAttempts.put(username, loginAttempts.getOrDefault(username, 0)+1); + System.out.println("Intentos fallidos para "+username+":" + loginAttempts.get(username)); + }else{ + loginAttempts.put(username, 0); + } + return success; + } + + } + + /***************************** Ejemplo generico *****************************/ static void genericExample(){ Component component = new ConcreteComponent(); Component decorated = new ConcreteDecorator(component); From 4401f17b3cc2ace568edc31a3e4e32a37949a884 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 13 Sep 2024 11:28:25 -0500 Subject: [PATCH 200/539] Documentacion del ejemplo adicional --- Roadmap/24 - DECORADORES/java/simonguzman.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Roadmap/24 - DECORADORES/java/simonguzman.java b/Roadmap/24 - DECORADORES/java/simonguzman.java index fabcfd5e13..158da279bf 100644 --- a/Roadmap/24 - DECORADORES/java/simonguzman.java +++ b/Roadmap/24 - DECORADORES/java/simonguzman.java @@ -11,7 +11,13 @@ public static void main(String[] args) { } /***************************** Ejemplo de implemetacion mas complejo *****************************/ + /*Se realizo un ejemplo adicional para mostrar mejor y poner en practica la sintaxis + * del patron decorador, en el cual se busco simular lo que seria un login de una cuenta + * de un usuario, con sus respectivas validaciones + */ static void example(){ + + //Simulacion de inicio de sesion. UserService userService = new LoginAttemptsDecorator(new BasicUserService(), 3); userService.login("user1", "password"); userService.login("user1", "wrongpassword"); @@ -19,14 +25,17 @@ static void example(){ userService.login("user1", "wrongpassword"); userService.login("user1", "wrongpassword"); } + //Interfaz base del servicio de usuario static interface UserService{ boolean login(String username, String password); } + //implementacion basica del servicio de usuario static class BasicUserService implements UserService{ private Map userDatabase = new HashMap<>(); public BasicUserService(){ + //Simulacion de una base de datos de usuarios userDatabase.put("user1", "password"); userDatabase.put("user2", "12345"); } @@ -44,6 +53,7 @@ public boolean login(String username, String password){ } } + //Decorador para contar los intentos de inicio de sesion static class LoginAttemptsDecorator implements UserService{ private UserService userService; private Map loginAttempts; From 430adfbbe6b174ef640e7a9d407655aeab460a3a Mon Sep 17 00:00:00 2001 From: javitron100 <86791160+javitron100@users.noreply.github.com> Date: Fri, 13 Sep 2024 18:42:07 +0200 Subject: [PATCH 201/539] #01 - Python --- .../python/javitron100.py | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/javitron100.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/javitron100.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/javitron100.py new file mode 100644 index 0000000000..dadae03234 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/javitron100.py @@ -0,0 +1,106 @@ +# OPERADORES Y ESTRUCTURAS DE CONTROL + +# Operadores aritméticos +suma = 10 + 5 +resta = 18 - 4 +multiplicacion = 8 * 11 +division = 120 / 3 + +print(f"El resultado de la suma es {suma}") +print(f"El resultado de la resta es {resta}") +print(f"El resultado de la multiplicación es {multiplicacion}") +print(f"El resultado de la división es {division}") + + +# Operadores lógicos +verdadero = True +falso = False + +resultado = verdadero and verdadero +print (f"Verdadero y Verdadero es igual a {resultado}") +resultado = verdadero or falso +print(f"Veradero o Falso es igual a {resultado}") +resultado = not verdadero +print(f"No verdadero es igual a {resultado}") + + +# Operadores de comparación +resultado = 7 > 8 +print(f"7 es mayor que 8? {resultado}") +resultado = 10 < 20 +print(f"10 es menor que 20? {resultado}") +resultado = 26 <= 29 +print(f"26 es menor o igual que 29? {resultado}") +resultado = 34 >= 104 +print (f"34 es mayor o igual que 104? {resultado}") +resultado = 56 == 56 +print(f"56 es igual a 56? {resultado}") +resultado = 77 != 77 +print(f"77 es distinto de 77? {resultado}") + + +# Operadores de asignación +numero = 17 + +numero+=2 +print(f"El valor actual de la variable número es {numero}") +numero-=2 +print(f"El valor actual de la variable número es {numero}") +numero*=2 +print(f"El valor actual de la variable número es {numero}") +numero/=2 +print(f"El valor actual de la variable número es {numero}") + + +# Operadores de identidad +objeto1 = 10 +objeto2 = [12, 14] + +print(f"Objeto1 es Objeto2? {objeto1 is objeto2}") +print(f"Objeto1 no es Objeto2? {objeto1 is not objeto2}") + + +# Operadores de pertenencia +print(f"17 está en [1, 14, 17, 34]? {17 in [1, 14, 17, 34]}") +print(f"17 no está en [1, 14, 17, 34]? {17 not in [1, 14, 17, 34]}") + + +# Operadores binarios +numero1 = 16 +numero2 = 128 + +print(f"El binario de numero1 y numero2 es {bin(numero1 & numero2)}") +print(f"El binario de numero1 o numero2 es {bin(numero1 | numero2)}") +print(f"El binario de not numero1 es {bin(~numero1)}") +print(f"El binario de numero1 xor numero2 es {bin(numero1 ^ numero2)}") + + +# Condicionales +n1 = 33 +n2 = 46 + +if n1 == n2: + print(f"El número {n1} es igual al número {n2}") +else: + print(f"El número {n1} es distinto al número {n2}") + + +# For +lista = [0, 1, 2, 3, 4, 5] + +for elemento in lista: + print(elemento) + + +# While +repeticiones = 1 + +while repeticiones < 11: + print(f"Ejecución del bucle while {repeticiones}") + repeticiones += 1 + + +# Ejercicio extra +for i in range(10, 56): + if (i % 2 == 0) and (i != 16) and (i % 3 != 0): + print(i) \ No newline at end of file From 75cb38ce8ab809388bcba94fd276f57011d8799b Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 13 Sep 2024 11:43:44 -0500 Subject: [PATCH 202/539] Ejercicio adicional completado --- .../24 - DECORADORES/java/simonguzman.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/Roadmap/24 - DECORADORES/java/simonguzman.java b/Roadmap/24 - DECORADORES/java/simonguzman.java index 158da279bf..7860459f1a 100644 --- a/Roadmap/24 - DECORADORES/java/simonguzman.java +++ b/Roadmap/24 - DECORADORES/java/simonguzman.java @@ -8,6 +8,63 @@ public class simonguzman { public static void main(String[] args) { genericExample(); example(); + adittionalExercise(); + } + + /***************************** Ejercicio adicional*****************************/ + + static void adittionalExercise(){ + ComponentExtra componente = new ConcreteComponentExtra(); + CountDecorator contadorDecorador = new CountDecorator(componente); + + contadorDecorador.operation(); + contadorDecorador.operation(); + contadorDecorador.operation(); + + System.out.println("Total de invocaciones: " + contadorDecorador.getContador()); + } + static interface ComponentExtra{ + void operation(); + } + + //Componente concreto + static class ConcreteComponentExtra implements ComponentExtra{ + @Override + public void operation() { + System.out.println("Ejecutando operacion base..."); + } + } + + //Decorador abstracto + static abstract class DecoratorExtra implements ComponentExtra{ + protected ComponentExtra component; + + public DecoratorExtra(ComponentExtra component){ + this.component = component; + } + + public void operation() { + this.component.operation(); + } + } + // Decorador concreto que cuenta las veces que se llama a la operación + static class CountDecorator extends DecoratorExtra { + private int contador = 0; + + public CountDecorator(ComponentExtra component) { + super(component); + } + + @Override + public void operation() { + contador++; + System.out.println("La operación se ha llamado " + contador + " veces."); + super.operation(); + } + + public int getContador() { + return contador; + } } /***************************** Ejemplo de implemetacion mas complejo *****************************/ From 5e50e4e1d47e237b5e183a946f244208db843a07 Mon Sep 17 00:00:00 2001 From: Parababire Date: Fri, 13 Sep 2024 12:46:02 -0400 Subject: [PATCH 203/539] #27 - Javascript --- .../27 - SOLID OCP/javascript/parababire.js | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 Roadmap/27 - SOLID OCP/javascript/parababire.js diff --git a/Roadmap/27 - SOLID OCP/javascript/parababire.js b/Roadmap/27 - SOLID OCP/javascript/parababire.js new file mode 100644 index 0000000000..a354975e03 --- /dev/null +++ b/Roadmap/27 - SOLID OCP/javascript/parababire.js @@ -0,0 +1,133 @@ +// Ejercicio + +/* Incorrecto */ + +class Animal { + constructor(sound) { + this.sound = sound + } + + makeSound () { + switch (this.sound) { + case 'meau': + console.log(`The animal makes meau!!!`); + break; + case 'woof': + console.log(`The animal makes woof!!!`); + break; + default: + console.log('Please incert an animal sound!'); + break; + } + } +} +const animal = new Animal('meau') +animal.makeSound() + +/* Correcto */ + +class Person { + constructor(name, occupation) { + this.name = name + this.occupation = occupation + } + + getOccupation() { + return this.occupation.getOccupation() + } +} + +class PersonOccupation { + getOccupation() {} +} + +class IndustrialEngineer extends PersonOccupation { + getOccupation() { + return 'I am an industrial engineer.' + } +} + +const engineer = new Person('Yojan', new IndustrialEngineer()) +console.log(`Hola mi nombre es ${engineer.name} soy ${engineer.getOccupation()}`) + +// Extra + +class Operation { + constructor() { + if (new.target === Operation) { + throw new TypeError("No puedes instanciar la clase abstracta 'Operation' directamente") + } + } + execute() { + throw new Error("Método 'execute()' debe ser implementado en la clase hija") + } +} + +class Addition extends Operation{ + constructor(a, b) { + super() + this.a = a + this.b = b + } + execute() { + return this.a + this.b + } +} + +class Subtract extends Operation{ + constructor(a, b) { + super() + this.a = a + this.b = b + } + execute() { + return this.a - this.b + } +} + +class Multiply extends Operation{ + constructor(a, b) { + super() + this.a = a + this.b = b + } + execute() { + return this.a * this.b + } +} + +class Divide extends Operation{ + constructor(a, b) { + super() + this.a = a + this.b = b + } + execute() { + return this.a / this.b + } +} + +class Calculator { + constructor() { + this.operations = {} + } + addOperation(name, operation) { + this.operations[name] = operation + } + + calculate(name) { + if (!this.operations[name]) { + throw new Error(`Operación ${name} no es valida`) + } + return this.operations[name].execute() + } +} + +const calculadora = new Calculator() +calculadora.addOperation('addition', new Addition(10, 2)) +calculadora.addOperation('subtraction', new Subtract(5, 2)) +calculadora.addOperation('multiplication', new Multiply(9, 2)) + +console.log(calculadora.calculate('subtraction')) +console.log(calculadora.calculate('addition')) +console.log(calculadora.calculate('multiplication')) From ef784677a714c1bf53e7153717a1102e88bd25e1 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 13 Sep 2024 14:08:28 -0500 Subject: [PATCH 204/539] Creacion de una funcion con la sintaxis del log en java --- Roadmap/25 - LOGS/java/simonguzman.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Roadmap/25 - LOGS/java/simonguzman.java diff --git a/Roadmap/25 - LOGS/java/simonguzman.java b/Roadmap/25 - LOGS/java/simonguzman.java new file mode 100644 index 0000000000..40ddc1c5ee --- /dev/null +++ b/Roadmap/25 - LOGS/java/simonguzman.java @@ -0,0 +1,22 @@ + +import java.util.logging.Level; +import java.util.logging.Logger; + +public class simonguzman{ + public static void main(String[] args) { + sintaxisLogger(); + } + static void sintaxisLogger(){ + //Creacion del logger + Logger logger = Logger.getLogger(simonguzman.class.getName()); + //Habilitar todos los niveles de registro + logger.setLevel(Level.ALL); + logger.severe("Mensaje de nivel SEVERE"); + logger.warning("Mensaje de nivel WARNING"); + logger.info("Mensaje de nivel INFO"); + logger.config("Mensaje de nivel CONFIG"); + logger.fine("Mensaje de nivel FINE"); + logger.finer("Mensaje de nivel FINER"); + logger.finest("Mensaje de nivel FINEST"); + } +} \ No newline at end of file From 630258a9e02d5f9004b254ff1e62b777b9f6fe97 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 13 Sep 2024 14:23:45 -0500 Subject: [PATCH 205/539] Ejemplo de log completado, manejo de handler para poder mostrar todos los niveles --- Roadmap/25 - LOGS/java/simonguzman.java | 42 ++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/Roadmap/25 - LOGS/java/simonguzman.java b/Roadmap/25 - LOGS/java/simonguzman.java index 40ddc1c5ee..204869fe57 100644 --- a/Roadmap/25 - LOGS/java/simonguzman.java +++ b/Roadmap/25 - LOGS/java/simonguzman.java @@ -1,11 +1,51 @@ +import java.util.logging.ConsoleHandler; import java.util.logging.Level; import java.util.logging.Logger; public class simonguzman{ public static void main(String[] args) { - sintaxisLogger(); + //sintaxisLogger(); + exampleLog(); } + + /************************ ejemplo del log************************/ + public static void exampleLog(){ + Logger logger = Logger.getLogger(simonguzman.class.getName()); + logger.setLevel(Level.ALL); + + // Configuracion del handler para que se acepten todos los niveles + ConsoleHandler handler = new ConsoleHandler(); + handler.setLevel(Level.ALL); + logger.addHandler(handler); + + logger.info("Inicio del programa."); + logger.config("Configuracion de la aplicacion completada."); + + try { + int result = split(10, 2, logger); + logger.info("Resultado de la division: "+result); + + result = split(10, 0, logger); + logger.info("Resultado de la segunda division: "+result); + + } catch (ArithmeticException e) { + logger.severe("ERROR: Division por cero..."+e.getMessage()); + } + + logger.fine("Operaciones menores completadas."); + logger.finer("Nivel de depuracion mas detallado"); + logger.finest("Nivel de depuracion mas minucioso"); + logger.warning("Advertencia: fin del programa"); + } + + public static int split(int num1, int num2, Logger logger){ + logger.fine("Dividiendo "+num1+" entre "+num2); + return num1 / num2; + } + + + /************************ Sintaxis del log************************/ static void sintaxisLogger(){ //Creacion del logger Logger logger = Logger.getLogger(simonguzman.class.getName()); From 8933b5ec21e472b5e5eea22a93aaf8b86bcf8773 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 13 Sep 2024 14:29:11 -0500 Subject: [PATCH 206/539] Ejemplo un poco mas complicado de los log, manejando tiempo de ejecucion --- Roadmap/25 - LOGS/java/simonguzman.java | 28 ++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/Roadmap/25 - LOGS/java/simonguzman.java b/Roadmap/25 - LOGS/java/simonguzman.java index 204869fe57..b1d41e860f 100644 --- a/Roadmap/25 - LOGS/java/simonguzman.java +++ b/Roadmap/25 - LOGS/java/simonguzman.java @@ -1,4 +1,5 @@ +import java.util.concurrent.TimeUnit; import java.util.logging.ConsoleHandler; import java.util.logging.Level; import java.util.logging.Logger; @@ -6,9 +7,34 @@ public class simonguzman{ public static void main(String[] args) { //sintaxisLogger(); - exampleLog(); + //exampleLog(); + advancedLoggingExample(); } + /************************ ejemplo del log mas avanzado************************/ + public static void advancedLoggingExample(){ + Logger logger = Logger.getLogger(simonguzman.class.getName()); + logger.setLevel(Level.ALL); + try { + startTask("Tarea 1"); + TimeUnit.SECONDS.sleep(2); + endTask("Tarea 1"); + + startTask("Tarea 2"); + TimeUnit.SECONDS.sleep(1); + endTask("Tarea 2"); + } catch (InterruptedException e) { + logger.severe("Error en la ejecucion de las tareas..."+e.getMessage()); + } + } + + public static void startTask(String taskName){ + System.out.println("Iniciando "+taskName); + } + + public static void endTask(String taskName){ + System.out.println("Finalizando "+taskName); + } /************************ ejemplo del log************************/ public static void exampleLog(){ Logger logger = Logger.getLogger(simonguzman.class.getName()); From 28f0bc2d4f56aa47d20531e41d0d4247a4d3df47 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 13 Sep 2024 14:51:40 -0500 Subject: [PATCH 207/539] funciones principales probadas, falta terminar el ejercicio adicional --- Roadmap/25 - LOGS/java/simonguzman.java | 100 ++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/Roadmap/25 - LOGS/java/simonguzman.java b/Roadmap/25 - LOGS/java/simonguzman.java index b1d41e860f..a161e91c0f 100644 --- a/Roadmap/25 - LOGS/java/simonguzman.java +++ b/Roadmap/25 - LOGS/java/simonguzman.java @@ -1,4 +1,6 @@ +import java.util.List; +import java.util.Scanner; import java.util.concurrent.TimeUnit; import java.util.logging.ConsoleHandler; import java.util.logging.Level; @@ -10,7 +12,105 @@ public static void main(String[] args) { //exampleLog(); advancedLoggingExample(); } + /************************ ejercicio adicional************************/ + public static void adittionalExercise(){ + Scanner sc = new Scanner(System.in); + int option; + do{ + menu(); + System.out.println("Ingrese una opcion"); + option = sc.nextInt(); + }while(option != 4); + + } + + public static void optionsMenu(int option){ + switch (option) { + case 1: + + break; + case 2: + + break; + case 3: + + break; + case 4: + outSystem(); + break; + default: + throw new AssertionError(); + } + } + + public static String outSystem(){ + return "Saliendo..."; + } + + public static void menu(){ + System.out.println("------------Gestion de tareas------------"); + System.out.println("1. Añadir tarea"); + System.out.println("2. Eliminar tarea"); + System.out.println("3. Listar tareas"); + System.out.println("4. Salir"); + } + + public void addTask(String name, String description, List tasks, Logger logger){ + long startTime = System.currentTimeMillis(); + Task task = new Task(name, description); + tasks.add(task); + logger.info("Tarea añadida: "+task.getName()); + long endTime = System.currentTimeMillis(); + logger.info("Tiempo de ejecucion para añadir la tarea: "+(endTime - startTime)); + } + + public void removeTask(String name, List tasks, Logger logger){ + long startTime = System.currentTimeMillis(); + boolean removed = tasks.removeIf(task -> task.getName().equalsIgnoreCase(name)); + if(removed){ + logger.info("Tarea eliminada: "+name); + }else{ + logger.warning("No se encontro la tarea con nombre: "+name); + } + long endTime = System.currentTimeMillis(); + logger.info("Tiempo de ejecucion para eliminar la tarea: "+(endTime - startTime)+ " ms"); + } + public static void listTasks(List tasks, Logger logger) { + long startTime = System.currentTimeMillis(); + if(tasks.isEmpty()){ + logger.warning("No hay tareas para listar."); + }else{ + logger.info("Listado de tareas: "); + tasks.forEach(task -> logger.info(task.toString())); + } + long endTime = System.currentTimeMillis(); + logger.info("Tiempo de ejecucion para listar tareas " +(endTime - startTime)+ " ms"); + } + + static class Task{ + private String name; + private String description; + + public Task(){ + + } + + public Task(String name, String description){ + this.name = name; + this.description = description; + } + + public String getName() { + return name; + } + + @Override + public String toString() { + return "Tarea: "+ name +", Descripcion: "+description; + } + + } /************************ ejemplo del log mas avanzado************************/ public static void advancedLoggingExample(){ Logger logger = Logger.getLogger(simonguzman.class.getName()); From c21f34373d839305edca856b7a3ce369d9526074 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Fri, 13 Sep 2024 15:16:58 -0500 Subject: [PATCH 208/539] Ejercicio #25 completado --- Roadmap/25 - LOGS/java/simonguzman.java | 63 ++++++++++++++++++------- 1 file changed, 47 insertions(+), 16 deletions(-) diff --git a/Roadmap/25 - LOGS/java/simonguzman.java b/Roadmap/25 - LOGS/java/simonguzman.java index a161e91c0f..97bfa0b977 100644 --- a/Roadmap/25 - LOGS/java/simonguzman.java +++ b/Roadmap/25 - LOGS/java/simonguzman.java @@ -1,4 +1,6 @@ +import java.util.ArrayList; +import java.util.InputMismatchException; import java.util.List; import java.util.Scanner; import java.util.concurrent.TimeUnit; @@ -8,43 +10,54 @@ public class simonguzman{ public static void main(String[] args) { - //sintaxisLogger(); - //exampleLog(); + sintaxisLogger(); + exampleLog(); advancedLoggingExample(); + adittionalExercise(); } /************************ ejercicio adicional************************/ public static void adittionalExercise(){ + List tasks = new ArrayList<>(); + Logger logger = Logger.getLogger(simonguzman.class.getName()); Scanner sc = new Scanner(System.in); - int option; + int option = 0; do{ menu(); System.out.println("Ingrese una opcion"); - option = sc.nextInt(); - }while(option != 4); - + try { + option = sc.nextInt(); + sc.nextLine(); + optionsMenu(option, sc, tasks, logger); + } catch (InputMismatchException e) { + System.out.println("ERROR: Entrada invalida, solo ingresar valores numericos"); + sc.next(); + } + }while(option != 4); + sc.close(); } - public static void optionsMenu(int option){ + public static void optionsMenu(int option, Scanner sc, List tasks, Logger logger){ + switch (option) { case 1: - + addTaskMenu(sc, tasks, logger); break; case 2: - + removeTaskMenu(sc, tasks, logger); break; case 3: - + listTasks(tasks, logger); break; case 4: outSystem(); break; default: - throw new AssertionError(); + System.out.println("ERROR: Opcion no valida..."); } } - public static String outSystem(){ - return "Saliendo..."; + public static void outSystem(){ + System.out.println("Saliendo...."); } public static void menu(){ @@ -55,16 +68,30 @@ public static void menu(){ System.out.println("4. Salir"); } - public void addTask(String name, String description, List tasks, Logger logger){ + public static void addTaskMenu(Scanner sc, List tasks, Logger logger){ + System.out.print("Introduce el nombre de la tarea: "); + String name = sc.next(); + System.out.print("Introduce la descripción de la tarea: "); + String description = sc.next(); + addTask(name, description, tasks, logger); + } + + public static void removeTaskMenu(Scanner sc, List tasks, Logger logger){ + System.out.println("Introduce el nombre de la tarea a eliminar: "); + String name = sc.next(); + removeTask(name, tasks, logger); + } + + public static void addTask(String name, String description, List tasks, Logger logger){ long startTime = System.currentTimeMillis(); Task task = new Task(name, description); tasks.add(task); - logger.info("Tarea añadida: "+task.getName()); + logger.info("Tarea añadida: "+task.getName()+ ", Description: "+task.getDescription()); long endTime = System.currentTimeMillis(); logger.info("Tiempo de ejecucion para añadir la tarea: "+(endTime - startTime)); } - public void removeTask(String name, List tasks, Logger logger){ + public static void removeTask(String name, List tasks, Logger logger){ long startTime = System.currentTimeMillis(); boolean removed = tasks.removeIf(task -> task.getName().equalsIgnoreCase(name)); if(removed){ @@ -105,6 +132,10 @@ public String getName() { return name; } + public String getDescription() { + return description; + } + @Override public String toString() { return "Tarea: "+ name +", Descripcion: "+description; From 39c1b3b466bf9f01070ceaf3738d50c927f1bc4d Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Fri, 13 Sep 2024 23:15:53 +0200 Subject: [PATCH 209/539] #08 - PHP --- Roadmap/08 - CLASES/php/qv1ko.php | 63 +++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Roadmap/08 - CLASES/php/qv1ko.php diff --git a/Roadmap/08 - CLASES/php/qv1ko.php b/Roadmap/08 - CLASES/php/qv1ko.php new file mode 100644 index 0000000000..c3db58d331 --- /dev/null +++ b/Roadmap/08 - CLASES/php/qv1ko.php @@ -0,0 +1,63 @@ +c1String = $value; + } + + public function getC1String() { + return $this->c1String; + } + + public function setC1String($c1String) { + $this->c1String = $c1String; + } + + public function __toString() { + return "Class 1 value: " . $this->c1String; + } + + } + + class C2 { + + private $c2String; + + public function __construct($value = "example") { + $this->c2String = $value; + } + + public function getC2String() { + return $this->c2String; + } + + public function setC2String($c2String) { + $this->c2String = $c2String; + } + + public function __toString() { + return "Class 2 value: " . $this->c2String; + } + + } + + function main() { + + $example1 = new C1(); + echo $example1 . "\n"; + $example1->setC1String("Example 1"); + echo $example1->getC1String() . "\n"; + + $example2 = new C2(); + echo $example2 . "\n"; + $example2->setC2String("Example 2"); + echo $example2->getC2String() . "\n"; + + } + + main(); + +?> From b8862b8bcee195deb7d7569d50375989687cc8c2 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Fri, 13 Sep 2024 17:49:37 -0500 Subject: [PATCH 210/539] #03 - Java --- .../java/martinbohorquez.java | 269 ++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/java/martinbohorquez.java diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/java/martinbohorquez.java b/Roadmap/03 - ESTRUCTURAS DE DATOS/java/martinbohorquez.java new file mode 100644 index 0000000000..6ae9d5d754 --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/java/martinbohorquez.java @@ -0,0 +1,269 @@ +import java.util.*; +import java.util.stream.Collectors; + +/** + * 03 ESTRUCTURAS DE DATOS + * + * @author martinbohorquez + */ +public class martinbohorquez { + /** + * Arrays + */ + private static final int[] array = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; //array con datos inicializados + private static final int[] array2 = new int[10]; //array con longitud + /** + * List: {@code ArrayList}, {@code LinkedList}, {@code Vector}, {@code Stack}

+ * Unlike sets, lists typically allow duplicate elements, null elements.

+ * An ordered collection, where the user has precise control over where in the list + * each element is inserted. The user can access elements by their integer index + * (position in the list), and search for elements in the list.

+ * {@code iterator}, {@code add}, {@code remove}, {@code equals}, and + * {@code hashCode} methods. + */ + private static final List lista = new ArrayList<>();//Mutable + private static final List listaInmutable = List.of("Martin", "Zuckerberg");//Inmutable + private static final List listaMutable = new ArrayList<>(Arrays.asList("Martin", "Zuckerberg"));//Mutable + /** + * Set: {@code HashSet}, {@code LinkedHashSet}, {@code TreeSet}

+ * A collection that contains no duplicate elements. More formally, sets + * contain no pair of elements {@code e1} and {@code e2} such that + * {@code e1.equals(e2)}, and at most one null element.

+ * {@code TreeSet} sorted based on natural ordering or custom comparator + */ + private static final Set conjunto = new HashSet<>(); + private static final Set conjuntoInmutable = Set.of("Martin", "Zuckerberg");//Inmutable + private static final Set conjuntoMutable = new HashSet<>(Arrays.asList("Martin", "Zuckerberg")); + + /** + * Map: {@code HashMap}, {@code LinkedHashMap}, {@code HashTable}, {@code TreeMap}

+ * An object that maps keys to values. A map cannot contain duplicate keys; + * each key can map to at most one value. + *

This interface takes the place of the {@code Dictionary} class, which + * was a totally abstract class rather than an interface. + *

{@code TreeMap} sorted based on natural ordering or custom comparator + */ + private static final Map diccionario = new HashMap<>(); + private static final Map diccionarioSingleton = Collections.singletonMap("uno", 1); + private static final Map diccionarioInmutable = Map.of( + "uno", 1, + "dos", 2, + "tres", 3 + );//Inmutable + private static final Map linkedHashMap = new LinkedHashMap<>(); + private static final Map treeMap = new TreeMap<>();//Ordered + private static Scanner scan; + + public static void main(String[] args) { + System.out.println("LIST"); + /* + * List + */ + Collections.addAll(lista, "Martin", "Karl"); + ListIterator listIterator = lista.listIterator(); + + listIterator.next(); //ListIterator + listIterator.add("Mike"); //add() + + Iterator iterator = lista.iterator(); //Iterator + while (iterator.hasNext()) { + String elemento = iterator.next(); + if (elemento.equals("Karl")) { + iterator.remove(); //remove() + } + } +// lista.add("Martin"); //inserción + lista.add("Castle"); //inserción + lista.set(2, "Pepe"); //actualización + System.out.println(lista); + System.out.println(lista.getClass().getSimpleName()); //ArrayList + + System.out.println(listaInmutable.getClass().getSimpleName()); //List12 + + listaMutable.add("Moy"); //inserción + listaMutable.set(2, "Xavi"); //actualización + listaMutable.add("Kathe"); //inserción + listaMutable.add("Martin"); + listaMutable.remove("Zuckerberg"); //borrado + listaMutable.sort(String::compareTo); + System.out.println(listaMutable); + listaMutable.removeIf(s -> s.equals("Martin")); + listaMutable.add("Franklin"); + Collections.sort(listaMutable);// Collections.sort() + listaMutable.add(null); + + listaMutable.forEach(System.out::println); + System.out.println(listaMutable.reversed()); + System.out.println(listaMutable.getClass().getSimpleName()); //ArrayList + + /* + * Set + * No se puede Actualizar + * No se puede Ordenar + */ + System.out.println("\nSET"); + Collections.addAll(conjunto, "Patrick", "Sam", "Jim"); + conjunto.add("Sam"); //inserción + System.out.println(conjunto.getClass().getSimpleName()); + System.out.println(conjunto); + conjunto.remove("Patrick"); //borrado + System.out.println(conjunto.contains("Peter")); + System.out.println(conjunto); + System.out.println(conjuntoInmutable.getClass().getSimpleName()); + System.out.println(conjuntoInmutable.size()); + conjuntoInmutable.forEach(System.out::println); + conjuntoMutable.add("Sam"); + System.out.println(conjuntoMutable.getClass().getSimpleName()); + System.out.println(conjuntoMutable); + + /* + * Map: clave-valor (key, value) + * Las llaves (keys) son únicas dentro del diccionario. + */ + diccionario.put("clave1", "valor1"); //inserción + diccionario.put("clave2", "valor2"); + diccionario.put("clave3", "valor3"); + diccionario.put("clave2", "nuevoValor2"); // Sobrescribe "valor2" + Map diccionarioOrdenado = diccionario.entrySet().stream() + .sorted(Map.Entry.comparingByValue())//ordenación byValue + .collect(Collectors.toMap( + Map.Entry::getKey, + Map.Entry::getValue, + (e1, e2) -> e1, + LinkedHashMap::new + )); + System.out.println(diccionarioOrdenado); + diccionario.remove("clave1"); //borrado + diccionario.replace("clave3", "nuevoValor3"); //actualización + System.out.println(diccionario.getClass().getSimpleName()); + System.out.println(diccionario); + System.out.println(diccionario.keySet()); + System.out.println(diccionario.get("clave2")); // Imprime "nuevoValor2" + System.out.println(diccionario.get("clave3")); // Imprime "nuevoValor3" + + System.out.println(diccionarioSingleton.getClass().getSimpleName()); + System.out.println(diccionarioSingleton); + + System.out.println(diccionarioInmutable.getClass().getSimpleName()); + diccionarioInmutable.forEach((m, n) -> System.out.println("Key es: " + m.toUpperCase() + ", value es : " + n)); + + //LinkedHashMap + linkedHashMap.put("uno", 1); + linkedHashMap.put("tres", 3); + linkedHashMap.put("dos", 2); + System.out.println(linkedHashMap); + + // Ordenar por claves + Map mapaOrdenado = new TreeMap<>(linkedHashMap); + + System.out.println(mapaOrdenado); + + //TreeMap + treeMap.put("uno", 1); + treeMap.put("tres", 3); + treeMap.put("dos", 2); + + System.out.println(treeMap); + + /* + * DIFICULTAD EXTRA + */ + HashMap contactos = new HashMap<>(); + + //etiqueta de bucle + outerloop: + while (true) { + System.out.println(""" + Bienvenido a la agente de contactos, tiene las siguientes opciones: + 1. Buscar un contacto + 2. Crear un contacto + 3. Actualizar un contacto + 4. Eliminar un contacto + 5. Salir + """); + + System.out.print("Elige una opción: "); + int option = 0; + try { + scan = new Scanner(System.in); + option = scan.nextInt(); + } catch (InputMismatchException ignored) { + } + String name = ""; + + if (option > 0 && option < 5) { + name = getName(); + } + + switch (option) { + case 1 -> { + Long number = contactos.get(name); + getResult(number, + "El número de teléfono de " + name + " es " + number + "\n", + "El contacto " + name + " no existe en la agenda!\n"); + } + case 2 -> { + boolean flag = contactos.containsKey(name); + contactos.put(name, getPhone()); + Long number = flag ? null : contactos.get(name); + getResult(number, + "El contacto " + name + " ha sido registrado!\n", + "El contacto " + name + " ya se encuentra registrado. Si desea actualizar usa la opción 3!\n"); + + } + case 3 -> getResult(contactos.replace(name, getPhone()), + "El contacto " + name + " ha sido actualizado!\n", + "El contacto " + name + " no existe en la agenda!\n"); + case 4 -> getResult(contactos.remove(name), + "El contacto " + name + " ha sido eliminado!\n", + "El contacto " + name + " no existe en la agenda!\n"); + case 5 -> { + System.out.println("Saliendo de la agenda!"); + break outerloop; + } + default -> System.out.println("Opción no válida! Debe elegir una opción del 1 al 5.\n"); + } + } + } + + public static String getName() { + scan = new Scanner(System.in); + System.out.print("Indique su nombre: "); + return scan.next(); + } + + public static Long getPhone() { + Long numero = Long.MIN_VALUE; + while (true) { + try { + System.out.print("Indique su numero de teléfono: "); + scan = new Scanner(System.in); + numero = scan.nextLong(); + if (numero.toString().length() > 11 && numero > 0L) { + System.out.println("Debe introducir un número de teléfono con un máximo de 11 dígitos!\n"); + } else { + break; + } + } catch (InputMismatchException e) { + System.out.println("Número de teléfono no válido!\n"); + } + } + return numero; + } + + public static void getResult(Long result, String success) { + if (result != null) { + System.out.println(success); + } else { + System.out.println("Operación fallida"); + } + } + + public static void getResult(Long result, String success, String failed) { + if (result != null) { + System.out.println(success); + } else { + System.out.println(failed); + } + } +} From 23afa7fa538506d934e05a84d35e656e8b4b23c0 Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Sat, 14 Sep 2024 01:40:29 +0200 Subject: [PATCH 211/539] #08 - Python --- Roadmap/08 - CLASES/python/qv1ko.py | 41 +++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Roadmap/08 - CLASES/python/qv1ko.py diff --git a/Roadmap/08 - CLASES/python/qv1ko.py b/Roadmap/08 - CLASES/python/qv1ko.py new file mode 100644 index 0000000000..2a63573803 --- /dev/null +++ b/Roadmap/08 - CLASES/python/qv1ko.py @@ -0,0 +1,41 @@ +class C1: + + def __init__(self, value = "example"): + self.c1_string = value + + def get_c1_string(self): + return self.c1_string + + def set_c1_string(self, value): + self.c1_string = value + + def __str__(self): + return f"Class 1 value: {self.c1_string}" + + +class C2: + + def __init__(self, value = "example"): + self.c2_string = value + + def get_c2_string(self): + return self.c2_string + + def set_c2_string(self, value): + self.c2_string = value + + def __str__(self): + return f"Class 2 value: {self.c2_string}" + + +if __name__ == "__main__": + + example1 = C1() + print(example1) + example1.set_c1_string("Example 1") + print(example1.get_c1_string()) + + example2 = C2() + print(example2) + example2.set_c2_string("Example 2") + print(example2.get_c2_string()) From 141a390eba9d6c838557f2f32dd72ea2e028b785 Mon Sep 17 00:00:00 2001 From: mouredev Date: Sat, 14 Sep 2024 00:14:31 +0000 Subject: [PATCH 212/539] Update stats --- Roadmap/stats.json | 1780 +++++++++++++++++++++++--------------------- 1 file changed, 911 insertions(+), 869 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index da7bc3cf9a..90232a41a8 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,23 +1,23 @@ { "challenges_total": 38, "languages_total": 48, - "files_total": 6975, - "users_total": 1168, + "files_total": 7010, + "users_total": 1175, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1275 + "count": 1280 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 770 + "count": 776 }, { "order": 3, "name": "02 - FUNCIONES Y ALCANCE", - "count": 588 + "count": 595 }, { "order": 4, @@ -66,13 +66,13 @@ }, { "order": 13, - "name": "13 - PRUEBAS UNITARIAS", - "count": 131 + "name": "14 - FECHAS", + "count": 132 }, { "order": 14, - "name": "14 - FECHAS", - "count": 130 + "name": "13 - PRUEBAS UNITARIAS", + "count": 131 }, { "order": 15, @@ -87,12 +87,12 @@ { "order": 17, "name": "15 - ASINCRON\u00cdA", - "count": 124 + "count": 125 }, { "order": 18, "name": "17 - ITERACIONES", - "count": 115 + "count": 117 }, { "order": 19, @@ -102,17 +102,17 @@ { "order": 20, "name": "19 - ENUMERACIONES", - "count": 100 + "count": 101 }, { "order": 21, "name": "20 - PETICIONES HTTP", - "count": 97 + "count": 98 }, { "order": 22, "name": "21 - CALLBACKS", - "count": 88 + "count": 89 }, { "order": 23, @@ -157,27 +157,27 @@ { "order": 31, "name": "32 - BATALLA DEADPOOL Y WOLVERINE", - "count": 49 + "count": 50 }, { "order": 32, "name": "30 - SOLID DIP", - "count": 47 + "count": 48 }, { "order": 33, "name": "33 - RESCATANDO A MICKEY", - "count": 42 + "count": 43 }, { "order": 34, "name": "31 - SIMULADOR JUEGOS OL\u00cdMPICOS", - "count": 39 + "count": 40 }, { "order": 35, "name": "36 - EL SOMBRERO SELECCIONADOR", - "count": 38 + "count": 39 }, { "order": 36, @@ -187,80 +187,80 @@ { "order": 37, "name": "34 - \u00c1RBOL GENEAL\u00d3GICO LA CASA DEL DRAG\u00d3N", - "count": 33 + "count": 34 }, { "order": 38, "name": "37 - OASIS VS LINKIN PARK", - "count": 6 + "count": 9 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 3004, - "percentage": 43.07 + "count": 3021, + "percentage": 43.1 }, { "order": 2, "name": "javascript", - "count": 1384, - "percentage": 19.84 + "count": 1388, + "percentage": 19.8 }, { "order": 3, "name": "java", - "count": 629, - "percentage": 9.02 + "count": 633, + "percentage": 9.03 }, { "order": 4, "name": "typescript", - "count": 308, - "percentage": 4.42 + "count": 311, + "percentage": 4.44 }, { "order": 5, "name": "c#", - "count": 253, - "percentage": 3.63 + "count": 254, + "percentage": 3.62 }, { "order": 6, "name": "kotlin", "count": 220, - "percentage": 3.15 + "percentage": 3.14 }, { "order": 7, "name": "go", - "count": 214, + "count": 215, "percentage": 3.07 }, { "order": 8, "name": "swift", "count": 167, - "percentage": 2.39 + "percentage": 2.38 }, { "order": 9, "name": "php", - "count": 153, - "percentage": 2.19 + "count": 155, + "percentage": 2.21 }, { "order": 10, "name": "c++", - "count": 115, + "count": 116, "percentage": 1.65 }, { "order": 11, "name": "rust", "count": 113, - "percentage": 1.62 + "percentage": 1.61 }, { "order": 12, @@ -308,7 +308,7 @@ "order": 19, "name": "lua", "count": 15, - "percentage": 0.22 + "percentage": 0.21 }, { "order": 20, @@ -343,8 +343,8 @@ { "order": 25, "name": "sql", - "count": 8, - "percentage": 0.11 + "count": 10, + "percentage": 0.14 }, { "order": 26, @@ -495,7 +495,7 @@ { "order": 2, "name": "kenysdev", - "count": 149, + "count": 150, "languages": 4 }, { @@ -590,76 +590,76 @@ }, { "order": 18, + "name": "eulogioep", + "count": 48, + "languages": 6 + }, + { + "order": 19, "name": "juanppdev", "count": 47, "languages": 3 }, { - "order": 19, + "order": 20, "name": "ricjdev", "count": 47, "languages": 2 }, { - "order": 20, + "order": 21, "name": "raulg91", "count": 47, "languages": 2 }, { - "order": 21, + "order": 22, "name": "jesusway69", "count": 47, "languages": 2 }, { - "order": 22, + "order": 23, "name": "garos01", "count": 44, "languages": 2 }, { - "order": 23, + "order": 24, "name": "aldroide", "count": 42, "languages": 4 }, { - "order": 24, + "order": 25, "name": "santyjl", "count": 42, "languages": 3 }, { - "order": 25, + "order": 26, "name": "chrisdev00", "count": 41, "languages": 2 }, { - "order": 26, + "order": 27, "name": "didacdev", "count": 40, "languages": 5 }, { - "order": 27, + "order": 28, "name": "gabrielmoris", "count": 40, "languages": 3 }, { - "order": 28, + "order": 29, "name": "neslarra", "count": 39, "languages": 2 }, - { - "order": 29, - "name": "eulogioep", - "count": 38, - "languages": 6 - }, { "order": 30, "name": "alexdevrep", @@ -674,33 +674,33 @@ }, { "order": 32, - "name": "emmanuelmmontesinos", + "name": "rauldoezon", "count": 37, "languages": 1 }, { "order": 33, - "name": "mouredev", + "name": "emmanuelmmontesinos", "count": 37, "languages": 1 }, { "order": 34, - "name": "asjordi", + "name": "mouredev", "count": 37, "languages": 1 }, { "order": 35, - "name": "n0hagonada", - "count": 36, - "languages": 3 + "name": "asjordi", + "count": 37, + "languages": 1 }, { "order": 36, - "name": "rauldoezon", + "name": "n0hagonada", "count": 36, - "languages": 1 + "languages": 3 }, { "order": 37, @@ -710,97 +710,97 @@ }, { "order": 38, - "name": "oriaj3", + "name": "soohav", "count": 35, "languages": 1 }, { "order": 39, + "name": "oriaj3", + "count": 35, + "languages": 1 + }, + { + "order": 40, "name": "angelsanchezt", "count": 34, "languages": 12 }, { - "order": 40, + "order": 41, "name": "rikmij", "count": 34, "languages": 2 }, { - "order": 41, + "order": 42, "name": "fborjalv", "count": 34, "languages": 1 }, { - "order": 42, + "order": 43, "name": "qv1ko", "count": 33, "languages": 4 }, { - "order": 43, + "order": 44, + "name": "raynerpv2022", + "count": 33, + "languages": 2 + }, + { + "order": 45, "name": "worlion", "count": 33, "languages": 2 }, { - "order": 44, + "order": 46, "name": "avcenal", "count": 33, "languages": 1 }, { - "order": 45, + "order": 47, "name": "juandaherrera", "count": 32, "languages": 5 }, { - "order": 46, + "order": 48, "name": "pedroomar23", "count": 32, "languages": 3 }, { - "order": 47, + "order": 49, "name": "pyramsd", "count": 32, "languages": 1 }, { - "order": 48, + "order": 50, "name": "ronipg", "count": 31, "languages": 4 }, { - "order": 49, - "name": "raynerpv2022", - "count": 31, - "languages": 2 - }, - { - "order": 50, + "order": 51, "name": "marcode24", "count": 30, "languages": 3 }, - { - "order": 51, - "name": "adra-dev", - "count": 30, - "languages": 1 - }, { "order": 52, - "name": "alanshakir", + "name": "adra-dev", "count": 30, "languages": 1 }, { "order": 53, - "name": "soohav", + "name": "alanshakir", "count": 30, "languages": 1 }, @@ -944,67 +944,67 @@ }, { "order": 77, + "name": "juandaw37", + "count": 22, + "languages": 1 + }, + { + "order": 78, "name": "giovanyosorio", "count": 21, "languages": 2 }, { - "order": 78, + "order": 79, "name": "igledev", "count": 21, "languages": 1 }, { - "order": 79, + "order": 80, "name": "davidmoralesdeveloper", "count": 21, "languages": 1 }, { - "order": 80, + "order": 81, "name": "gringoam", "count": 21, "languages": 1 }, { - "order": 81, + "order": 82, "name": "restevean", "count": 21, "languages": 1 }, { - "order": 82, + "order": 83, "name": "gordo-master", "count": 20, "languages": 1 }, { - "order": 83, + "order": 84, "name": "chartypes", "count": 19, "languages": 2 }, - { - "order": 84, - "name": "sorubadguy", - "count": 19, - "languages": 1 - }, { "order": 85, - "name": "yenneralayon142", + "name": "sorubadguy", "count": 19, "languages": 1 }, { "order": 86, - "name": "saezmd", + "name": "yenneralayon142", "count": 19, "languages": 1 }, { "order": 87, - "name": "juandaw37", + "name": "saezmd", "count": 19, "languages": 1 }, @@ -1112,43 +1112,43 @@ }, { "order": 105, - "name": "danielhdzr", + "name": "mvidalb", "count": 16, "languages": 1 }, { "order": 106, - "name": "kuroz00", - "count": 15, - "languages": 3 + "name": "danielhdzr", + "count": 16, + "languages": 1 }, { "order": 107, - "name": "alvaro-neyra", + "name": "kuroz00", "count": 15, - "languages": 2 + "languages": 3 }, { "order": 108, - "name": "eugeniasoria", + "name": "alvaro-neyra", "count": 15, "languages": 2 }, { "order": 109, - "name": "seandsun", + "name": "eugeniasoria", "count": 15, - "languages": 1 + "languages": 2 }, { "order": 110, - "name": "jafeito", + "name": "seandsun", "count": 15, "languages": 1 }, { "order": 111, - "name": "mvidalb", + "name": "jafeito", "count": 15, "languages": 1 }, @@ -1196,55 +1196,55 @@ }, { "order": 119, - "name": "mikelm2020", + "name": "juanchernandezdev", "count": 14, "languages": 1 }, { "order": 120, - "name": "paula2409", + "name": "mikelm2020", "count": 14, "languages": 1 }, { "order": 121, - "name": "volumidev", - "count": 13, - "languages": 3 + "name": "paula2409", + "count": 14, + "languages": 1 }, { "order": 122, - "name": "diegoibb", + "name": "volumidev", "count": 13, "languages": 3 }, { "order": 123, - "name": "manjaitan", + "name": "diegoibb", "count": 13, - "languages": 2 + "languages": 3 }, { "order": 124, - "name": "jesuses1312", + "name": "manjaitan", "count": 13, "languages": 2 }, { "order": 125, - "name": "ocram1304", + "name": "jesuses1312", "count": 13, - "languages": 1 + "languages": 2 }, { "order": 126, - "name": "dan-corbo", + "name": "ocram1304", "count": 13, "languages": 1 }, { "order": 127, - "name": "juanchernandezdev", + "name": "dan-corbo", "count": 13, "languages": 1 }, @@ -3116,4380 +3116,4422 @@ }, { "order": 439, - "name": "josueeeee", + "name": "duendeintemporal", "count": 3, "languages": 1 }, { "order": 440, - "name": "emaenriquez", + "name": "josueeeee", "count": 3, "languages": 1 }, { "order": 441, - "name": "sebascmb", + "name": "emaenriquez", "count": 3, "languages": 1 }, { "order": 442, - "name": "gpinedaoviedo", + "name": "sebascmb", "count": 3, "languages": 1 }, { "order": 443, - "name": "blfuentes", + "name": "gpinedaoviedo", "count": 3, "languages": 1 }, { "order": 444, - "name": "javiearth", + "name": "blfuentes", "count": 3, "languages": 1 }, { "order": 445, - "name": "atienzar", + "name": "javiearth", "count": 3, "languages": 1 }, { "order": 446, - "name": "coshiloco", + "name": "atienzar", "count": 3, "languages": 1 }, { "order": 447, - "name": "crisvigas", + "name": "coshiloco", "count": 3, "languages": 1 }, { "order": 448, - "name": "tomytsa", + "name": "crisvigas", "count": 3, "languages": 1 }, { "order": 449, - "name": "rocallejas", + "name": "tomytsa", "count": 3, "languages": 1 }, { "order": 450, - "name": "guido2288", + "name": "rocallejas", "count": 3, "languages": 1 }, { "order": 451, - "name": "githjuan", + "name": "guido2288", "count": 3, "languages": 1 }, { "order": 452, - "name": "jeyker-dev", + "name": "githjuan", "count": 3, "languages": 1 }, { "order": 453, - "name": "eliskopun", + "name": "jeyker-dev", "count": 3, "languages": 1 }, { "order": 454, - "name": "ramon-almeida", + "name": "eliskopun", "count": 3, "languages": 1 }, { "order": 455, - "name": "danielperezrubio", + "name": "ramon-almeida", "count": 3, "languages": 1 }, { "order": 456, - "name": "minn09", + "name": "danielperezrubio", "count": 3, "languages": 1 }, { "order": 457, - "name": "elkin-dev", + "name": "minn09", "count": 3, "languages": 1 }, { "order": 458, - "name": "bertolini-victor", + "name": "elkin-dev", "count": 3, "languages": 1 }, { "order": 459, - "name": "jorgegarcia-dev", + "name": "bertolini-victor", "count": 3, "languages": 1 }, { "order": 460, - "name": "suescun845", + "name": "jorgegarcia-dev", "count": 3, "languages": 1 }, { "order": 461, - "name": "carlosalberto05", + "name": "suescun845", "count": 3, "languages": 1 }, { "order": 462, - "name": "mmacalli", + "name": "carlosalberto05", "count": 3, "languages": 1 }, { "order": 463, - "name": "ggtorca", + "name": "mmacalli", "count": 3, "languages": 1 }, { "order": 464, - "name": "mstaz4", + "name": "ggtorca", "count": 3, "languages": 1 }, { "order": 465, - "name": "emilianohoyos", + "name": "mstaz4", "count": 3, "languages": 1 }, { "order": 466, - "name": "rgeditv1", + "name": "emilianohoyos", "count": 3, "languages": 1 }, { "order": 467, - "name": "elder202", + "name": "rgeditv1", "count": 3, "languages": 1 }, { "order": 468, - "name": "dandrusco", + "name": "elder202", "count": 3, "languages": 1 }, { "order": 469, - "name": "mizadlogcia", + "name": "dandrusco", "count": 3, "languages": 1 }, { "order": 470, - "name": "antii16", + "name": "mizadlogcia", "count": 3, "languages": 1 }, { "order": 471, - "name": "strooplab", + "name": "antii16", "count": 3, "languages": 1 }, { "order": 472, - "name": "marcoh2325", + "name": "strooplab", "count": 3, "languages": 1 }, { "order": 473, - "name": "frostbitepy", + "name": "marcoh2325", "count": 3, "languages": 1 }, { "order": 474, - "name": "zzepu", + "name": "frostbitepy", "count": 3, "languages": 1 }, { "order": 475, - "name": "tekatoki", + "name": "zzepu", "count": 3, "languages": 1 }, { "order": 476, - "name": "yeam-10", + "name": "tekatoki", "count": 3, "languages": 1 }, { "order": 477, - "name": "exanderguitar", + "name": "yeam-10", "count": 3, "languages": 1 }, { "order": 478, - "name": "camilo-zuluaga", + "name": "exanderguitar", "count": 3, "languages": 1 }, { "order": 479, - "name": "macova96", + "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { "order": 480, - "name": "betzadev", + "name": "macova96", "count": 3, "languages": 1 }, { "order": 481, - "name": "monikgbar", + "name": "betzadev", "count": 3, "languages": 1 }, { "order": 482, - "name": "guillesese", + "name": "monikgbar", "count": 3, "languages": 1 }, { "order": 483, - "name": "artdugarte", + "name": "guillesese", "count": 3, "languages": 1 }, { "order": 484, - "name": "jofedev", + "name": "artdugarte", "count": 3, "languages": 1 }, { "order": 485, - "name": "oscarhub90", + "name": "jofedev", "count": 3, "languages": 1 }, { "order": 486, - "name": "tonywarcode", + "name": "oscarhub90", "count": 3, "languages": 1 }, { "order": 487, - "name": "oscargeovannyrincon", + "name": "tonywarcode", "count": 3, "languages": 1 }, { "order": 488, - "name": "joandevpy", + "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { "order": 489, - "name": "estelacode", + "name": "joandevpy", "count": 3, "languages": 1 }, { "order": 490, - "name": "xurxogz", + "name": "estelacode", "count": 3, "languages": 1 }, { "order": 491, - "name": "freedainew", + "name": "xurxogz", "count": 3, "languages": 1 }, { "order": 492, - "name": "swifty0705", + "name": "freedainew", "count": 3, "languages": 1 }, { "order": 493, - "name": "marce1084", + "name": "swifty0705", "count": 3, "languages": 1 }, { "order": 494, - "name": "rubioj17", + "name": "marce1084", "count": 3, "languages": 1 }, { "order": 495, - "name": "kingsaul22", + "name": "rubioj17", "count": 3, "languages": 1 }, { "order": 496, - "name": "ainoaran", + "name": "kingsaul22", "count": 3, "languages": 1 }, { "order": 497, - "name": "francofmv", + "name": "ainoaran", "count": 3, "languages": 1 }, { "order": 498, - "name": "davidsorroche", + "name": "francofmv", "count": 3, "languages": 1 }, { "order": 499, - "name": "david-quinones", + "name": "marianoemir", "count": 3, "languages": 1 }, { "order": 500, - "name": "fluna29", + "name": "davidsorroche", "count": 3, "languages": 1 }, { "order": 501, - "name": "natalinacn", + "name": "david-quinones", "count": 3, "languages": 1 }, { "order": 502, - "name": "kine-jdf", + "name": "fluna29", "count": 3, "languages": 1 }, { "order": 503, - "name": "yaretzyrb", + "name": "natalinacn", "count": 3, "languages": 1 }, { "order": 504, - "name": "password1989", + "name": "kine-jdf", "count": 3, "languages": 1 }, { "order": 505, - "name": "confley", + "name": "yaretzyrb", "count": 3, "languages": 1 }, { "order": 506, - "name": "beonzj", + "name": "password1989", "count": 3, "languages": 1 }, { "order": 507, - "name": "mantaras96", + "name": "confley", "count": 3, "languages": 1 }, { "order": 508, - "name": "juxxon23", + "name": "beonzj", "count": 3, "languages": 1 }, { "order": 509, - "name": "frangarmez21", + "name": "mantaras96", "count": 3, "languages": 1 }, { "order": 510, - "name": "ikeragi05", + "name": "juxxon23", "count": 3, "languages": 1 }, { "order": 511, - "name": "johnalexguerrero", + "name": "frangarmez21", "count": 3, "languages": 1 }, { "order": 512, + "name": "ikeragi05", + "count": 3, + "languages": 1 + }, + { + "order": 513, + "name": "johnalexguerrero", + "count": 3, + "languages": 1 + }, + { + "order": 514, "name": "devvdroid01", "count": 2, "languages": 2 }, { - "order": 513, + "order": 515, "name": "sgb004", "count": 2, "languages": 2 }, { - "order": 514, + "order": 516, "name": "chuanmi", "count": 2, "languages": 2 }, { - "order": 515, + "order": 517, "name": "jlcareglio", "count": 2, "languages": 2 }, { - "order": 516, + "order": 518, "name": "jurgen-alfaro", "count": 2, "languages": 2 }, { - "order": 517, + "order": 519, + "name": "martinbohorquez", + "count": 2, + "languages": 2 + }, + { + "order": 520, "name": "lydaf", "count": 2, "languages": 2 }, { - "order": 518, + "order": 521, "name": "carresoft", "count": 2, "languages": 2 }, { - "order": 519, + "order": 522, "name": "ismaelmatiz", "count": 2, "languages": 2 }, { - "order": 520, + "order": 523, "name": "tecfer", "count": 2, "languages": 2 }, { - "order": 521, + "order": 524, "name": "elsanty08", "count": 2, "languages": 2 }, { - "order": 522, + "order": 525, "name": "jorgesilencio", "count": 2, "languages": 2 }, { - "order": 523, + "order": 526, "name": "berentolkien", "count": 2, "languages": 2 }, { - "order": 524, + "order": 527, "name": "felipedev303", "count": 2, "languages": 2 }, { - "order": 525, + "order": 528, "name": "lemito66", "count": 2, "languages": 2 }, { - "order": 526, + "order": 529, "name": "alexsamboy", "count": 2, "languages": 2 }, { - "order": 527, + "order": 530, "name": "enrgarvic", "count": 2, "languages": 2 }, { - "order": 528, + "order": 531, "name": "jovany-java", "count": 2, "languages": 2 }, { - "order": 529, + "order": 532, "name": "raul-progr", "count": 2, "languages": 2 }, { - "order": 530, + "order": 533, "name": "jmofuture", "count": 2, "languages": 2 }, { - "order": 531, + "order": 534, "name": "angel-alvarez-dev", "count": 2, "languages": 2 }, { - "order": 532, + "order": 535, "name": "lilberick", "count": 2, "languages": 2 }, { - "order": 533, + "order": 536, "name": "camiloforero1997", "count": 2, "languages": 2 }, { - "order": 534, + "order": 537, "name": "alejosor", "count": 2, "languages": 2 }, { - "order": 535, + "order": 538, "name": "juan-wills", "count": 2, "languages": 2 }, { - "order": 536, + "order": 539, "name": "lurtur", "count": 2, "languages": 2 }, { - "order": 537, + "order": 540, "name": "jhonatanmustiolacas", "count": 2, "languages": 2 }, { - "order": 538, + "order": 541, "name": "elmarqueli", "count": 2, "languages": 1 }, { - "order": 539, + "order": 542, "name": "tiaguiito3", "count": 2, "languages": 1 }, { - "order": 540, + "order": 543, "name": "angelargumedo", "count": 2, "languages": 1 }, { - "order": 541, + "order": 544, "name": "reaien", "count": 2, "languages": 1 }, { - "order": 542, + "order": 545, "name": "rikar20", "count": 2, "languages": 1 }, { - "order": 543, + "order": 546, "name": "vdroiid", "count": 2, "languages": 1 }, { - "order": 544, + "order": 547, "name": "frannmv", "count": 2, "languages": 1 }, { - "order": 545, + "order": 548, "name": "rrcoder", "count": 2, "languages": 1 }, { - "order": 546, + "order": 549, "name": "diegosilval", "count": 2, "languages": 1 }, { - "order": 547, + "order": 550, "name": "nandaalf", "count": 2, "languages": 1 }, { - "order": 548, + "order": 551, "name": "hawkbott", "count": 2, "languages": 1 }, { - "order": 549, + "order": 552, "name": "tomasmarquez81", "count": 2, "languages": 1 }, { - "order": 550, + "order": 553, "name": "poetry0354", "count": 2, "languages": 1 }, { - "order": 551, + "order": 554, "name": "santiagocuevas2003", "count": 2, "languages": 1 }, { - "order": 552, + "order": 555, "name": "lmedina96", "count": 2, "languages": 1 }, { - "order": 553, + "order": 556, "name": "lorenamesa", "count": 2, "languages": 1 }, { - "order": 554, + "order": 557, "name": "raulallue", "count": 2, "languages": 1 }, { - "order": 555, + "order": 558, "name": "luciarf", "count": 2, "languages": 1 }, { - "order": 556, + "order": 559, "name": "aserranot", "count": 2, "languages": 1 }, { - "order": 557, + "order": 560, "name": "devcherry1", "count": 2, "languages": 1 }, { - "order": 558, + "order": 561, "name": "yowcloud", "count": 2, "languages": 1 }, { - "order": 559, + "order": 562, "name": "fefestuve", "count": 2, "languages": 1 }, { - "order": 560, + "order": 563, "name": "fsfigueroa77", "count": 2, "languages": 1 }, { - "order": 561, + "order": 564, "name": "nahuelborromeo", "count": 2, "languages": 1 }, { - "order": 562, + "order": 565, "name": "peibolstrike", "count": 2, "languages": 1 }, { - "order": 563, + "order": 566, "name": "dararod", "count": 2, "languages": 1 }, { - "order": 564, + "order": 567, "name": "navarroemiliano", "count": 2, "languages": 1 }, { - "order": 565, + "order": 568, "name": "waldid32", "count": 2, "languages": 1 }, { - "order": 566, + "order": 569, "name": "reanthonyh", "count": 2, "languages": 1 }, { - "order": 567, + "order": 570, "name": "roilhi", "count": 2, "languages": 1 }, { - "order": 568, + "order": 571, "name": "cristiansystem", "count": 2, "languages": 1 }, { - "order": 569, + "order": 572, "name": "evelynnobile", "count": 2, "languages": 1 }, { - "order": 570, + "order": 573, "name": "nicolastapiasanz", "count": 2, "languages": 1 }, { - "order": 571, + "order": 574, "name": "gomezcamilo9701", "count": 2, "languages": 1 }, { - "order": 572, + "order": 575, "name": "vicgallego", "count": 2, "languages": 1 }, { - "order": 573, + "order": 576, "name": "freddyasierraj", "count": 2, "languages": 1 }, { - "order": 574, + "order": 577, "name": "luis-vb", "count": 2, "languages": 1 }, { - "order": 575, + "order": 578, "name": "vikkanh", "count": 2, "languages": 1 }, { - "order": 576, + "order": 579, "name": "juaruibr", "count": 2, "languages": 1 }, { - "order": 577, + "order": 580, "name": "crisdev3", "count": 2, "languages": 1 }, { - "order": 578, + "order": 581, "name": "frealexandro", "count": 2, "languages": 1 }, { - "order": 579, + "order": 582, "name": "gamitocu", "count": 2, "languages": 1 }, { - "order": 580, + "order": 583, "name": "saracorraless", "count": 2, "languages": 1 }, { - "order": 581, + "order": 584, "name": "cesarocbu", "count": 2, "languages": 1 }, { - "order": 582, + "order": 585, "name": "jeisonredondo", "count": 2, "languages": 1 }, { - "order": 583, + "order": 586, "name": "alanox1", "count": 2, "languages": 1 }, { - "order": 584, + "order": 587, "name": "christianumb", "count": 2, "languages": 1 }, { - "order": 585, + "order": 588, "name": "jhonf1992", "count": 2, "languages": 1 }, { - "order": 586, + "order": 589, "name": "k4rv3r", "count": 2, "languages": 1 }, { - "order": 587, + "order": 590, "name": "rikar2o", "count": 2, "languages": 1 }, { - "order": 588, + "order": 591, "name": "rolo27s", "count": 2, "languages": 1 }, { - "order": 589, + "order": 592, "name": "franciscocuminilondero", "count": 2, "languages": 1 }, { - "order": 590, + "order": 593, "name": "wesborland-github", "count": 2, "languages": 1 }, { - "order": 591, + "order": 594, "name": "doblea74", "count": 2, "languages": 1 }, { - "order": 592, + "order": 595, "name": "matiasfarfan89", "count": 2, "languages": 1 }, { - "order": 593, + "order": 596, "name": "nxl22", "count": 2, "languages": 1 }, { - "order": 594, + "order": 597, "name": "valeriatorrealba", "count": 2, "languages": 1 }, { - "order": 595, + "order": 598, "name": "farthaz", "count": 2, "languages": 1 }, { - "order": 596, + "order": 599, "name": "aleoe01", "count": 2, "languages": 1 }, { - "order": 597, + "order": 600, "name": "jaimemunozdev", "count": 2, "languages": 1 }, { - "order": 598, + "order": 601, "name": "miguelrejon96", "count": 2, "languages": 1 }, { - "order": 599, + "order": 602, "name": "jorge186414", "count": 2, "languages": 1 }, { - "order": 600, + "order": 603, "name": "andnikdev", "count": 2, "languages": 1 }, { - "order": 601, + "order": 604, "name": "soldochris", "count": 2, "languages": 1 }, { - "order": 602, + "order": 605, "name": "leonardo291024", "count": 2, "languages": 1 }, { - "order": 603, + "order": 606, "name": "mickel-arroz", "count": 2, "languages": 1 }, { - "order": 604, + "order": 607, "name": "gianbordon", "count": 2, "languages": 1 }, { - "order": 605, + "order": 608, "name": "cpcarlosprieto", "count": 2, "languages": 1 }, { - "order": 606, + "order": 609, "name": "juangomezn", "count": 2, "languages": 1 }, { - "order": 607, + "order": 610, "name": "angelvelasco1", "count": 2, "languages": 1 }, { - "order": 608, + "order": 611, "name": "ssanjua", "count": 2, "languages": 1 }, { - "order": 609, + "order": 612, "name": "murquisdev", "count": 2, "languages": 1 }, { - "order": 610, + "order": 613, "name": "erysnell", "count": 2, "languages": 1 }, { - "order": 611, - "name": "duendeintemporal", - "count": 2, - "languages": 1 - }, - { - "order": 612, + "order": 614, "name": "davhage", "count": 2, "languages": 1 }, { - "order": 613, + "order": 615, "name": "erikayeah", "count": 2, "languages": 1 }, { - "order": 614, + "order": 616, "name": "misterdan100", "count": 2, "languages": 1 }, { - "order": 615, + "order": 617, "name": "memogv", "count": 2, "languages": 1 }, { - "order": 616, + "order": 618, "name": "glaboryp", "count": 2, "languages": 1 }, { - "order": 617, + "order": 619, "name": "ovjohn", "count": 2, "languages": 1 }, { - "order": 618, + "order": 620, "name": "haryblanco20", "count": 2, "languages": 1 }, { - "order": 619, + "order": 621, "name": "christianhernandezb", "count": 2, "languages": 1 }, { - "order": 620, + "order": 622, "name": "akzorla", "count": 2, "languages": 1 }, { - "order": 621, + "order": 623, "name": "0pio", "count": 2, "languages": 1 }, { - "order": 622, + "order": 624, "name": "porto1090", "count": 2, "languages": 1 }, { - "order": 623, + "order": 625, "name": "johannhsdev", "count": 2, "languages": 1 }, { - "order": 624, + "order": 626, "name": "jago86", "count": 2, "languages": 1 }, { - "order": 625, + "order": 627, "name": "diegokarabin", "count": 2, "languages": 1 }, { - "order": 626, + "order": 628, "name": "gugliio", "count": 2, "languages": 1 }, { - "order": 627, + "order": 629, "name": "kcx46", "count": 2, "languages": 1 }, { - "order": 628, + "order": 630, "name": "nachodev7", "count": 2, "languages": 1 }, { - "order": 629, + "order": 631, "name": "fernandoatello", "count": 2, "languages": 1 }, { - "order": 630, + "order": 632, "name": "pablosalme", "count": 2, "languages": 1 }, { - "order": 631, + "order": 633, "name": "jsacristanbeltri", "count": 2, "languages": 1 }, { - "order": 632, + "order": 634, "name": "baauus", "count": 2, "languages": 1 }, { - "order": 633, + "order": 635, "name": "s384", "count": 2, "languages": 1 }, { - "order": 634, + "order": 636, "name": "lauradiazm29", "count": 2, "languages": 1 }, { - "order": 635, + "order": 637, "name": "pakomor", "count": 2, "languages": 1 }, { - "order": 636, + "order": 638, "name": "adogdev", "count": 2, "languages": 1 }, { - "order": 637, + "order": 639, "name": "eriickm", "count": 2, "languages": 1 }, { - "order": 638, + "order": 640, "name": "christiancoc", "count": 2, "languages": 1 }, { - "order": 639, + "order": 641, "name": "rojasricoo", "count": 2, "languages": 1 }, { - "order": 640, + "order": 642, "name": "inf015", "count": 2, "languages": 1 }, { - "order": 641, + "order": 643, "name": "csaraugusto2", "count": 2, "languages": 1 }, { - "order": 642, + "order": 644, "name": "zalazarmartin", "count": 2, "languages": 1 }, { - "order": 643, + "order": 645, "name": "ziellucio01", "count": 2, "languages": 1 }, { - "order": 644, + "order": 646, "name": "dota43ver", "count": 2, "languages": 1 }, { - "order": 645, + "order": 647, "name": "fjsubero", "count": 2, "languages": 1 }, { - "order": 646, + "order": 648, "name": "julind0", "count": 2, "languages": 1 }, { - "order": 647, + "order": 649, "name": "jmontoyac", "count": 2, "languages": 1 }, { - "order": 648, + "order": 650, "name": "dariangl", "count": 2, "languages": 1 }, { - "order": 649, + "order": 651, "name": "soydaviddev", "count": 2, "languages": 1 }, { - "order": 650, + "order": 652, + "name": "sofia-d-p", + "count": 2, + "languages": 1 + }, + { + "order": 653, "name": "e-techgod", "count": 2, "languages": 1 }, { - "order": 651, + "order": 654, "name": "aboredllama", "count": 2, "languages": 1 }, { - "order": 652, + "order": 655, "name": "nevaito", "count": 2, "languages": 1 }, { - "order": 653, + "order": 656, "name": "josue-py", "count": 2, "languages": 1 }, { - "order": 654, + "order": 657, "name": "nach012", "count": 2, "languages": 1 }, { - "order": 655, + "order": 658, "name": "dans182", "count": 2, "languages": 1 }, { - "order": 656, + "order": 659, "name": "freyfonseca", "count": 2, "languages": 1 }, { - "order": 657, + "order": 660, "name": "aegpgrafologo", "count": 2, "languages": 1 }, { - "order": 658, + "order": 661, "name": "alejandrovelasquezr", "count": 2, "languages": 1 }, { - "order": 659, + "order": 662, "name": "fabianpa505", "count": 2, "languages": 1 }, { - "order": 660, + "order": 663, "name": "carlosmarte23", "count": 2, "languages": 1 }, { - "order": 661, + "order": 664, "name": "anblackter", "count": 2, "languages": 1 }, { - "order": 662, + "order": 665, "name": "steven9708m", "count": 2, "languages": 1 }, { - "order": 663, + "order": 666, "name": "tic4", "count": 2, "languages": 1 }, { - "order": 664, + "order": 667, "name": "josephfaster", "count": 2, "languages": 1 }, { - "order": 665, + "order": 668, "name": "gregfc95", "count": 2, "languages": 1 }, { - "order": 666, + "order": 669, "name": "victore16", "count": 2, "languages": 1 }, { - "order": 667, + "order": 670, "name": "dokeys28", "count": 2, "languages": 1 }, { - "order": 668, + "order": 671, "name": "noaregui", "count": 2, "languages": 1 }, { - "order": 669, + "order": 672, "name": "alejandro-mantilla", "count": 2, "languages": 1 }, { - "order": 670, + "order": 673, "name": "gmigues", "count": 2, "languages": 1 }, { - "order": 671, + "order": 674, "name": "juanseevn", "count": 2, "languages": 1 }, { - "order": 672, + "order": 675, "name": "vesubius", "count": 2, "languages": 1 }, { - "order": 673, + "order": 676, "name": "zeti1231", "count": 2, "languages": 1 }, { - "order": 674, + "order": 677, "name": "cipollalucas", "count": 2, "languages": 1 }, { - "order": 675, + "order": 678, "name": "miguelberrio0810", "count": 2, "languages": 1 }, { - "order": 676, + "order": 679, "name": "santiagodc8", "count": 2, "languages": 1 }, { - "order": 677, + "order": 680, "name": "pedrojog", "count": 2, "languages": 1 }, { - "order": 678, + "order": 681, "name": "culebropalido", "count": 2, "languages": 1 }, { - "order": 679, + "order": 682, "name": "marioyellowy", "count": 2, "languages": 1 }, { - "order": 680, + "order": 683, "name": "jcknot", "count": 2, "languages": 1 }, { - "order": 681, + "order": 684, "name": "peeanoot", "count": 2, "languages": 1 }, { - "order": 682, + "order": 685, "name": "coronelsam", "count": 2, "languages": 1 }, { - "order": 683, + "order": 686, "name": "arhl2023", "count": 2, "languages": 1 }, { - "order": 684, - "name": "marianoemir", - "count": 2, - "languages": 1 - }, - { - "order": 685, + "order": 687, "name": "isidrojng", "count": 2, "languages": 1 }, { - "order": 686, + "order": 688, "name": "anaroncero", "count": 2, "languages": 1 }, { - "order": 687, + "order": 689, "name": "hersac", "count": 2, "languages": 1 }, { - "order": 688, + "order": 690, "name": "vecinacoo", "count": 2, "languages": 1 }, { - "order": 689, + "order": 691, "name": "juanmjimenezs", "count": 2, "languages": 1 }, { - "order": 690, + "order": 692, "name": "armentaangel", "count": 2, "languages": 1 }, { - "order": 691, + "order": 693, "name": "lordzzz777", "count": 2, "languages": 1 }, { - "order": 692, + "order": 694, "name": "sdm29gh", "count": 2, "languages": 1 }, { - "order": 693, + "order": 695, "name": "zonnen69", "count": 2, "languages": 1 }, { - "order": 694, + "order": 696, "name": "jmichael39", "count": 2, "languages": 1 }, { - "order": 695, + "order": 697, "name": "davidvilem", "count": 2, "languages": 1 }, { - "order": 696, + "order": 698, "name": "torvicv", "count": 1, "languages": 1 }, { - "order": 697, + "order": 699, "name": "dgquintero", "count": 1, "languages": 1 }, { - "order": 698, + "order": 700, "name": "c-blskv", "count": 1, "languages": 1 }, { - "order": 699, + "order": 701, "name": "emaerniquez", "count": 1, "languages": 1 }, { - "order": 700, + "order": 702, "name": "carolhs92", "count": 1, "languages": 1 }, { - "order": 701, + "order": 703, "name": "leonardo-henao", "count": 1, "languages": 1 }, { - "order": 702, + "order": 704, "name": "juancamilofvx", "count": 1, "languages": 1 }, { - "order": 703, + "order": 705, "name": "vikernes27666", "count": 1, "languages": 1 }, { - "order": 704, + "order": 706, "name": "cub-tor", "count": 1, "languages": 1 }, { - "order": 705, + "order": 707, "name": "nightmare79", "count": 1, "languages": 1 }, { - "order": 706, + "order": 708, "name": "carlosmperezm", "count": 1, "languages": 1 }, { - "order": 707, + "order": 709, "name": "gonzalinuz18", "count": 1, "languages": 1 }, { - "order": 708, + "order": 710, "name": "qwik-zghieb", "count": 1, "languages": 1 }, { - "order": 709, + "order": 711, "name": "miquelrr", "count": 1, "languages": 1 }, { - "order": 710, + "order": 712, "name": "miguel2rar", "count": 1, "languages": 1 }, { - "order": 711, + "order": 713, "name": "eamartin", "count": 1, "languages": 1 }, { - "order": 712, + "order": 714, "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { - "order": 713, + "order": 715, "name": "agustinfccll", "count": 1, "languages": 1 }, { - "order": 714, + "order": 716, "name": "anitandil", "count": 1, "languages": 1 }, { - "order": 715, + "order": 717, "name": "evilpodato04", "count": 1, "languages": 1 }, { - "order": 716, + "order": 718, "name": "francomyburg", "count": 1, "languages": 1 }, { - "order": 717, + "order": 719, "name": "neicervb", "count": 1, "languages": 1 }, { - "order": 718, + "order": 720, "name": "josephinoo", "count": 1, "languages": 1 }, { - "order": 719, + "order": 721, "name": "arathhh8", "count": 1, "languages": 1 }, { - "order": 720, + "order": 722, "name": "paluzz", "count": 1, "languages": 1 }, { - "order": 721, + "order": 723, "name": "theposi", "count": 1, "languages": 1 }, { - "order": 722, + "order": 724, "name": "vinyoles", "count": 1, "languages": 1 }, { - "order": 723, + "order": 725, "name": "omarroman29", "count": 1, "languages": 1 }, { - "order": 724, + "order": 726, "name": "1cel4nc3", "count": 1, "languages": 1 }, { - "order": 725, + "order": 727, "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { - "order": 726, + "order": 728, "name": "corvo-99", "count": 1, "languages": 1 }, { - "order": 727, + "order": 729, "name": "danielcastillo1112", "count": 1, "languages": 1 }, { - "order": 728, + "order": 730, "name": "malkarmah", "count": 1, "languages": 1 }, { - "order": 729, + "order": 731, "name": "devm0nk3y", "count": 1, "languages": 1 }, { - "order": 730, + "order": 732, "name": "sirvega83", "count": 1, "languages": 1 }, { - "order": 731, + "order": 733, "name": "franpua", "count": 1, "languages": 1 }, { - "order": 732, + "order": 734, "name": "van-02", "count": 1, "languages": 1 }, { - "order": 733, + "order": 735, "name": "x3mboy", "count": 1, "languages": 1 }, { - "order": 734, + "order": 736, "name": "mickysoft", "count": 1, "languages": 1 }, { - "order": 735, + "order": 737, "name": "deimoshall", "count": 1, "languages": 1 }, { - "order": 736, + "order": 738, "name": "palons29", "count": 1, "languages": 1 }, { - "order": 737, + "order": 739, "name": "serg032", "count": 1, "languages": 1 }, { - "order": 738, + "order": 740, "name": "seigigim", "count": 1, "languages": 1 }, { - "order": 739, + "order": 741, "name": "cibacoa", "count": 1, "languages": 1 }, { - "order": 740, + "order": 742, "name": "axelwestman", "count": 1, "languages": 1 }, { - "order": 741, + "order": 743, "name": "javodevon", "count": 1, "languages": 1 }, { - "order": 742, + "order": 744, "name": "mauricioyair", "count": 1, "languages": 1 }, { - "order": 743, + "order": 745, "name": "manuhssj", "count": 1, "languages": 1 }, { - "order": 744, + "order": 746, "name": "coletonosh", "count": 1, "languages": 1 }, { - "order": 745, + "order": 747, "name": "manugonzalito", "count": 1, "languages": 1 }, { - "order": 746, + "order": 748, "name": "gizelads", "count": 1, "languages": 1 }, { - "order": 747, + "order": 749, "name": "lucc4sz", "count": 1, "languages": 1 }, { - "order": 748, + "order": 750, "name": "feliaguirre7", "count": 1, "languages": 1 }, { - "order": 749, + "order": 751, "name": "rulo77", "count": 1, "languages": 1 }, { - "order": 750, + "order": 752, "name": "is2095", "count": 1, "languages": 1 }, { - "order": 751, + "order": 753, "name": "jancalos", "count": 1, "languages": 1 }, { - "order": 752, + "order": 754, "name": "marcosapodaca", "count": 1, "languages": 1 }, { - "order": 753, + "order": 755, "name": "angelcruzg23", "count": 1, "languages": 1 }, { - "order": 754, + "order": 756, "name": "ca2puntosv", "count": 1, "languages": 1 }, { - "order": 755, + "order": 757, "name": "armm77", "count": 1, "languages": 1 }, { - "order": 756, + "order": 758, "name": "afacorroloscos", "count": 1, "languages": 1 }, { - "order": 757, + "order": 759, "name": "rocadev2714", "count": 1, "languages": 1 }, { - "order": 758, + "order": 760, "name": "chrisfelixgil", "count": 1, "languages": 1 }, { - "order": 759, + "order": 761, "name": "sandrarg85", "count": 1, "languages": 1 }, { - "order": 760, + "order": 762, "name": "rootqui", "count": 1, "languages": 1 }, { - "order": 761, + "order": 763, "name": "ishimaku", "count": 1, "languages": 1 }, { - "order": 762, + "order": 764, "name": "pkmaventura", "count": 1, "languages": 1 }, { - "order": 763, + "order": 765, "name": "miguelgargallo", "count": 1, "languages": 1 }, { - "order": 764, + "order": 766, "name": "astriebeck", "count": 1, "languages": 1 }, { - "order": 765, + "order": 767, "name": "lobogeekmx", "count": 1, "languages": 1 }, { - "order": 766, + "order": 768, "name": "marvinagui", "count": 1, "languages": 1 }, { - "order": 767, + "order": 769, "name": "marqitos", "count": 1, "languages": 1 }, { - "order": 768, + "order": 770, "name": "nunezlagos", "count": 1, "languages": 1 }, { - "order": 769, + "order": 771, "name": "jcrobles99", "count": 1, "languages": 1 }, { - "order": 770, + "order": 772, "name": "ledyam", "count": 1, "languages": 1 }, { - "order": 771, + "order": 773, "name": "jatomas", "count": 1, "languages": 1 }, { - "order": 772, + "order": 774, "name": "jaennova", "count": 1, "languages": 1 }, { - "order": 773, + "order": 775, "name": "luisalberto22", "count": 1, "languages": 1 }, { - "order": 774, + "order": 776, "name": "francisleble", "count": 1, "languages": 1 }, { - "order": 775, + "order": 777, "name": "deiiviitdev", "count": 1, "languages": 1 }, { - "order": 776, + "order": 778, "name": "braiso-22", "count": 1, "languages": 1 }, { - "order": 777, + "order": 779, "name": "daniel-cas", "count": 1, "languages": 1 }, { - "order": 778, + "order": 780, "name": "acirdevelper", "count": 1, "languages": 1 }, { - "order": 779, + "order": 781, "name": "borjadelgadodev", "count": 1, "languages": 1 }, { - "order": 780, + "order": 782, "name": "elpeque29", "count": 1, "languages": 1 }, { - "order": 781, + "order": 783, "name": "jhordanluyo", "count": 1, "languages": 1 }, { - "order": 782, + "order": 784, "name": "davidcv-dev", "count": 1, "languages": 1 }, { - "order": 783, + "order": 785, "name": "mbmaeso", "count": 1, "languages": 1 }, { - "order": 784, + "order": 786, "name": "alvarominarro", "count": 1, "languages": 1 }, { - "order": 785, + "order": 787, "name": "bjchavez", "count": 1, "languages": 1 }, { - "order": 786, + "order": 788, "name": "madelefonb", "count": 1, "languages": 1 }, { - "order": 787, + "order": 789, "name": "lfwzk", "count": 1, "languages": 1 }, { - "order": 788, + "order": 790, "name": "ercky1980", "count": 1, "languages": 1 }, { - "order": 789, + "order": 791, "name": "jsruedatorres", "count": 1, "languages": 1 }, { - "order": 790, + "order": 792, "name": "jacobrwx", "count": 1, "languages": 1 }, { - "order": 791, + "order": 793, "name": "abengl", "count": 1, "languages": 1 }, { - "order": 792, + "order": 794, "name": "jd-gm", "count": 1, "languages": 1 }, { - "order": 793, + "order": 795, "name": "lucianogriffa", "count": 1, "languages": 1 }, { - "order": 794, + "order": 796, "name": "quirogapau", "count": 1, "languages": 1 }, { - "order": 795, + "order": 797, "name": "joseperesini", "count": 1, "languages": 1 }, { - "order": 796, + "order": 798, "name": "mhrosariom", "count": 1, "languages": 1 }, { - "order": 797, + "order": 799, "name": "sergioab7", "count": 1, "languages": 1 }, { - "order": 798, + "order": 800, "name": "santaravena", "count": 1, "languages": 1 }, { - "order": 799, + "order": 801, "name": "datrujillog", "count": 1, "languages": 1 }, { - "order": 800, + "order": 802, "name": "johnniew81", "count": 1, "languages": 1 }, { - "order": 801, + "order": 803, "name": "chriszaldana", "count": 1, "languages": 1 }, { - "order": 802, + "order": 804, "name": "antonioverdugo", "count": 1, "languages": 1 }, { - "order": 803, + "order": 805, "name": "kronomio", "count": 1, "languages": 1 }, { - "order": 804, + "order": 806, "name": "kevinramirez28", "count": 1, "languages": 1 }, { - "order": 805, + "order": 807, "name": "juanpablo-a", "count": 1, "languages": 1 }, { - "order": 806, + "order": 808, "name": "gerespinosa", "count": 1, "languages": 1 }, { - "order": 807, + "order": 809, "name": "1978acb", "count": 1, "languages": 1 }, { - "order": 808, + "order": 810, "name": "alexxawada", "count": 1, "languages": 1 }, { - "order": 809, + "order": 811, "name": "ricarsur", "count": 1, "languages": 1 }, { - "order": 810, + "order": 812, "name": "alemar16", "count": 1, "languages": 1 }, { - "order": 811, + "order": 813, "name": "pointfs", "count": 1, "languages": 1 }, { - "order": 812, + "order": 814, "name": "edperez07", "count": 1, "languages": 1 }, { - "order": 813, + "order": 815, "name": "dacronik", "count": 1, "languages": 1 }, { - "order": 814, + "order": 816, "name": "abraham9804", "count": 1, "languages": 1 }, { - "order": 815, + "order": 817, "name": "afl0r3s", "count": 1, "languages": 1 }, { - "order": 816, + "order": 818, "name": "dianelis1", "count": 1, "languages": 1 }, { - "order": 817, + "order": 819, "name": "fernandofl", "count": 1, "languages": 1 }, { - "order": 818, + "order": 820, "name": "conrado85", "count": 1, "languages": 1 }, { - "order": 819, + "order": 821, "name": "agus-ig", "count": 1, "languages": 1 }, { - "order": 820, + "order": 822, "name": "alvarommedia", "count": 1, "languages": 1 }, { - "order": 821, + "order": 823, "name": "maximotoro", "count": 1, "languages": 1 }, { - "order": 822, + "order": 824, "name": "m4xisil", "count": 1, "languages": 1 }, { - "order": 823, + "order": 825, "name": "francomoreira", "count": 1, "languages": 1 }, { - "order": 824, + "order": 826, "name": "aleclto7", "count": 1, "languages": 1 }, { - "order": 825, + "order": 827, "name": "nnunezmedina", "count": 1, "languages": 1 }, { - "order": 826, + "order": 828, "name": "codejoss", "count": 1, "languages": 1 }, { - "order": 827, + "order": 829, "name": "yaojema", "count": 1, "languages": 1 }, { - "order": 828, + "order": 830, "name": "romanocoder", "count": 1, "languages": 1 }, { - "order": 829, + "order": 831, "name": "sixtodev", "count": 1, "languages": 1 }, { - "order": 830, + "order": 832, "name": "cgomezadolfo", "count": 1, "languages": 1 }, { - "order": 831, + "order": 833, "name": "rojasvargas", "count": 1, "languages": 1 }, { - "order": 832, + "order": 834, "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { - "order": 833, + "order": 835, "name": "l3v1xx", "count": 1, "languages": 1 }, { - "order": 834, + "order": 836, "name": "patricioguerra30", "count": 1, "languages": 1 }, { - "order": 835, + "order": 837, "name": "lytsar", "count": 1, "languages": 1 }, { - "order": 836, + "order": 838, "name": "siuldev", "count": 1, "languages": 1 }, { - "order": 837, + "order": 839, "name": "brayancordova1", "count": 1, "languages": 1 }, { - "order": 838, + "order": 840, "name": "ronnieruuz", "count": 1, "languages": 1 }, { - "order": 839, + "order": 841, "name": "yessikamichelle", "count": 1, "languages": 1 }, { - "order": 840, + "order": 842, "name": "vainsito1", "count": 1, "languages": 1 }, { - "order": 841, + "order": 843, "name": "oscarletelier", "count": 1, "languages": 1 }, { - "order": 842, + "order": 844, "name": "kocho03", "count": 1, "languages": 1 }, { - "order": 843, + "order": 845, "name": "aidicoop", "count": 1, "languages": 1 }, { - "order": 844, + "order": 846, "name": "albabp", "count": 1, "languages": 1 }, { - "order": 845, + "order": 847, "name": "nozodev", "count": 1, "languages": 1 }, { - "order": 846, + "order": 848, "name": "mvillegas18", "count": 1, "languages": 1 }, { - "order": 847, + "order": 849, "name": "augustbs", "count": 1, "languages": 1 }, { - "order": 848, + "order": 850, "name": "luchof5", "count": 1, "languages": 1 }, { - "order": 849, + "order": 851, "name": "fullstackarlo", "count": 1, "languages": 1 }, { - "order": 850, + "order": 852, "name": "mdemena", "count": 1, "languages": 1 }, { - "order": 851, + "order": 853, "name": "cliverjimny123", "count": 1, "languages": 1 }, { - "order": 852, + "order": 854, "name": "rodmiggithub", "count": 1, "languages": 1 }, { - "order": 853, + "order": 855, "name": "s9code", "count": 1, "languages": 1 }, { - "order": 854, + "order": 856, "name": "javieradev", "count": 1, "languages": 1 }, { - "order": 855, + "order": 857, "name": "xnomada", "count": 1, "languages": 1 }, { - "order": 856, + "order": 858, "name": "miguelsarm", "count": 1, "languages": 1 }, { - "order": 857, + "order": 859, "name": "royhuamanavila", "count": 1, "languages": 1 }, { - "order": 858, + "order": 860, "name": "imista", "count": 1, "languages": 1 }, { - "order": 859, + "order": 861, "name": "denisortega", "count": 1, "languages": 1 }, { - "order": 860, + "order": 862, "name": "kouski", "count": 1, "languages": 1 }, { - "order": 861, + "order": 863, "name": "leydimadrid", "count": 1, "languages": 1 }, { - "order": 862, + "order": 864, "name": "frannm29", "count": 1, "languages": 1 }, { - "order": 863, + "order": 865, "name": "saintsluis", "count": 1, "languages": 1 }, { - "order": 864, + "order": 866, "name": "gc796", "count": 1, "languages": 1 }, { - "order": 865, + "order": 867, "name": "pierre-ol", "count": 1, "languages": 1 }, { - "order": 866, + "order": 868, "name": "francescoalterio", "count": 1, "languages": 1 }, { - "order": 867, + "order": 869, "name": "gustavoguerrero", "count": 1, "languages": 1 }, { - "order": 868, + "order": 870, "name": "diegoxxd", "count": 1, "languages": 1 }, { - "order": 869, + "order": 871, "name": "fzcarlitos", "count": 1, "languages": 1 }, { - "order": 870, + "order": 872, "name": "walkerlyna", "count": 1, "languages": 1 }, { - "order": 871, + "order": 873, "name": "sejotaz", "count": 1, "languages": 1 }, { - "order": 872, + "order": 874, "name": "frcan89", "count": 1, "languages": 1 }, { - "order": 873, + "order": 875, "name": "nicorey89", "count": 1, "languages": 1 }, { - "order": 874, + "order": 876, "name": "alexis0717", "count": 1, "languages": 1 }, { - "order": 875, + "order": 877, "name": "edgonzz", "count": 1, "languages": 1 }, { - "order": 876, + "order": 878, "name": "vmga09", "count": 1, "languages": 1 }, { - "order": 877, + "order": 879, "name": "lfam200", "count": 1, "languages": 1 }, { - "order": 878, + "order": 880, "name": "kenzambrano", "count": 1, "languages": 1 }, { - "order": 879, + "order": 881, "name": "dmhenaopa", "count": 1, "languages": 1 }, { - "order": 880, + "order": 882, "name": "jpiacaruso", "count": 1, "languages": 1 }, { - "order": 881, + "order": 883, "name": "isnatthy", "count": 1, "languages": 1 }, { - "order": 882, + "order": 884, "name": "diego-santana23", "count": 1, "languages": 1 }, { - "order": 883, + "order": 885, "name": "peticas", "count": 1, "languages": 1 }, { - "order": 884, + "order": 886, "name": "flarien", "count": 1, "languages": 1 }, { - "order": 885, + "order": 887, "name": "franciscokarriere", "count": 1, "languages": 1 }, { - "order": 886, + "order": 888, "name": "pipeyz21", "count": 1, "languages": 1 }, { - "order": 887, + "order": 889, "name": "luisgarm", "count": 1, "languages": 1 }, { - "order": 888, + "order": 890, "name": "tetotille", "count": 1, "languages": 1 }, { - "order": 889, + "order": 891, "name": "vorosdev", "count": 1, "languages": 1 }, { - "order": 890, + "order": 892, "name": "santiagomac", "count": 1, "languages": 1 }, { - "order": 891, + "order": 893, "name": "implevacui", "count": 1, "languages": 1 }, { - "order": 892, + "order": 894, "name": "fede6299", "count": 1, "languages": 1 }, { - "order": 893, + "order": 895, "name": "kevin05m", "count": 1, "languages": 1 }, { - "order": 894, + "order": 896, "name": "diegomm27", "count": 1, "languages": 1 }, { - "order": 895, + "order": 897, + "name": "whiterunjarl", + "count": 1, + "languages": 1 + }, + { + "order": 898, "name": "pablo-lnx", "count": 1, "languages": 1 }, { - "order": 896, + "order": 899, "name": "darkohokage", "count": 1, "languages": 1 }, { - "order": 897, + "order": 900, "name": "jhonnfl", "count": 1, "languages": 1 }, { - "order": 898, + "order": 901, "name": "jarzatedev", "count": 1, "languages": 1 }, { - "order": 899, + "order": 902, "name": "brunom-93", "count": 1, "languages": 1 }, { - "order": 900, + "order": 903, "name": "alejandroruiz23", "count": 1, "languages": 1 }, { - "order": 901, + "order": 904, "name": "trollface77", "count": 1, "languages": 1 }, { - "order": 902, + "order": 905, "name": "jaimesoftdev", "count": 1, "languages": 1 }, { - "order": 903, + "order": 906, "name": "edm1ya", "count": 1, "languages": 1 }, { - "order": 904, + "order": 907, "name": "tartabullroberto", "count": 1, "languages": 1 }, { - "order": 905, + "order": 908, "name": "serg-pq", "count": 1, "languages": 1 }, { - "order": 906, + "order": 909, "name": "lara-vel-dev", "count": 1, "languages": 1 }, { - "order": 907, + "order": 910, "name": "alexisbarradev", "count": 1, "languages": 1 }, { - "order": 908, + "order": 911, "name": "kelvincb", "count": 1, "languages": 1 }, { - "order": 909, + "order": 912, "name": "carlostoledoe", "count": 1, "languages": 1 }, { - "order": 910, + "order": 913, "name": "gilbertho502", "count": 1, "languages": 1 }, { - "order": 911, + "order": 914, "name": "v0l0v", "count": 1, "languages": 1 }, { - "order": 912, + "order": 915, "name": "johao23", "count": 1, "languages": 1 }, { - "order": 913, + "order": 916, "name": "geridage", "count": 1, "languages": 1 }, { - "order": 914, + "order": 917, "name": "vmarialuzm", "count": 1, "languages": 1 }, { - "order": 915, + "order": 918, "name": "snowcardenas", "count": 1, "languages": 1 }, { - "order": 916, + "order": 919, "name": "and-y21", "count": 1, "languages": 1 }, { - "order": 917, + "order": 920, "name": "arturodlapaz17", "count": 1, "languages": 1 }, { - "order": 918, + "order": 921, "name": "manuu42", "count": 1, "languages": 1 }, { - "order": 919, + "order": 922, "name": "howlett9999", "count": 1, "languages": 1 }, { - "order": 920, + "order": 923, "name": "dkp-dev", "count": 1, "languages": 1 }, { - "order": 921, + "order": 924, "name": "hnaranjog", "count": 1, "languages": 1 }, { - "order": 922, + "order": 925, "name": "wallsified", "count": 1, "languages": 1 }, { - "order": 923, + "order": 926, "name": "javitron100", "count": 1, "languages": 1 }, { - "order": 924, + "order": 927, "name": "lluistech", "count": 1, "languages": 1 }, { - "order": 925, + "order": 928, "name": "mamartinez14", "count": 1, "languages": 1 }, { - "order": 926, + "order": 929, "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { - "order": 927, + "order": 930, "name": "bassalex27", "count": 1, "languages": 1 }, { - "order": 928, + "order": 931, "name": "yetlanezils", "count": 1, "languages": 1 }, { - "order": 929, + "order": 932, "name": "ndepaul82", "count": 1, "languages": 1 }, { - "order": 930, + "order": 933, "name": "amitchellg", "count": 1, "languages": 1 }, { - "order": 931, + "order": 934, "name": "turudev1979", "count": 1, "languages": 1 }, { - "order": 932, + "order": 935, "name": "deivimiller", "count": 1, "languages": 1 }, { - "order": 933, + "order": 936, "name": "haroldalb", "count": 1, "languages": 1 }, { - "order": 934, + "order": 937, "name": "dakkaj", "count": 1, "languages": 1 }, { - "order": 935, + "order": 938, "name": "jheisonquiroga", "count": 1, "languages": 1 }, { - "order": 936, + "order": 939, "name": "juli-m4", "count": 1, "languages": 1 }, { - "order": 937, + "order": 940, "name": "sergiomhernandez", "count": 1, "languages": 1 }, { - "order": 938, + "order": 941, "name": "masenace", "count": 1, "languages": 1 }, { - "order": 939, + "order": 942, "name": "e-xtian", "count": 1, "languages": 1 }, { - "order": 940, + "order": 943, "name": "vickalck", "count": 1, "languages": 1 }, { - "order": 941, + "order": 944, "name": "gmedinat911", "count": 1, "languages": 1 }, { - "order": 942, + "order": 945, "name": "eljavi0", "count": 1, "languages": 1 }, { - "order": 943, + "order": 946, "name": "yeisongil", "count": 1, "languages": 1 }, { - "order": 944, + "order": 947, "name": "julioorozco05", "count": 1, "languages": 1 }, { - "order": 945, + "order": 948, "name": "fergz1988", "count": 1, "languages": 1 }, { - "order": 946, + "order": 949, "name": "marcos0803", "count": 1, "languages": 1 }, { - "order": 947, + "order": 950, "name": "xcortes", "count": 1, "languages": 1 }, { - "order": 948, + "order": 951, "name": "facundorsabia", "count": 1, "languages": 1 }, { - "order": 949, + "order": 952, "name": "nico70012", "count": 1, "languages": 1 }, { - "order": 950, + "order": 953, "name": "charly024", "count": 1, "languages": 1 }, { - "order": 951, + "order": 954, "name": "devjerez", "count": 1, "languages": 1 }, { - "order": 952, + "order": 955, "name": "copamire", "count": 1, "languages": 1 }, { - "order": 953, + "order": 956, "name": "gersonoroz", "count": 1, "languages": 1 }, { - "order": 954, + "order": 957, "name": "jafuma0320", "count": 1, "languages": 1 }, { - "order": 955, + "order": 958, "name": "g4nd4lf", "count": 1, "languages": 1 }, { - "order": 956, + "order": 959, "name": "obed-tc", "count": 1, "languages": 1 }, { - "order": 957, + "order": 960, "name": "devkenn", "count": 1, "languages": 1 }, { - "order": 958, + "order": 961, "name": "xalejandrow", "count": 1, "languages": 1 }, { - "order": 959, + "order": 962, "name": "henrydavidprimera", "count": 1, "languages": 1 }, { - "order": 960, + "order": 963, "name": "luceldasilva", "count": 1, "languages": 1 }, { - "order": 961, + "order": 964, "name": "mjordanaam", "count": 1, "languages": 1 }, { - "order": 962, + "order": 965, "name": "betulioo", "count": 1, "languages": 1 }, { - "order": 963, + "order": 966, "name": "judithernandez", "count": 1, "languages": 1 }, { - "order": 964, + "order": 967, "name": "dimanu-py", "count": 1, "languages": 1 }, { - "order": 965, + "order": 968, "name": "snowale", "count": 1, "languages": 1 }, { - "order": 966, + "order": 969, "name": "cd1974", "count": 1, "languages": 1 }, { - "order": 967, + "order": 970, "name": "acobo3", "count": 1, "languages": 1 }, { - "order": 968, + "order": 971, "name": "isaacdci", "count": 1, "languages": 1 }, { - "order": 969, + "order": 972, "name": "manueldenisdev", "count": 1, "languages": 1 }, { - "order": 970, + "order": 973, "name": "anexo01", "count": 1, "languages": 1 }, { - "order": 971, + "order": 974, "name": "yamiyugi25", "count": 1, "languages": 1 }, { - "order": 972, + "order": 975, "name": "gl-informatica", "count": 1, "languages": 1 }, { - "order": 973, + "order": 976, "name": "miguelmancebo", "count": 1, "languages": 1 }, { - "order": 974, + "order": 977, "name": "neusier101", "count": 1, "languages": 1 }, { - "order": 975, + "order": 978, "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { - "order": 976, + "order": 979, "name": "xhinto", "count": 1, "languages": 1 }, { - "order": 977, + "order": 980, "name": "dacaldev", "count": 1, "languages": 1 }, { - "order": 978, + "order": 981, "name": "juan-cruz01", "count": 1, "languages": 1 }, { - "order": 979, + "order": 982, "name": "juanalbornoz32", "count": 1, "languages": 1 }, { - "order": 980, + "order": 983, "name": "cisneros2404", "count": 1, "languages": 1 }, { - "order": 981, + "order": 984, "name": "neftalyr", "count": 1, "languages": 1 }, { - "order": 982, + "order": 985, "name": "latorredev", "count": 1, "languages": 1 }, { - "order": 983, + "order": 986, "name": "osneidert", "count": 1, "languages": 1 }, { - "order": 984, + "order": 987, "name": "jrgranadosb", "count": 1, "languages": 1 }, { - "order": 985, + "order": 988, "name": "vicvilla30", "count": 1, "languages": 1 }, { - "order": 986, + "order": 989, "name": "carlosbb70", "count": 1, "languages": 1 }, { - "order": 987, + "order": 990, "name": "pablom-2015", "count": 1, "languages": 1 }, { - "order": 988, + "order": 991, "name": "xtinarita", "count": 1, "languages": 1 }, { - "order": 989, + "order": 992, "name": "wilsonbarrera", "count": 1, "languages": 1 }, { - "order": 990, + "order": 993, "name": "jereaguilar", "count": 1, "languages": 1 }, { - "order": 991, + "order": 994, "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { - "order": 992, + "order": 995, "name": "danidan1214", "count": 1, "languages": 1 }, { - "order": 993, + "order": 996, "name": "demegorash", "count": 1, "languages": 1 }, { - "order": 994, + "order": 997, "name": "cris10026", "count": 1, "languages": 1 }, { - "order": 995, + "order": 998, "name": "davidgramiro", "count": 1, "languages": 1 }, { - "order": 996, + "order": 999, "name": "jgarteag", "count": 1, "languages": 1 }, { - "order": 997, + "order": 1000, "name": "adcarret", "count": 1, "languages": 1 }, { - "order": 998, + "order": 1001, "name": "natanaelzubiri", "count": 1, "languages": 1 }, { - "order": 999, + "order": 1002, "name": "diegogomezcor4", "count": 1, "languages": 1 }, { - "order": 1000, + "order": 1003, "name": "perla-zg", "count": 1, "languages": 1 }, { - "order": 1001, + "order": 1004, "name": "neshurtado", "count": 1, "languages": 1 }, { - "order": 1002, + "order": 1005, "name": "marcelinoarias369", "count": 1, "languages": 1 }, { - "order": 1003, + "order": 1006, "name": "pushodev", "count": 1, "languages": 1 }, { - "order": 1004, + "order": 1007, "name": "sherkla12e", "count": 1, "languages": 1 }, { - "order": 1005, + "order": 1008, "name": "luisangeles20", "count": 1, "languages": 1 }, { - "order": 1006, + "order": 1009, + "name": "johannmanrique", + "count": 1, + "languages": 1 + }, + { + "order": 1010, "name": "omar8102", "count": 1, "languages": 1 }, { - "order": 1007, + "order": 1011, "name": "eatsangels", "count": 1, "languages": 1 }, { - "order": 1008, + "order": 1012, "name": "alejarandro", "count": 1, "languages": 1 }, { - "order": 1009, + "order": 1013, "name": "tashidian", "count": 1, "languages": 1 }, { - "order": 1010, + "order": 1014, "name": "alejandro000", "count": 1, "languages": 1 }, { - "order": 1011, + "order": 1015, "name": "francgci", "count": 1, "languages": 1 }, { - "order": 1012, + "order": 1016, "name": "krisipo", "count": 1, "languages": 1 }, { - "order": 1013, + "order": 1017, "name": "jalonso76", "count": 1, "languages": 1 }, { - "order": 1014, + "order": 1018, "name": "leo18q", "count": 1, "languages": 1 }, { - "order": 1015, + "order": 1019, "name": "sofiamfernandez", "count": 1, "languages": 1 }, { - "order": 1016, + "order": 1020, "name": "jgregoris", "count": 1, "languages": 1 }, { - "order": 1017, + "order": 1021, "name": "josuelopez5", "count": 1, "languages": 1 }, { - "order": 1018, + "order": 1022, "name": "mrf1989", "count": 1, "languages": 1 }, { - "order": 1019, + "order": 1023, "name": "zeraven09", "count": 1, "languages": 1 }, { - "order": 1020, + "order": 1024, "name": "pr1de-23", "count": 1, "languages": 1 }, { - "order": 1021, + "order": 1025, "name": "kronoscba", "count": 1, "languages": 1 }, { - "order": 1022, + "order": 1026, "name": "erickcis", "count": 1, "languages": 1 }, { - "order": 1023, + "order": 1027, "name": "experthacker444", "count": 1, "languages": 1 }, { - "order": 1024, + "order": 1028, "name": "javirr4", "count": 1, "languages": 1 }, { - "order": 1025, + "order": 1029, "name": "ignacioskm", "count": 1, "languages": 1 }, { - "order": 1026, + "order": 1030, "name": "jchernandez87", "count": 1, "languages": 1 }, { - "order": 1027, + "order": 1031, "name": "ferngpv", "count": 1, "languages": 1 }, { - "order": 1028, + "order": 1032, "name": "kshields51", "count": 1, "languages": 1 }, { - "order": 1029, + "order": 1033, "name": "salas89", "count": 1, "languages": 1 }, { - "order": 1030, + "order": 1034, "name": "90dread", "count": 1, "languages": 1 }, { - "order": 1031, + "order": 1035, "name": "chema-dw", "count": 1, "languages": 1 }, { - "order": 1032, + "order": 1036, "name": "sbngl", "count": 1, "languages": 1 }, { - "order": 1033, + "order": 1037, "name": "m4xxdev", "count": 1, "languages": 1 }, { - "order": 1034, + "order": 1038, "name": "cristianvergaraf", "count": 1, "languages": 1 }, { - "order": 1035, + "order": 1039, "name": "lizzymaken", "count": 1, "languages": 1 }, { - "order": 1036, + "order": 1040, "name": "jandortiz", "count": 1, "languages": 1 }, { - "order": 1037, + "order": 1041, "name": "claudios1980", "count": 1, "languages": 1 }, { - "order": 1038, + "order": 1042, "name": "sergiovelayos", "count": 1, "languages": 1 }, { - "order": 1039, + "order": 1043, "name": "miguelangel861", "count": 1, "languages": 1 }, { - "order": 1040, + "order": 1044, "name": "marcosjarrin", "count": 1, "languages": 1 }, { - "order": 1041, + "order": 1045, "name": "jandresalvar", "count": 1, "languages": 1 }, { - "order": 1042, + "order": 1046, "name": "joferpg", "count": 1, "languages": 1 }, { - "order": 1043, + "order": 1047, "name": "jlrojano", "count": 1, "languages": 1 }, { - "order": 1044, + "order": 1048, "name": "ivanserran", "count": 1, "languages": 1 }, { - "order": 1045, + "order": 1049, "name": "dany3gs", "count": 1, "languages": 1 }, { - "order": 1046, + "order": 1050, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1047, + "order": 1051, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1048, + "order": 1052, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1049, + "order": 1053, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1050, + "order": 1054, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1051, + "order": 1055, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1052, + "order": 1056, "name": "bycris13", "count": 1, "languages": 1 }, { - "order": 1053, + "order": 1057, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1054, + "order": 1058, "name": "v1k770r", "count": 1, "languages": 1 }, { - "order": 1055, + "order": 1059, "name": "gianellannie", "count": 1, "languages": 1 }, { - "order": 1056, + "order": 1060, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1057, + "order": 1061, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1058, + "order": 1062, "name": "fredylopez01", "count": 1, "languages": 1 }, { - "order": 1059, + "order": 1063, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1060, + "order": 1064, "name": "lautimorales", "count": 1, "languages": 1 }, { - "order": 1061, + "order": 1065, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1062, + "order": 1066, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1063, + "order": 1067, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1064, + "order": 1068, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1065, + "order": 1069, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1066, + "order": 1070, "name": "adriansaint07", "count": 1, "languages": 1 }, { - "order": 1067, + "order": 1071, "name": "javiir", "count": 1, "languages": 1 }, { - "order": 1068, + "order": 1072, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1069, + "order": 1073, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1070, + "order": 1074, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1075, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1076, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1077, "name": "jrgim", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1078, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1079, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1080, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1081, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1082, "name": "robermejia", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1083, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1084, "name": "reneguzman7", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1085, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1086, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1087, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1088, "name": "queralesdev", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1089, "name": "dovinhoyos", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1090, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1091, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1092, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1093, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1094, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1095, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1096, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1097, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1098, "name": "antoniojzp86", "count": 1, "languages": 1 }, { - "order": 1095, + "order": 1099, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1096, + "order": 1100, "name": "zyn7e", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1101, "name": "diegopardomontero", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1102, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1103, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1104, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1105, "name": "clespinosa2024", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1106, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1107, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1108, + "name": "cdryampi", + "count": 1, + "languages": 1 + }, + { + "order": 1109, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1110, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1111, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1112, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1113, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1114, "name": "rawc1nnamon", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1115, + "name": "mvidab", + "count": 1, + "languages": 1 + }, + { + "order": 1116, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1117, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1118, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1119, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1120, "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1121, "name": "orzefox", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1122, "name": "acirdeveloper", "count": 1, "languages": 1 }, { - "order": 1117, + "order": 1123, "name": "emiliordev", "count": 1, "languages": 1 }, { - "order": 1118, + "order": 1124, "name": "sve-nnn", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1125, "name": "edgarmedranoa", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1126, "name": "rafapg93", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1127, "name": "vickalc", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1128, "name": "riukac", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1129, "name": "rusian69", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1130, "name": "wijimenezz", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1131, "name": "albertovf", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1132, "name": "markayala13", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1133, "name": "rocha30", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1134, "name": "righelch", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1135, "name": "deathbat00", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1136, "name": "nicoloboo02", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1137, "name": "sergiopq", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1138, "name": "angeloro", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1139, "name": "jony-english22", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1140, "name": "tilordqwerty", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1141, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1142, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1143, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1144, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1145, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1146, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1147, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1148, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1149, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1144, + "order": 1150, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1145, + "order": 1151, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1152, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1153, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1148, + "order": 1154, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1149, + "order": 1155, "name": "willypaz243", "count": 1, "languages": 1 }, { - "order": 1150, + "order": 1156, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1151, + "order": 1157, + "name": "arperezinf", + "count": 1, + "languages": 1 + }, + { + "order": 1158, "name": "alecraft8", "count": 1, "languages": 1 }, { - "order": 1152, + "order": 1159, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1153, + "order": 1160, "name": "juampaweb", "count": 1, "languages": 1 }, { - "order": 1154, + "order": 1161, "name": "girngoma", "count": 1, "languages": 1 }, { - "order": 1155, + "order": 1162, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1156, + "order": 1163, "name": "ddaniel27", "count": 1, "languages": 1 }, { - "order": 1157, + "order": 1164, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1158, + "order": 1165, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1159, + "order": 1166, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1160, + "order": 1167, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1161, + "order": 1168, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1162, + "order": 1169, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1163, + "order": 1170, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1164, + "order": 1171, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1165, + "order": 1172, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1166, + "order": 1173, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1167, + "order": 1174, "name": "ouendinga", "count": 1, "languages": 1 }, { - "order": 1168, + "order": 1175, "name": "melonconyogurt", "count": 1, "languages": 1 From 7a542ff6e571513acfe838e1964a6b871aa57ef2 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Fri, 13 Sep 2024 20:51:06 -0400 Subject: [PATCH 213/539] 37 - JavaScript --- .../javascript/RicJDev.js | 129 ++++-------------- 1 file changed, 24 insertions(+), 105 deletions(-) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js index a076937838..9df6cb1034 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js @@ -1,114 +1,33 @@ -/* -fetch('https://accounts.spotify.com/api/token', { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - body: new URLSearchParams({ - grant_type: 'client_credentials', - client_id: clientId, - client_secret: clientSecret, - }), -}) - .then((response) => response.json()) - .then((data) => { - const artistId = '4Z8W4fKeB5YxbusRsdQVPb' - - const url = `https://api.spotify.com/v1/artists/${artistId}` - - fetch(url, { - method: 'GET', - headers: { - Authorization: `${data.token_type} ${data.access_token}`, - }, - }) - .then((response) => { - if (!response.ok) { - throw new Error('Network response was not ok') - } - return response.json() - }) - .then((dataArtist) => { - console.log(dataArtist) - }) - .catch((error) => { - console.error('Error:', error) - }) - }) - .catch((error) => { - console.error('Error:', error) +// Creamos una función para obtener el token de acceso y le pasaremos el client_id y secret_client como parámetros. + +async function getToken(clientId, clientSecret) { + const accessToken = await fetch('https://accounts.spotify.com/api/token', { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: new URLSearchParams({ + grant_type: 'client_credentials', + client_id: clientId, + client_secret: clientSecret, + }), }) -*/ - -// import * as readline from 'readline/promises' - -// const rl = readline.createInterface({ -// input: process.stdin, -// output: process.stdout, -// }) + .then((response) => response.json()) + .catch((err) => console.log(err)) -// async function getToken(clientId, clientSecret) { -// fetch('https://accounts.spotify.com/api/token', { -// method: 'POST', -// headers: { -// 'Content-Type': 'application/x-www-form-urlencoded', -// }, -// body: new URLSearchParams({ -// grant_type: 'client_credentials', -// client_id: clientId, -// client_secret: clientSecret, -// }), -// }) -// .then((response) => -// response -// .json() -// .then((data) => { -// return `${data.token_type} ${data.access_token}` -// }) -// .catch((err) => console.log(err)) -// ) -// .catch((err) => console.log(err)) -// } - -// const clientId = await rl.question('Ingrese su client ID. ') -// const clientSecret = await rl.question('Ingrese su client secret ID. ') - -// const token = await getToken(clientId, clientSecret).catch((err) => console.log(err)) - -// const artistId = '4Z8W4fKeB5YxbusRsdQVPb' - -// const url = `https://api.spotify.com/v1/artists/${artistId}` - -// fetch(url, { -// method: 'GET', -// headers: { -// Authorization: token, -// }, -// }) -// .then((response) => { -// if (!response.ok) { -// throw new Error('Network response was not ok') -// } -// return response.json() -// }) -// .then((dataArtist) => { -// console.log(dataArtist) -// }) -// .catch((error) => { -// console.error('Error:', error) -// }) - -// rl.close() + return accessToken +} /* +* IMPORTANTE * -* El archivo client.js (que no estará disponible dentro del repo) contiene las ID's de mi cuenta. +Estoy importando mis ID's del archivo RicJDev_client.js (que no está disponible dentro del repo). +Si desea ejecutar este código deberá pasar sus propias ID's como parámetros de la función getToken(). -* Para ejecutar el programa deberá crear las variables clientId y clientSecret y asignarles -* sus propias ID's o pasarlas como parámetros de la función getToken(). +Para obtenerlas puede revisar esta sección en su cuenta de Spotify para desarrolladores: https://developer.spotify.com/dashboard */ -import { clientId, clientSecret } from './client.js' -console.log(clientId) -console.log(clientSecret) +import { myClientId, myClientSecret } from './RicJDev_client.js' + +const token = await getToken(myClientId, myClientSecret) From 3506670b1bb7e68dda7cda2ab260883b3a8b32ba Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Fri, 13 Sep 2024 22:21:44 -0400 Subject: [PATCH 214/539] 37 - JavaScript --- .../javascript/RicJDev.js | 64 +++++++++++++++++-- 1 file changed, 57 insertions(+), 7 deletions(-) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js index 9df6cb1034..5c779c74c6 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js @@ -1,7 +1,13 @@ -// Creamos una función para obtener el token de acceso y le pasaremos el client_id y secret_client como parámetros. +/** + * Genera un token de acceso, necesario para hacer peticiones a la API de Spotify. + * + * @param {string} clientId Visite https://developer.spotify.com/dashboard para obtenerlo. + * @param {string} clientSecret Visite https://developer.spotify.com/dashboard para obtenerlo. + * @returns {Promise} + */ async function getToken(clientId, clientSecret) { - const accessToken = await fetch('https://accounts.spotify.com/api/token', { + const token = await fetch('https://accounts.spotify.com/api/token', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', @@ -15,19 +21,63 @@ async function getToken(clientId, clientSecret) { .then((response) => response.json()) .catch((err) => console.log(err)) - return accessToken + return token } /* -* IMPORTANTE * -Estoy importando mis ID's del archivo RicJDev_client.js (que no está disponible dentro del repo). -Si desea ejecutar este código deberá pasar sus propias ID's como parámetros de la función getToken(). +* IMPORTANTE * -Para obtenerlas puede revisar esta sección en su cuenta de Spotify para desarrolladores: https://developer.spotify.com/dashboard +Estoy importando mis id's del archivo RicJDev_client.js (lo cual dará error, ya que no lo he subido al repo). +Si desea ejecutar este código deberá usar sus propias id's. */ import { myClientId, myClientSecret } from './RicJDev_client.js' const token = await getToken(myClientId, myClientSecret) + +/** + * Retorna la información sobre un artista utilizando la API de Spotify. + * + * @param {string} artistId se obtiene de la página del artista en Spotify `https://open.spotify.com/intl-es/artist/{artistId}`. + * @param {object} token token de acceso. Use getToken() para obetenerlo. + * @returns {Promise} + */ + +async function getArtistData(artistId, token) { + const artistData = await fetch(`https://api.spotify.com/v1/artists/${artistId}`, { + method: 'GET', + headers: { + Authorization: `${token.token_type} ${token.access_token}`, + }, + }) + .then((response) => response.json()) + .catch((err) => console.log(err)) + + return artistData +} + +// Almacenamos las id's de Oasis y Linkin Park. + +const OasisId = '4YwysTnPMvi1Q72Zopy8VA' +const LinkinParkId = '6XyY86QOPPrYVGvF9ch6wz' + +const OasisData = await getArtistData(OasisId, token) +const LinkinParkData = await getArtistData(LinkinParkId, token) + +console.log(OasisData) +console.log(LinkinParkData) + +/* +TODO: + +Acciones: +1. Accede a las estadísticas de las dos bandas. + Por ejemplo: número total de seguidores, escuchas mensuales, + canción con más reproducciones... +2. Compara los resultados de, por lo menos, 3 endpoint. +3. Muestra todos los resultados por consola para notificar al usuario. +4. Desarrolla un criterio para seleccionar qué banda es más popular. + +*/ \ No newline at end of file From a0a37da926185a6729eca81cd5029d1be5e84a9a Mon Sep 17 00:00:00 2001 From: GordoMaster Date: Fri, 13 Sep 2024 23:59:04 -0400 Subject: [PATCH 215/539] #20-Python --- .../python/Gordo-Master.py | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 Roadmap/20 - PETICIONES HTTP/python/Gordo-Master.py diff --git a/Roadmap/20 - PETICIONES HTTP/python/Gordo-Master.py b/Roadmap/20 - PETICIONES HTTP/python/Gordo-Master.py new file mode 100644 index 0000000000..a1f8ed5b53 --- /dev/null +++ b/Roadmap/20 - PETICIONES HTTP/python/Gordo-Master.py @@ -0,0 +1,84 @@ +# 20 - Peticiones HTTP + +import requests + +url = "https://moure.dev" + +response = requests.get(url) +if response.status_code == 200: + print(response.text) +else: + print(f"Error con código {response.status_code} al realizar la petición") + +""" +Ejercicio extra +""" + +session = requests.Session() + +name = input("Introduce un nombre o número del pokemon a buscar: ").lower() + +url = f"https://pokeapi.co/api/v2/pokemon/{name}/" + +response = session.get(url) + +data = response.json() +if response.status_code == 200: + + name = data["name"] + id = data["id"] + weight = data["weight"] + height = data["height"] + type_pokemon = [] + for i in data["types"]: + type_pokemon.append(i["type"]["name"]) + + response = session.get(data["species"]["url"]) + if response.status_code == 200: + + url_2 = response.json()["evolution_chain"]["url"] + + response = session.get(url_2) + + if response.status_code == 200: + + data = response.json() + evolution = [] + + def create_the_total_list(data, all_evolves, actual_evolves = []): + + actual_evolves.append(data["species"]["name"]) + + if data["evolves_to"] == []: + all_evolves.append(list(actual_evolves)) + else: + for evolves in data["evolves_to"]: + create_the_total_list(evolves,all_evolves,actual_evolves) + + actual_evolves.pop() + + + create_the_total_list(data["chain"],evolution) + + + url_3 = f"https://pokeapi.co/api/v2/pokemon/{id}/encounters" + + game_where_apear = [] + for i in session.get(url_3).json(): + game_where_apear.append(i["version_details"][0]["version"]["name"]) + game_where_apear = set(game_where_apear) + + print(f"Nombre: {name}") + print(f"ID: {id}") + print(f"Peso: {weight}") + print(f"Altura: {height}") + print(f"Tipos: {type_pokemon}") + print(f"Linea evolutiva: ") + for i in evolution: + print(i) + print(f"Juegos donde aparece: {game_where_apear}") + +else: + print(f"Nombre incorrecto, con error de {response.status_code}") + +session.close() \ No newline at end of file From d774aaca588ead93b400c2c54b779bcc72735fb2 Mon Sep 17 00:00:00 2001 From: kenysdev Date: Fri, 13 Sep 2024 23:04:12 -0500 Subject: [PATCH 216/539] 37 - vb.net - OASIS VS LINKIN PARK --- .../vb.net/kenysdev.vb | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/vb.net/kenysdev.vb diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/vb.net/kenysdev.vb b/Roadmap/37 - OASIS VS LINKIN PARK/vb.net/kenysdev.vb new file mode 100644 index 0000000000..d6d72d8132 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/vb.net/kenysdev.vb @@ -0,0 +1,138 @@ +' _____________________________________ +' https://github.com/kenysdev +' 2024 - vb.net +' _____________________________________ +' 37 OASIS VS LINKIN PARK +' ------------------------------------ +'* ¡Dos de las bandas más grandes de la historia están de vuelta! +'* Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? +'* Desarrolla un programa que se conecte al API de Spotify y los compare. +'* Requisitos: +'* 1. Crea una cuenta de desarrollo en https//developer.spotify.com. +'* 2. Conéctate al API utilizando tu lenguaje de programación. +'* 3. Recupera datos de los endpoint que tú quieras. +'* Acciones: +'* 1. Accede a las estadísticas de las dos bandas. +'* Por ejemplo: número total de seguidores, escuchas mensuales, +'* canción con más reproducciones... +'* 2. Compara los resultados de, por lo menos, 3 endpoint. +'* 3. Muestra todos los resultados por consola para notificar al usuario. +'* 4. Desarrolla un criterio para seleccionar qué banda es más popular. + +Imports SpotifyAPI.Web +Imports DotNetEnv + +Public Class Spotify + Private ReadOnly _spotify As SpotifyClient + + Public Sub New() + Env.Load() + Dim clientId = Environment.GetEnvironmentVariable("SPOTIFY_CLIENT_ID") + Dim clientSecret = Environment.GetEnvironmentVariable("SPOTIFY_CLIENT_SECRET") + + If String.IsNullOrEmpty(clientId) OrElse String.IsNullOrEmpty(clientSecret) Then + Throw New ArgumentException("Se debe proporcionar 'CLIENT_ID' y 'CLIENT_SECRET'.") + End If + + Dim config = SpotifyClientConfig.CreateDefault(). + WithAuthenticator(New ClientCredentialsAuthenticator(clientId, clientSecret)) + + _spotify = New SpotifyClient(config) + End Sub + + Public Async Function GetMostPopularArtistAsync(name As String) As Task(Of FullArtist) + Dim searchRequest As New SearchRequest(SearchRequest.Types.Artist, name) With { + .Limit = 3 + } + Dim searchResult = Await _spotify.Search.Item(searchRequest) + + Return searchResult?.Artists?.Items?. + OrderByDescending(Function(artist) artist.Popularity). + FirstOrDefault() + End Function + + Public Async Function ArtistTopTracksAsync(artistId As String) As Task(Of ArtistsTopTracksResponse) + Return Await _spotify.Artists.GetTopTracks(artistId, New ArtistsTopTracksRequest("US")) + End Function +End Class + +Public Class Versus + Private ReadOnly _artist1 As FullArtist + Private ReadOnly _artist2 As FullArtist + Private ReadOnly _spotify As Spotify + Private _artist1Score As Integer = 0 + Private _artist2Score As Integer = 0 + + Public Sub New(artist1 As FullArtist, artist2 As FullArtist, spotifyInstance As Spotify) + _artist1 = artist1 + _artist2 = artist2 + _spotify = spotifyInstance + End Sub + + Private Sub ComparePopularity() + Console.WriteLine($"Popularidad: {_artist1.Popularity} vs {_artist2.Popularity}") + IncrementScore(_artist1.Popularity, _artist2.Popularity) + End Sub + + Private Sub CompareFollowers() + Console.WriteLine($"Seguidores: {_artist1.Followers.Total} vs {_artist2.Followers.Total}") + IncrementScore(_artist1.Followers.Total, _artist2.Followers.Total) + End Sub + + Private Async Function CompareTopTracksAsync() As Task + Dim a1Top = Await _spotify.ArtistTopTracksAsync(_artist1.Id) + Dim a2Top = Await _spotify.ArtistTopTracksAsync(_artist2.Id) + + Dim a1Pop = a1Top.Tracks.Take(3).Sum(Function(track) track.Popularity) + Dim a2Pop = a2Top.Tracks.Take(3).Sum(Function(track) track.Popularity) + + Console.WriteLine($"Popularidad Top 3 canciones: {a1Pop} vs {a2Pop}") + IncrementScore(a1Pop, a2Pop) + End Function + + Private Sub IncrementScore(value1 As Integer, value2 As Integer) + If value1 > value2 Then + _artist1Score += 1 + ElseIf value2 > value1 Then + _artist2Score += 1 + End If + End Sub + + Private Sub ShowFinalResult() + Console.WriteLine($"{vbCrLf}RESULTADO FINAL:") + Console.WriteLine($"{_artist1.Name}: {_artist1Score} puntos") + Console.WriteLine($"{_artist2.Name}: {_artist2Score} puntos") + + Dim winner = If(_artist1Score > _artist2Score, _artist1.Name, + If(_artist2Score > _artist1Score, _artist2.Name, "Empate")) + + Console.WriteLine($"{vbCrLf}¡{If(winner = "Empate", "Es un empate", $"'{winner}' gana el versus")}!") + End Sub + + Public Async Function StartAsync() As Task + Console.WriteLine($"{_artist1.Name} vs {_artist2.Name}") + ComparePopularity() + CompareFollowers() + Await CompareTopTracksAsync() + ShowFinalResult() + End Function +End Class + +Module Program + + Public Sub Main() + Console.WriteLine("VERSUS") + Dim spotify = New Spotify() + + Dim artist1 = spotify.GetMostPopularArtistAsync("Oasis").GetAwaiter().GetResult() + Dim artist2 = spotify.GetMostPopularArtistAsync("Linkin Park").GetAwaiter().GetResult() + + If artist1 Is Nothing OrElse artist2 Is Nothing Then + Console.WriteLine("Artistas no encontrados") + Return + End If + + Dim versus = New Versus(artist1, artist2, spotify) + versus.StartAsync().GetAwaiter().GetResult() + End Sub +End Module From 8b98e75c0416f3e21a5122f879bff9a117b1e5b7 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Sat, 14 Sep 2024 00:19:26 -0500 Subject: [PATCH 217/539] #04 - Java --- .../java/martinbohorquez.java | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 Roadmap/04 - CADENAS DE CARACTERES/java/martinbohorquez.java diff --git a/Roadmap/04 - CADENAS DE CARACTERES/java/martinbohorquez.java b/Roadmap/04 - CADENAS DE CARACTERES/java/martinbohorquez.java new file mode 100644 index 0000000000..7202106fdc --- /dev/null +++ b/Roadmap/04 - CADENAS DE CARACTERES/java/martinbohorquez.java @@ -0,0 +1,139 @@ +import java.util.*; +import java.util.stream.Collectors; + +/** + * #04 CADENAS DE CARACTERES + * + * @author martinbohorquez + */ +public class martinbohorquez { + /** + * Operaciones

+ * Concatenación, Repeat, ChartAt, Length, Substring + */ + private static final String STRING_1 = "Hola"; + private static final String STRING_2 = "Java"; + private static final String STRING_3 = "\s Road to World Cup \n"; + + public static void main(String[] args) { + + System.out.println(STRING_1 + ", " + STRING_2 + "!");//Concatenación + System.out.println(STRING_1.repeat(3));//Repeat + System.out.println(STRING_1.charAt(2));//ChartAt + System.out.println(STRING_1.length());//Length + + System.out.println(STRING_1.substring(1, STRING_1.length() - 1));//Substring + System.out.println(STRING_1.contains("ol"));//Contains + + System.out.println(STRING_1.toLowerCase());//toLowerCase + System.out.println(STRING_1.toUpperCase());//toUpperCase + + System.out.println(STRING_1.replace("H", "S"));//replace + + System.out.println("----- STRIP AND TRIM ------"); + System.out.println("'" + STRING_3 + "'"); + System.out.println("'" + STRING_3.strip() + "'");//strip + System.out.println("'" + STRING_3.stripLeading() + "'"); + System.out.println("'" + STRING_3.stripTrailing() + "'"); + System.out.println("'" + STRING_3.stripIndent() + "'"); + System.out.println("'" + STRING_3.trim() + "'");//trim + + System.out.println("----- REPLACE AND SPLIT ------"); + System.out.println("'" + STRING_3.replace(" ", "") + "'");//replace + System.out.println("'" + STRING_3.replaceAll("[oa]", "u") + "'");//replaceAl + System.out.println(Arrays.stream(STRING_3.split("o")).toList());//split + + System.out.println("----- REVERSE ------"); + StringBuilder sb = new StringBuilder(STRING_3); + System.out.println(sb.reverse());//reverse + + System.out.println(STRING_2.startsWith("Ja")); + System.out.println(STRING_1.endsWith("la")); + + System.out.println(STRING_3.indexOf("o"));//indexOf + System.out.println(STRING_3.lastIndexOf("o")); + System.out.println(STRING_3.indexOf("ad")); + + System.out.printf("Esto es una interpolación: %s, %s!%n", STRING_1, STRING_2);//interpolación + + System.out.println(Arrays.stream(STRING_2.split("")).sorted().toList());//transformar a lista ordenada + + System.out.println(STRING_2.chars()//transformar a lista ordenada + .mapToObj(c -> (char) c) + .sorted() + .toList()); + + /* + * DIFICULTAD EXTRA + * Palíndromos + * Anagramas + * Isogramas + */ + System.out.println(); + System.out.println("DIFICULTAD EXTRA:\n"); + + String text1 = "Anita lava la tina"; + String text2 = "Radar"; + System.out.println("¿'" + text1 + "' es un palíndromo? : " + isPalindrome(text1)); + System.out.println("¿'" + text2 + "' es un palíndromo? : " + isPalindrome(text2)); + + String text3 = "Listen"; + String text4 = "Silent"; + System.out.println("¿El conjunto de '" + text3 + "' y '" + text4 + "' es un anagrama? : " + + isAnagram(text3, text4)); + + String text5 = "Yuxtaponer"; + System.out.println("¿'" + text5 + "' es un heterograma? : " + isHeterogram(text5)); + + String text6 = "Intestines"; + System.out.println("¿'" + text6 + "' es un isograma? : " + isIsogram(text6)); + } + + private static boolean isPalindrome(String text) { + text = text.replace(" ", "").toLowerCase(); + StringBuilder sb = new StringBuilder(text); + return sb.reverse().toString().equals(text); + } + + private static boolean isAnagram(String text1, String text2) { + return sorted(text1.toLowerCase()).equals(sorted(text2.toLowerCase())); + } + + private static String sorted(String text) { + return text.chars() + .mapToObj(c -> (char) c) + .sorted() + .toList() + .toString(); + } + + private static boolean isHeterogram(String text) { + long sizeText = text.length(); + Set textSet = getSet(text); + return sizeText == textSet.size(); + } + + private static Set getSet(String text) { + return text.toLowerCase() + .chars() + .mapToObj(c -> (char) c) + .collect(Collectors.toSet()); + } + + private static boolean isIsogram(String text) { + Map diccionario = new HashMap<>(); + Set setText = getSet(text.toLowerCase()); + if (text.length() % setText.size() != 0) { + return false; + } + setText.forEach(k -> diccionario.put(k, countLetters(text.toLowerCase(), k))); + return new HashSet<>(diccionario.values()).size() == 1; + } + + private static Integer countLetters(String text, Character k) { + return (int) text.toLowerCase().chars().mapToObj(c -> (char) c) + .filter(c -> c.equals(k)) + .count(); + } + +} From 4ac0c0dedb29ec10178331dab2f55e1a457d76a7 Mon Sep 17 00:00:00 2001 From: Isaac Morcillo Garcia Date: Sat, 14 Sep 2024 11:39:17 +0200 Subject: [PATCH 218/539] #37 - javascript --- .../javascript/isaacus98.js | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/javascript/isaacus98.js diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/isaacus98.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/isaacus98.js new file mode 100644 index 0000000000..38ceccf9cc --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/isaacus98.js @@ -0,0 +1,101 @@ +/* + * EJERCICIO: + * Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? + * ¡Dos de las bandas más grandes de la historia están de vuelta! + * Desarrolla un programa que se conecte al API de Spotify y los compare. + * Requisitos: + * 1. Crea una cuenta de desarrollo en https://developer.spotify.com. + * 2. Conéctate al API utilizando tu lenguaje de programación. + * 3. Recupera datos de los endpoint que tú quieras. + * Acciones: + * 1. Accede a las estadísticas de las dos bandas. + * Por ejemplo: número total de seguidores, escuchas mensuales, + * canción con más reproducciones... + * 2. Compara los resultados de, por lo menos, 3 endpoint. + * 3. Muestra todos los resultados por consola para notificar al usuario. + * 4. Desarrolla un criterio para seleccionar qué banda es más popular. + */ + +class Band { + constructor(name, followers, bandPopularity, songName, songPopularity) { + this.name = name + this.followers = followers + this.bandPopularity = bandPopularity + this.songName = songName + this.songPopularity = songPopularity + } +} +const idLinkinPark = "6XyY86QOPPrYVGvF9ch6wz" +const idOasis = "2DaxqgrOhkeH0fpeiQq2f4" + +let client_id = ""//'CLIENT_ID'; +let client_secret = "" //'CLIENT_SECRET'; + +// Obtener token de spotify +async function getTokenAsync() { + const response = await fetch('https://accounts.spotify.com/api/token', { + method: 'POST', + body: new URLSearchParams({ + 'grant_type': 'client_credentials', + }), + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Authorization': 'Basic ' + (Buffer.from(client_id + ':' + client_secret).toString('base64')), + }, + }); + + return await response.json(); +} + +async function getArtistInfoAsync(access_token, idArtist) { + const response = await fetch("https://api.spotify.com/v1/artists/" + idArtist, { + method: "GET", + headers: { 'Authorization': 'Bearer ' + access_token } + }) + + return await response.json() +} + +async function getTopTracksAsync(access_token, idArtist) { + const response = await fetch("https://api.spotify.com/v1/artists/" + idArtist + "/top-tracks", { + method: "GET", + headers: { 'Authorization': 'Bearer ' + access_token } + }) + + return await response.json() +} + +async function mainAsync() { + const token = await getTokenAsync() + const infoLinkinPark = await getArtistInfoAsync(token.access_token, idLinkinPark) + const topTrackLinkinPark = await getTopTracksAsync(token.access_token, idLinkinPark) + const infoOasis = await getArtistInfoAsync(token.access_token, idOasis) + const topTrackOasis = await getTopTracksAsync(token.access_token, idOasis) + + let linkinPark = new Band(infoLinkinPark.name, infoLinkinPark.followers.total, infoLinkinPark.popularity, topTrackLinkinPark.tracks[0].name, topTrackLinkinPark.tracks[0].popularity) + let oasis = new Band(infoOasis.name, infoOasis.followers.total, infoOasis.popularity, topTrackOasis.tracks[0].name, topTrackOasis.tracks[0].popularity) + + console.group(linkinPark.name) + console.log(`Número de seguidores: ${linkinPark.followers}`) + console.log(`Popularidad de la banda: ${linkinPark.bandPopularity}`) + console.log(`Canción mas escuchada actualmente: ${linkinPark.songName}, popularidad: ${linkinPark.songPopularity}`) + console.groupEnd() + + console.group(oasis.name) + console.log(`Número de seguidores: ${oasis.followers}`) + console.log(`Popularidad de la banda: ${oasis.bandPopularity}`) + console.log(`Canción mas escuchada actualmente: ${oasis.songName}, popularidad: ${oasis.songPopularity}`) + console.groupEnd() + + // Comparación + let linkinParkScore = 0 + let oasisScore = 0 + + linkinPark.followers > oasis.followers ? linkinParkScore++ : oasisScore++ + linkinPark.bandPopularity > oasis.bandPopularity ? linkinParkScore++ : oasisScore++ + linkinPark.songPopularity > oasis.songPopularity ? linkinParkScore++ : oasisScore++ + + console.log(`La banda ${linkinParkScore > oasisScore ? linkinPark.name : oasis.name} es mas popular que ${linkinParkScore < oasisScore ? linkinPark.name : oasis.name}`) +} + +mainAsync() \ No newline at end of file From 260aca5933f7cd6063385826c0f80fcfe608e87d Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sat, 14 Sep 2024 11:44:08 +0200 Subject: [PATCH 219/539] #03 java --- .../java/eulogioep.java | 161 ++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/java/eulogioep.java diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/java/eulogioep.java b/Roadmap/03 - ESTRUCTURAS DE DATOS/java/eulogioep.java new file mode 100644 index 0000000000..43d9b29972 --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/java/eulogioep.java @@ -0,0 +1,161 @@ +import java.util.*; + +public class eulogioep { + + public static void main(String[] args) { + // Ejemplos de estructuras de datos en Java + ejemplosEstructurasDatos(); + + // Agenda de contactos + agendaContactos(); + } + + public static void ejemplosEstructurasDatos() { + // ArrayList: Lista dinámica + List arrayList = new ArrayList<>(); + arrayList.add("Java"); + arrayList.add("Python"); + arrayList.add("C++"); + System.out.println("ArrayList: " + arrayList); + + // LinkedList: Lista enlazada + List linkedList = new LinkedList<>(); + linkedList.add("Rojo"); + linkedList.add("Verde"); + linkedList.add("Azul"); + System.out.println("LinkedList: " + linkedList); + + // HashSet: Conjunto sin duplicados y sin orden + Set hashSet = new HashSet<>(); + hashSet.add(1); + hashSet.add(2); + hashSet.add(2); // No se añade por ser duplicado + System.out.println("HashSet: " + hashSet); + + // TreeSet: Conjunto ordenado + Set treeSet = new TreeSet<>(); + treeSet.add(3); + treeSet.add(1); + treeSet.add(2); + System.out.println("TreeSet: " + treeSet); // Imprime en orden + + // HashMap: Mapa clave-valor + Map hashMap = new HashMap<>(); + hashMap.put("Uno", 1); + hashMap.put("Dos", 2); + hashMap.put("Tres", 3); + System.out.println("HashMap: " + hashMap); + + // Operaciones + arrayList.remove("Python"); // Borrado + linkedList.set(1, "Amarillo"); // Actualización + Collections.sort(arrayList); // Ordenación + + System.out.println("ArrayList después de operaciones: " + arrayList); + System.out.println("LinkedList después de operaciones: " + linkedList); + } + + public static void agendaContactos() { + Scanner scanner = new Scanner(System.in); + Map agenda = new HashMap<>(); + + while (true) { + System.out.println("\n--- Agenda de Contactos ---"); + System.out.println("1. Buscar contacto"); + System.out.println("2. Añadir contacto"); + System.out.println("3. Actualizar contacto"); + System.out.println("4. Eliminar contacto"); + System.out.println("5. Mostrar todos los contactos"); + System.out.println("6. Salir"); + System.out.print("Seleccione una opción: "); + + int opcion = scanner.nextInt(); + scanner.nextLine(); // Consumir el salto de línea + + switch (opcion) { + case 1: + buscarContacto(agenda, scanner); + break; + case 2: + anadirContacto(agenda, scanner); + break; + case 3: + actualizarContacto(agenda, scanner); + break; + case 4: + eliminarContacto(agenda, scanner); + break; + case 5: + mostrarContactos(agenda); + break; + case 6: + System.out.println("¡Hasta luego!"); + return; + default: + System.out.println("Opción no válida."); + } + } + } + + private static void buscarContacto(Map agenda, Scanner scanner) { + System.out.print("Ingrese el nombre del contacto: "); + String nombre = scanner.nextLine(); + String telefono = agenda.get(nombre); + if (telefono != null) { + System.out.println("Teléfono de " + nombre + ": " + telefono); + } else { + System.out.println("Contacto no encontrado."); + } + } + + private static void anadirContacto(Map agenda, Scanner scanner) { + System.out.print("Ingrese el nombre del contacto: "); + String nombre = scanner.nextLine(); + String telefono = solicitarTelefono(scanner); + agenda.put(nombre, telefono); + System.out.println("Contacto añadido con éxito."); + } + + private static void actualizarContacto(Map agenda, Scanner scanner) { + System.out.print("Ingrese el nombre del contacto a actualizar: "); + String nombre = scanner.nextLine(); + if (agenda.containsKey(nombre)) { + String telefono = solicitarTelefono(scanner); + agenda.put(nombre, telefono); + System.out.println("Contacto actualizado con éxito."); + } else { + System.out.println("Contacto no encontrado."); + } + } + + private static void eliminarContacto(Map agenda, Scanner scanner) { + System.out.print("Ingrese el nombre del contacto a eliminar: "); + String nombre = scanner.nextLine(); + if (agenda.remove(nombre) != null) { + System.out.println("Contacto eliminado con éxito."); + } else { + System.out.println("Contacto no encontrado."); + } + } + + private static void mostrarContactos(Map agenda) { + if (agenda.isEmpty()) { + System.out.println("La agenda está vacía."); + } else { + for (Map.Entry entry : agenda.entrySet()) { + System.out.println(entry.getKey() + ": " + entry.getValue()); + } + } + } + + private static String solicitarTelefono(Scanner scanner) { + while (true) { + System.out.print("Ingrese el número de teléfono (máximo 11 dígitos): "); + String telefono = scanner.nextLine(); + if (telefono.matches("\\d{1,11}")) { + return telefono; + } + System.out.println("Número no válido. Debe ser numérico y tener máximo 11 dígitos."); + } + } +} \ No newline at end of file From 216ba3d83b28e6b681e1efc75ca9774dcf458fc2 Mon Sep 17 00:00:00 2001 From: avcenal <134477562+avcenal@users.noreply.github.com> Date: Sat, 14 Sep 2024 11:45:23 +0200 Subject: [PATCH 220/539] #33 - Python Ejercicio #33 del Roadmap de 2024 --- .../python/avcenal.py | 358 ++++++++++++++++++ 1 file changed, 358 insertions(+) create mode 100644 Roadmap/33 - RESCATANDO A MICKEY/python/avcenal.py diff --git a/Roadmap/33 - RESCATANDO A MICKEY/python/avcenal.py b/Roadmap/33 - RESCATANDO A MICKEY/python/avcenal.py new file mode 100644 index 0000000000..906677989b --- /dev/null +++ b/Roadmap/33 - RESCATANDO A MICKEY/python/avcenal.py @@ -0,0 +1,358 @@ +""" +* EJERCICIO: + * ¡Disney ha presentado un montón de novedades en su D23! + * Pero... ¿Dónde está Mickey? + * Mickey Mouse ha quedado atrapado en un laberinto mágico + * creado por Maléfica. + * Desarrolla un programa para ayudarlo a escapar. + * Requisitos: + * 1. El laberinto está formado por un cuadrado de 6x6 celdas. + * 2. Los valores de las celdas serán: + * - ⬜️ Vacío + * - ⬛️ Obstáculo + * - 🐭 Mickey + * - 🚪 Salida + * Acciones: + * 1. Crea una matriz que represente el laberinto (no hace falta + * que se genere de manera automática). + * 2. Interactúa con el usuario por consola para preguntarle hacia + * donde se tiene que desplazar (arriba, abajo, izquierda o derecha). + * 3. Muestra la actualización del laberinto tras cada desplazamiento. + * 4. Valida todos los movimientos, teniendo en cuenta los límites + * del laberinto y los obtáculos. Notifica al usuario. + * 5. Finaliza el programa cuando Mickey llegue a la salida. +""" +#A pesar de que en el ejercicio no se pide, el programa genera el laberinto de manera automática +#Esto tiene varias limitaciones a nivel de cuántos obstáculos se pueden colocar para que el juego tenga solución + +from abc import ABC,abstractmethod +from random import randint,shuffle +from math import ceil + +#Clases Abstractas +class AbstractBoardGenerator(ABC): + @abstractmethod + def create_board(self): + pass + +class AbstractPlaceMickeyAndExit(ABC): + @abstractmethod + def place_mickey_and_exit(self,board:AbstractBoardGenerator): + pass + +class AbstractObstaclesGenerator(ABC): + @abstractmethod + def place_obstacles(self,board:AbstractBoardGenerator): + pass + +class AbstractBoardChecker(ABC): + @abstractmethod + def confirm_board(self,board:AbstractBoardGenerator): + pass + +class AbstractBoardPrinter(ABC): + @abstractmethod + def print_board(self,board:AbstractBoardGenerator): + pass + +class AbstractMickeyMove(ABC): + @abstractmethod + def __init__(self): + pass + + @abstractmethod + def move_up(self): + pass + + @abstractmethod + def move_down(self): + pass + + @abstractmethod + def move_left(self): + pass + + @abstractmethod + def move_right(self): + pass + +class AbstractMoveChecker(ABC): + @abstractmethod + def check_move(self,board:AbstractBoardGenerator): + pass + +#Clases del programa que implementan las abstractas + +#Clase que se ocupa de colocar a Mickey y la Salida +class PlaceMickeyAndExit(AbstractPlaceMickeyAndExit): + def place_mickey_and_exit(self,board:AbstractBoardGenerator): + while True: + mickey_row = randint(0,board.number_of_rows-1) + mickey_column = randint(0,board.number_of_columns-1) + if mickey_row == 0: + out_row = 5 + out_column = randint(0,board.number_of_columns-1) + break + elif mickey_row == 5: + out_row = 0 + out_column = randint(0,board.number_of_columns-1) + break + else: + if mickey_column == 0: + out_column = board.number_of_columns-1 + out_row = randint(0,board.number_of_rows-1) + break + elif mickey_column == board.number_of_columns-1: + out_column = 0 + out_row = randint(0,board.number_of_rows-1) + break + + board.board[mickey_row][mickey_column] = "🐭" + board.board[out_row][out_column] = "🚪" + return mickey_row,mickey_column,out_row,out_column + +class ObstaclesGenerator(AbstractObstaclesGenerator): + #Método privado que genera 2 obstáculos por cuadrante de manera aleatoria + def __set_obstacles_in_cuadrant(self,board:AbstractBoardGenerator,rows_start:int,rows_limit:int,columns_start:int,columns_limit:int,number_of_obstacles:int): + index = 0 + positions = [(row, col) for row in range(rows_start, rows_limit + 1) for col in range(columns_start, columns_limit + 1)] + shuffle(positions) # Mezclar posiciones para seleccionar aleatoriamente + while index < number_of_obstacles: + row, column = positions.pop() + if board.board[row][column] == "⬜️": + board.board[row][column] = "⬛️" + index +=1 + #método que calcula cuántos obstáculos se han de colocar por cuadrante según el tamaño del tablero (2 en este ejercicio) y usa __set_obstacles_in_cuadrant para generarlos + def place_obstacles(self,board:AbstractBoardGenerator): + NUMBER_OF_OBSTACLES = ceil((board.number_of_rows*board.number_of_columns)*2/9/4) #la proporcion es 9/2, por cada 9 casillas se ponen un máximo de 2 obstáculos para que el laberinto tenga solución. El resultado se divide entre 4 cuadrantes + #primer cuadrante + rows_start = 0 + rows_limit = int(board.number_of_rows/2-1) + colunms_start = 0 + columns_limit = int(board.number_of_columns/2-1) + self.__set_obstacles_in_cuadrant(board,rows_start,rows_limit,colunms_start,columns_limit,NUMBER_OF_OBSTACLES) + #segundo cuadrante + rows_start = int(board.number_of_rows/2) + rows_limit = board.number_of_rows-1 + colunms_start = 0 + columns_limit = int(board.number_of_columns/2-1) + self.__set_obstacles_in_cuadrant(board,rows_start,rows_limit,colunms_start,columns_limit,NUMBER_OF_OBSTACLES) + #tercer cuadrante + rows_start = 0 + rows_limit = int(board.number_of_rows/2-1) + colunms_start = int(board.number_of_columns/2) + columns_limit = board.number_of_columns-1 + self.__set_obstacles_in_cuadrant(board,rows_start,rows_limit,colunms_start,columns_limit,NUMBER_OF_OBSTACLES) + #cuarto cuadrante + rows_start = int(board.number_of_rows/2) + rows_limit = board.number_of_rows-1 + colunms_start = int(board.number_of_columns/2) + columns_limit = board.number_of_columns-1 + self.__set_obstacles_in_cuadrant(board,rows_start,rows_limit,colunms_start,columns_limit,NUMBER_OF_OBSTACLES) + +class BoardChecker(AbstractBoardChecker): #comprueba que ni Mickey ni la salida están bloqueados por obstáculos + def __check_position(self,board:AbstractBoardGenerator,row:int,column:int): #este método privado revisa que Mickey o la Salida no estén rodeados por obstáculos devolviendo un boolean + valid_position = True + if row == 5: + if board.board[row-1][column] == "⬛️" and board.board[row][column-1] == "⬛️" and board.board[row][column+1] == "⬛️": + valid_position = False + elif column == 5: + if board.board[row-1][column] == "⬛️" and board.board[row+1][column] == "⬛️" and board.board[row][column-1] == "⬛️": + valid_position = False + elif row == 0: + if board.board[row][column+1] == "⬛️" and board.board[row+1][column] == "⬛️" and board.board[row][column-1] == "⬛️": + valid_position = False + elif column == 0: + if board.board[row-1][column] == "⬛️" and board.board[row+1][column] == "⬛️" and board.board[row][column+1] == "⬛️": + valid_position = False + elif row == 0 and column == 0: + if board.board[row+1][column] == "⬛️" and board.board[row][column+1] == "⬛️": + valid_position = False + elif row == 5 and column == 5: + if board.board[row-1][column] == "⬛️" and board.board[row][column-1] == "⬛️": + valid_position = False + elif row == 0 and column == 5: + if board.board[row+1][column] == "⬛️" and board.board[row][column-1] == "⬛️": + valid_position = False + elif row == 5 and column == 0: + if board.board[row-1][column] == "⬛️" and board.board[row][column+1] == "⬛️": + valid_position = False + else: + if board.board[row-1][column] == "⬛️" and board.board[row+1][column] == "⬛️" and board.board[row][column-1] == "⬛️" and board.board[row][column+1] == "⬛️": + valid_position = False + + return valid_position + + #Este método confirma el tablero apoyándose en __check_position. Si Mickey o la salida están rodeados, genera un nuevo tablero y lo comprueba de manera recursiva + def confirm_board(self, board: AbstractBoardGenerator,place_mickey_and_exit:AbstractPlaceMickeyAndExit,obstacle_generator:AbstractObstaclesGenerator): + if not self.__check_position(board,board.mickey_row,board.mickey_column) or not self.__check_position(board,board.out_row,board.out_column): + board.create_blank_board() + board.mickey_row,board.mickey_column,board.out_row,board.out_column = place_mickey_and_exit.place_mickey_and_exit(board) + obstacle_generator.place_obstacles(board) + self.confirm_board(board,place_mickey_and_exit,obstacle_generator) + else: + pass + +class BoardPrinter(AbstractBoardPrinter): #imprime el tablero por consola + def print_board(self,board:AbstractBoardGenerator): + row_printed = "" + index = 0 + for row in board.board: + for index,column in enumerate(row): + if index == len(row)-1: + row_printed += f"{row[index]}\n" + else: + row_printed += f"{row[index]} " + print (row_printed) + row_printed = "" + +class BoardGenerator(AbstractBoardGenerator): #genera el tablero en blanco y usa el resto de métodos para generar los obstáculos y colocar a Mickey y la salida + def create_blank_board(self): + for i in range (0,self.number_of_rows): + row = [] + for index in range(0,self.number_of_columns): + row.append("⬜️") + self.board.append(row) + + def create_board(self,number_of_rows:int,number_of_columns:int,place_mickey_and_exit:AbstractPlaceMickeyAndExit,place_obstacles:AbstractObstaclesGenerator,confirm_board:AbstractBoardChecker): + self.number_of_rows:int = number_of_rows + self.number_of_columns:int = number_of_columns + self.board:list = [] + self.create_blank_board() + self.mickey_row,self.mickey_column,self.out_row,self.out_column = place_mickey_and_exit.place_mickey_and_exit(self) + place_obstacles.place_obstacles(self) + confirm_board.confirm_board(self,place_mickey_and_exit,place_obstacles) + return self.mickey_row,self.mickey_column,self.out_row,self.out_column + +class MoveChecker(AbstractMoveChecker): #con este método comprueba que el movimiento es válido y si ha llegado a la salida o no. + def check_move(self,board:AbstractBoardGenerator,move:AbstractMickeyMove): + exit = False + if move.up: + if board.mickey_row == 0: + print("Mickey no puede avanzar en esa dirección, se chocaría con la pared del laberinto\n") + move.up = False + else: + row = board.mickey_row + board.mickey_row -= 1 + if board.board[board.mickey_row][board.mickey_column] == "🚪": + board.board[row][board.mickey_column] ="⬜️" + print("¡Mickey ha conseguido salir del laberinto!\n") + exit = True + elif board.board[board.mickey_row][board.mickey_column] != "⬛️": + board.board[board.mickey_row][board.mickey_column] = "🐭" + board.board[row][board.mickey_column] ="⬜️" + move.up = False + else: + print("Mickey no se puede mover ahi, hay un obstáculo en el camino\n") + board.mickey_row = row + move.up = False + elif move.down: + row = board.mickey_row + try: + board.mickey_row +=1 + if board.board[board.mickey_row][board.mickey_column] == "🚪": + board.board[row][board.mickey_column] ="⬜️" + print("¡Mickey ha conseguido salir del laberinto!\n") + exit = True + elif board.board[board.mickey_row][board.mickey_column] != "⬛️": + board.board[board.mickey_row][board.mickey_column] = "🐭" + board.board[row][board.mickey_column] ="⬜️" + move.down = False + else: + print("Mickey no se puede mover ahi, hay un obstáculo en el camino\n") + board.mickey_row = row + move.down = False + except IndexError: + print("Mickey no puede avanzar en esa dirección, se chocaría con la pared del laberinto\n") + move.down = False + elif move.left: + if board.mickey_column == 0: + print("Mickey no puede avanzar en esa dirección, se chocaría con la pared del laberinto\n") + move.left = False + else: + column = board.mickey_column + board.mickey_column -= 1 + if board.board[board.mickey_row][board.mickey_column] == "🚪": + board.board[board.mickey_row][column] ="⬜️" + print("¡Mickey ha conseguido salir del laberinto!\n") + exit = True + elif board.board[board.mickey_row][board.mickey_column] != "⬛️": + board.board[board.mickey_row][board.mickey_column] = "🐭" + board.board[board.mickey_row][column] ="⬜️" + move.left = False + else: + print("Mickey no se puede mover ahi, hay un obstáculo en el camino\n") + board.mickey_column = column + move.left = False + elif move.right: + column = board.mickey_column + try: + board.mickey_column += 1 + if board.board[board.mickey_row][board.mickey_column] == "🚪": + board.board[board.mickey_row][column] ="⬜️" + print("¡Mickey ha conseguido salir del laberinto!\n") + exit = True + elif board.board[board.mickey_row][board.mickey_column] != "⬛️": + board.board[board.mickey_row][board.mickey_column] = "🐭" + board.board[board.mickey_row][column] ="⬜️" + move.right = False + else: + print("Mickey no se puede mover ahi, hay un obstáculo en el camino\n") + board.mickey_column = column + move.right = False + except IndexError: + print("Mickey no puede avanzar en esa dirección, se chocaría con la pared del laberinto\n") + move.right = False + return exit + +class MickeyMove(AbstractMickeyMove): #clase para el movimiento de Mickey + def __init__(self): + self.up:bool = False + self.down:bool = False + self.right:bool = False + self.left:bool = False + + def move_up(self): + self.up = True + return self + + def move_down(self): + self.down = True + return self + + def move_left(self): + self.left = True + return self + + def move_right(self): + self.right = True + return self + +exit = False +NUMBER_OF_ROWS = 6 #se podría solicitar el tamaño del tablero por consola. +NUMBER_OF_COLUMNS = 6 +board = BoardGenerator() +mickey_row,mickey_column,out_row,out_column = board.create_board(NUMBER_OF_ROWS,NUMBER_OF_COLUMNS,PlaceMickeyAndExit(),ObstaclesGenerator(),BoardChecker()) +board_printer = BoardPrinter() +print("Te doy la bienvenida al Laberinto del D23 en el que tendrás que ayudar a Mickey a escapar\n") +board_printer.print_board(board) +print("\n") +mickey_move = MickeyMove() +move_checker = MoveChecker() +while not exit: + input_move = input("¿Hacia donde quieres mover a Mickey?\n- Arriba (U)\n- Abajo (D)\n- Izquierda (L)\n- Derecha (R)\n Introduce el movimiento por favor: ").upper() + if input_move == "U": + move = mickey_move.move_up() + elif input_move == "D": + move = mickey_move.move_down() + elif input_move == "L": + move = mickey_move.move_left() + elif input_move == "R": + move = mickey_move.move_right() + else: + print("Vaya, parece que Mickey no puede hacer ese movimiento, probemos de nuevo...") + exit = move_checker.check_move(board,move) + board_printer.print_board(board) + print("\n") + +print("Enhorabuena y gracias por ayudar a Mickey a salir del laberinto. Hasta pronto.") From 27bc29c7177d812fc13ed47c37e55a3d47d4e7ef Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sat, 14 Sep 2024 11:45:24 +0200 Subject: [PATCH 221/539] #03 javascript --- .../javascript/eulogioep.js | 154 ++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/eulogioep.js diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/eulogioep.js b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/eulogioep.js new file mode 100644 index 0000000000..fff68e925d --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/eulogioep.js @@ -0,0 +1,154 @@ +// Importamos el módulo readline para manejar la entrada del usuario +const readline = require('readline'); + +// Creamos una interfaz de readline +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +// Función para ejemplificar las estructuras de datos en JavaScript +function ejemplosEstructurasDatos() { + // Array: equivalente a ArrayList en Java + let array = ['Java', 'Python', 'JavaScript']; + console.log('Array:', array); + + // Set: conjunto sin duplicados + let set = new Set([1, 2, 2, 3, 4]); + console.log('Set:', set); + + // Map: equivalente a HashMap en Java + let map = new Map(); + map.set('Uno', 1); + map.set('Dos', 2); + map.set('Tres', 3); + console.log('Map:', map); + + // Operaciones + array.splice(1, 1); // Borrado (elimina 'Python') + array[1] = 'TypeScript'; // Actualización + array.sort(); // Ordenación + + console.log('Array después de operaciones:', array); +} + +// Función principal para la agenda de contactos +function agendaContactos() { + let agenda = new Map(); + + function mostrarMenu() { + console.log("\n--- Agenda de Contactos ---"); + console.log("1. Buscar contacto"); + console.log("2. Añadir contacto"); + console.log("3. Actualizar contacto"); + console.log("4. Eliminar contacto"); + console.log("5. Mostrar todos los contactos"); + console.log("6. Salir"); + rl.question("Seleccione una opción: ", manejarOpcion); + } + + function manejarOpcion(opcion) { + switch (opcion) { + case '1': + buscarContacto(); + break; + case '2': + anadirContacto(); + break; + case '3': + actualizarContacto(); + break; + case '4': + eliminarContacto(); + break; + case '5': + mostrarContactos(); + break; + case '6': + console.log("¡Hasta luego!"); + rl.close(); + return; + default: + console.log("Opción no válida."); + mostrarMenu(); + } + } + + function buscarContacto() { + rl.question("Ingrese el nombre del contacto: ", (nombre) => { + if (agenda.has(nombre)) { + console.log(`Teléfono de ${nombre}: ${agenda.get(nombre)}`); + } else { + console.log("Contacto no encontrado."); + } + mostrarMenu(); + }); + } + + function anadirContacto() { + rl.question("Ingrese el nombre del contacto: ", (nombre) => { + solicitarTelefono((telefono) => { + agenda.set(nombre, telefono); + console.log("Contacto añadido con éxito."); + mostrarMenu(); + }); + }); + } + + function actualizarContacto() { + rl.question("Ingrese el nombre del contacto a actualizar: ", (nombre) => { + if (agenda.has(nombre)) { + solicitarTelefono((telefono) => { + agenda.set(nombre, telefono); + console.log("Contacto actualizado con éxito."); + mostrarMenu(); + }); + } else { + console.log("Contacto no encontrado."); + mostrarMenu(); + } + }); + } + + function eliminarContacto() { + rl.question("Ingrese el nombre del contacto a eliminar: ", (nombre) => { + if (agenda.delete(nombre)) { + console.log("Contacto eliminado con éxito."); + } else { + console.log("Contacto no encontrado."); + } + mostrarMenu(); + }); + } + + function mostrarContactos() { + if (agenda.size === 0) { + console.log("La agenda está vacía."); + } else { + agenda.forEach((telefono, nombre) => { + console.log(`${nombre}: ${telefono}`); + }); + } + mostrarMenu(); + } + + function solicitarTelefono(callback) { + rl.question("Ingrese el número de teléfono (máximo 11 dígitos): ", (telefono) => { + if (/^\d{1,11}$/.test(telefono)) { + callback(telefono); + } else { + console.log("Número no válido. Debe ser numérico y tener máximo 11 dígitos."); + solicitarTelefono(callback); + } + }); + } + + mostrarMenu(); +} + +// Ejecutamos los ejemplos y la agenda +console.log("Ejemplos de estructuras de datos en JavaScript:"); +ejemplosEstructurasDatos(); + +console.log("\nIniciando la agenda de contactos..."); +agendaContactos(); \ No newline at end of file From 5d86d1eaf0f45bed14666c6d1b4c975e02038408 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sat, 14 Sep 2024 11:46:12 +0200 Subject: [PATCH 222/539] #03 php --- .../php/eulogioep.php | 144 ++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/php/eulogioep.php diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/php/eulogioep.php b/Roadmap/03 - ESTRUCTURAS DE DATOS/php/eulogioep.php new file mode 100644 index 0000000000..5c498bf44f --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/php/eulogioep.php @@ -0,0 +1,144 @@ + 1, + 'Dos' => 2, + 'Tres' => 3 + ]; + echo "Array asociativo: "; + print_r($arrayAsociativo); + + // SplFixedArray: array de tamaño fijo + $splArray = new SplFixedArray(3); + $splArray[0] = 'Rojo'; + $splArray[1] = 'Verde'; + $splArray[2] = 'Azul'; + echo "SplFixedArray: " . implode(", ", $splArray) . "\n"; + + // Operaciones + unset($array[1]); // Borrado (elimina 'Python') + $array[] = 'JavaScript'; // Inserción + $array[1] = 'TypeScript'; // Actualización + sort($array); // Ordenación + + echo "Array después de operaciones: " . implode(", ", $array) . "\n"; +} + +// Función principal para la agenda de contactos +function agendaContactos() { + $agenda = []; + + while (true) { + echo "\n--- Agenda de Contactos ---\n"; + echo "1. Buscar contacto\n"; + echo "2. Añadir contacto\n"; + echo "3. Actualizar contacto\n"; + echo "4. Eliminar contacto\n"; + echo "5. Mostrar todos los contactos\n"; + echo "6. Salir\n"; + echo "Seleccione una opción: "; + + $opcion = trim(fgets(STDIN)); + + switch ($opcion) { + case '1': + buscarContacto($agenda); + break; + case '2': + anadirContacto($agenda); + break; + case '3': + actualizarContacto($agenda); + break; + case '4': + eliminarContacto($agenda); + break; + case '5': + mostrarContactos($agenda); + break; + case '6': + echo "¡Hasta luego!\n"; + return; + default: + echo "Opción no válida.\n"; + } + } +} + +function buscarContacto(&$agenda) { + echo "Ingrese el nombre del contacto: "; + $nombre = trim(fgets(STDIN)); + if (isset($agenda[$nombre])) { + echo "Teléfono de $nombre: {$agenda[$nombre]}\n"; + } else { + echo "Contacto no encontrado.\n"; + } +} + +function anadirContacto(&$agenda) { + echo "Ingrese el nombre del contacto: "; + $nombre = trim(fgets(STDIN)); + $telefono = solicitarTelefono(); + $agenda[$nombre] = $telefono; + echo "Contacto añadido con éxito.\n"; +} + +function actualizarContacto(&$agenda) { + echo "Ingrese el nombre del contacto a actualizar: "; + $nombre = trim(fgets(STDIN)); + if (isset($agenda[$nombre])) { + $telefono = solicitarTelefono(); + $agenda[$nombre] = $telefono; + echo "Contacto actualizado con éxito.\n"; + } else { + echo "Contacto no encontrado.\n"; + } +} + +function eliminarContacto(&$agenda) { + echo "Ingrese el nombre del contacto a eliminar: "; + $nombre = trim(fgets(STDIN)); + if (isset($agenda[$nombre])) { + unset($agenda[$nombre]); + echo "Contacto eliminado con éxito.\n"; + } else { + echo "Contacto no encontrado.\n"; + } +} + +function mostrarContactos($agenda) { + if (empty($agenda)) { + echo "La agenda está vacía.\n"; + } else { + foreach ($agenda as $nombre => $telefono) { + echo "$nombre: $telefono\n"; + } + } +} + +function solicitarTelefono() { + while (true) { + echo "Ingrese el número de teléfono (máximo 11 dígitos): "; + $telefono = trim(fgets(STDIN)); + if (preg_match('/^\d{1,11}$/', $telefono)) { + return $telefono; + } + echo "Número no válido. Debe ser numérico y tener máximo 11 dígitos.\n"; + } +} + +// Ejecutamos los ejemplos y la agenda +echo "Ejemplos de estructuras de datos en PHP:\n"; +ejemplosEstructurasDatos(); + +echo "\nIniciando la agenda de contactos...\n"; +agendaContactos(); + +?> \ No newline at end of file From e32239637938ddd69825049ea6796609fcc66de4 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sat, 14 Sep 2024 11:47:09 +0200 Subject: [PATCH 223/539] #03 typescript --- .../typescript/eulogioep.ts | 159 ++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/typescript/eulogioep.ts diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/typescript/eulogioep.ts b/Roadmap/03 - ESTRUCTURAS DE DATOS/typescript/eulogioep.ts new file mode 100644 index 0000000000..f37bde6dba --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/typescript/eulogioep.ts @@ -0,0 +1,159 @@ +import * as readline from 'readline'; + +// Creamos una interfaz de readline +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +// Definimos un tipo para los contactos +type Contact = { + name: string; + phone: string; +}; + +// Función para ejemplificar las estructuras de datos en TypeScript +function ejemplosEstructurasDatos(): void { + // Array: equivalente a ArrayList en Java + let array: string[] = ['Java', 'Python', 'TypeScript']; + console.log('Array:', array); + + // Set: conjunto sin duplicados + let set: Set = new Set([1, 2, 2, 3, 4]); + console.log('Set:', set); + + // Map: equivalente a HashMap en Java + let map: Map = new Map(); + map.set('Uno', 1); + map.set('Dos', 2); + map.set('Tres', 3); + console.log('Map:', map); + + // Operaciones + array.splice(1, 1); // Borrado (elimina 'Python') + array[1] = 'JavaScript'; // Actualización + array.sort(); // Ordenación + + console.log('Array después de operaciones:', array); +} + +// Función principal para la agenda de contactos +function agendaContactos(): void { + let agenda: Map = new Map(); + + function mostrarMenu(): void { + console.log("\n--- Agenda de Contactos ---"); + console.log("1. Buscar contacto"); + console.log("2. Añadir contacto"); + console.log("3. Actualizar contacto"); + console.log("4. Eliminar contacto"); + console.log("5. Mostrar todos los contactos"); + console.log("6. Salir"); + rl.question("Seleccione una opción: ", manejarOpcion); + } + + function manejarOpcion(opcion: string): void { + switch (opcion) { + case '1': + buscarContacto(); + break; + case '2': + anadirContacto(); + break; + case '3': + actualizarContacto(); + break; + case '4': + eliminarContacto(); + break; + case '5': + mostrarContactos(); + break; + case '6': + console.log("¡Hasta luego!"); + rl.close(); + return; + default: + console.log("Opción no válida."); + mostrarMenu(); + } + } + + function buscarContacto(): void { + rl.question("Ingrese el nombre del contacto: ", (nombre: string) => { + if (agenda.has(nombre)) { + console.log(`Teléfono de ${nombre}: ${agenda.get(nombre)}`); + } else { + console.log("Contacto no encontrado."); + } + mostrarMenu(); + }); + } + + function anadirContacto(): void { + rl.question("Ingrese el nombre del contacto: ", (nombre: string) => { + solicitarTelefono((telefono: string) => { + agenda.set(nombre, telefono); + console.log("Contacto añadido con éxito."); + mostrarMenu(); + }); + }); + } + + function actualizarContacto(): void { + rl.question("Ingrese el nombre del contacto a actualizar: ", (nombre: string) => { + if (agenda.has(nombre)) { + solicitarTelefono((telefono: string) => { + agenda.set(nombre, telefono); + console.log("Contacto actualizado con éxito."); + mostrarMenu(); + }); + } else { + console.log("Contacto no encontrado."); + mostrarMenu(); + } + }); + } + + function eliminarContacto(): void { + rl.question("Ingrese el nombre del contacto a eliminar: ", (nombre: string) => { + if (agenda.delete(nombre)) { + console.log("Contacto eliminado con éxito."); + } else { + console.log("Contacto no encontrado."); + } + mostrarMenu(); + }); + } + + function mostrarContactos(): void { + if (agenda.size === 0) { + console.log("La agenda está vacía."); + } else { + agenda.forEach((telefono: string, nombre: string) => { + console.log(`${nombre}: ${telefono}`); + }); + } + mostrarMenu(); + } + + function solicitarTelefono(callback: (telefono: string) => void): void { + rl.question("Ingrese el número de teléfono (máximo 11 dígitos): ", (telefono: string) => { + if (/^\d{1,11}$/.test(telefono)) { + callback(telefono); + } else { + console.log("Número no válido. Debe ser numérico y tener máximo 11 dígitos."); + solicitarTelefono(callback); + } + }); + } + + mostrarMenu(); +} + +// Ejecutamos los ejemplos y la agenda +console.log("Ejemplos de estructuras de datos en TypeScript:"); +ejemplosEstructurasDatos(); + +console.log("\nIniciando la agenda de contactos..."); +agendaContactos(); \ No newline at end of file From a3081b059ef8e1b9545dc9c9ca072c511c2189c5 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sat, 14 Sep 2024 11:48:20 +0200 Subject: [PATCH 224/539] #03 sql --- .../sql/eulogioep.sql | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/sql/eulogioep.sql diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/sql/eulogioep.sql b/Roadmap/03 - ESTRUCTURAS DE DATOS/sql/eulogioep.sql new file mode 100644 index 0000000000..cba177bd3c --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/sql/eulogioep.sql @@ -0,0 +1,49 @@ +-- Crear la tabla de contactos +CREATE TABLE contactos ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + nombre VARCHAR(100) NOT NULL, + telefono VARCHAR(11) NOT NULL, + CONSTRAINT telefono_valido CHECK (telefono REGEXP '^[0-9]{1,11}$') +); + +-- Insertar algunos contactos de ejemplo +INSERT INTO contactos (nombre, telefono) VALUES ('Juan Pérez', '12345678901'); +INSERT INTO contactos (nombre, telefono) VALUES ('María García', '98765432100'); + +-- Buscar un contacto +SELECT nombre, telefono FROM contactos WHERE nombre = 'Juan Pérez'; + +-- Añadir un nuevo contacto +INSERT INTO contactos (nombre, telefono) VALUES ('Ana López', '55566677788'); + +-- Actualizar un contacto +UPDATE contactos SET telefono = '11122233344' WHERE nombre = 'María García'; + +-- Eliminar un contacto +DELETE FROM contactos WHERE nombre = 'Ana López'; + +-- Mostrar todos los contactos +SELECT nombre, telefono FROM contactos ORDER BY nombre; + +-- Procedimiento almacenado para añadir un contacto (si el RDBMS lo soporta) +DELIMITER // +CREATE PROCEDURE añadir_contacto(IN p_nombre VARCHAR(100), IN p_telefono VARCHAR(11)) +BEGIN + IF p_telefono REGEXP '^[0-9]{1,11}$' THEN + INSERT INTO contactos (nombre, telefono) VALUES (p_nombre, p_telefono); + SELECT 'Contacto añadido con éxito' AS mensaje; + ELSE + SELECT 'Número de teléfono no válido' AS mensaje; + END IF; +END // +DELIMITER ; + +-- Llamada al procedimiento almacenado +CALL añadir_contacto('Carlos Rodríguez', '12345678901'); + +-- Vista para mostrar todos los contactos +CREATE VIEW vista_contactos AS +SELECT nombre, telefono FROM contactos ORDER BY nombre; + +-- Usar la vista +SELECT * FROM vista_contactos; \ No newline at end of file From 7ddc82bc1b30d2a5cf9b82e082f147263a611899 Mon Sep 17 00:00:00 2001 From: avcenal <134477562+avcenal@users.noreply.github.com> Date: Sat, 14 Sep 2024 11:50:23 +0200 Subject: [PATCH 225/539] #34 - Python Ejercicio #34 del Roadmap 2024 --- .../python/avcenal.py" | 367 ++++++++++++++++++ 1 file changed, 367 insertions(+) create mode 100644 "Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/avcenal.py" diff --git "a/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/avcenal.py" "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/avcenal.py" new file mode 100644 index 0000000000..8a1a9fcf31 --- /dev/null +++ "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/avcenal.py" @@ -0,0 +1,367 @@ +""" + * EJERCICIO: + * ¡La Casa del Dragón ha finalizado y no volverá hasta 2026! + * ¿Alguien se entera de todas las relaciones de parentesco + * entre personajes que aparecen en la saga? + * Desarrolla un árbol genealógico para relacionarlos (o invéntalo). + * Requisitos: + * 1. Estará formado por personas con las siguientes propiedades: + * - Identificador único (obligatorio) + * - Nombre (obligatorio) + * - Pareja (opcional) + * - Hijos (opcional) + * 2. Una persona sólo puede tener una pareja (para simplificarlo). + * 3. Las relaciones deben validarse dentro de lo posible. + * Ejemplo: Un hijo no puede tener tres padres. + * Acciones: + * 1. Crea un programa que permita crear y modificar el árbol. + * - Añadir y eliminar personas + * - Modificar pareja e hijo + * 2. Podrás imprimir el árbol (de la manera que consideres). + * + * NOTA: Ten en cuenta que la complejidad puede ser alta si + * se implementan todas las posibles relaciones. Intenta marcar + * tus propias reglas y límites para que te resulte asumible. +""" +#Para poder llevar a cabo este programa se han construido dos estructuras +#Lista de Personajes: personajes que se "dan de alta" para después linkarlos a alguna parte del árbol +#Árbol Genealógico: los personajes que una vez dados de alta, pasan a estar en el árbol, siempre con algún tipo de relación. +#Nota: el único personaje que se puede crear sin relación es el personaje origen o root + +from abc import ABC, abstractmethod + +class AbstractIdFinder(ABC): + @abstractmethod + def find_id(self): + pass + +class AbstractCharacterFinder(ABC): + @abstractmethod + def find_character(self): + pass + +class AbstractCharacter(ABC): + @abstractmethod + def __init__(self): + pass + +class AbstractMarriage(ABC): + @abstractmethod + def marriage(self): + pass + +class AsbtractSetChildren(ABC): + @abstractmethod + def set_children(self): + pass + +class AsbtractSetParents(ABC): + @abstractmethod + def set_parents(self): + pass + +class AbstractCharacterPrinter(ABC): + @abstractmethod + def print_character(self): + pass + +class AbstractFullTreePrinter(ABC): + @abstractmethod + def print_tree(self): + pass + +class IdFinder(AbstractIdFinder): + def find_id(self,character:AbstractCharacter,id:int): #método para comprobar si un id está o no en el árbol familiar. Devuelve un boolean + if character.id == id: + return True + elif character.couple != None: + if character.couple.id == id: + return True + elif character.children != None : + for child in character.children: + if self.find_id(child,id): + return True + return False + +class CharacterFinder(AbstractCharacterFinder): + def __check_fathers(self,character:AbstractCharacter,id:int): + if character.father.id == id: #si es el padre + return character.father + elif character.mother.id == id: #si es la madre + return character.mother + else: + return None + + def find_character(self,root:AbstractCharacter,id:int): + stack = [root] + ids = set() + while stack: + current_character = stack.pop() + ids.add(current_character.id) + if current_character.id == id: + return current_character + + if current_character.couple and current_character.couple.id not in ids: + ids.add(current_character.couple.id) + stack.append(current_character.couple) + + if current_character.children: + for child in current_character.children: + if child.id not in ids: + ids.add(child.id) + stack.append(child) + + if current_character.father and current_character.father.id not in ids: + stack.append(current_character.father) + + if current_character.mother and current_character.mother.id not in ids: + stack.append(current_character.mother) + return None + +class Character(AbstractCharacter): + def __init__(self,id:int,name:str,sex:str): + self.id:int = id + self.name:str = name + self.sex:str = sex + self.father:AbstractCharacter | None = None + self.mother:AbstractCharacter | None = None + self.couple:AbstractCharacter | None = None + self.children: list[AbstractCharacter] | None = None + +class Marriage(AbstractMarriage): + def marriage(self,character_1:AbstractCharacter,character_2:AbstractCharacter): #creación del matrimonio de dos personajes + if (character_1.couple == None and character_2.couple == None) and ((character_1.sex == "hombre" and character_2.sex == "mujer")or (character_2.sex == "hombre" and character_1.sex == "mujer")): + character_1.couple = character_2 #en Westeros solo se pueden casar hombre y mujer, se controla en este punto junto con que ninguno de los dos esté casado ya + character_2.couple = character_1 + print(f"{character_1.name} y {character_2.name} se han casado y son pareja") + else: + if character_1.couple != None: #si el character_1 está casado, no se le permite desposarse de nuevo + print(f"No es posible este matrimonio, {character_1.name} ya tiene pareja\n") + elif character_2.couple != None: #lo mismo con el character_2 + print(f"No es posible este matrimonio, {character_2.name} ya tiene pareja\n") + else: #en caso de que los dos sean hombres o mujeres, no se les permite casarse + print("El matrimonio no es posible según las leyes de Westeros, solamente se podrán casar hombre y mujer") + + +class SetChildren(AsbtractSetChildren): + def set_children(self,character_1:AbstractCharacter,character_2:AbstractCharacter,child:AbstractCharacter): + if character_1.couple == character_2 and character_2.couple == character_1: #se comprueba que los dos personajes son pareja + if character_1.children == None: #si no tienen hijos aún, se crea la lista con el primer hijo + character_1.children = [child] + else: + character_1.children.append(child) #si tienen hijos, se añade a la lista el nuevo hijo/a + child.father = character_1 #se marca como padre al character_1 + character_2.children = character_1.children #los hijos del character_1 son los mismos para character_2 por ser matrimonio + child.mother = character_2 #se marca como madre a character_2 + else: + print(f"{character_1.name} y {character_2.name} no pueden tener hijos porque no son pareja") #en caso de que no sean pareja, entonces no pueden tener hijos + +class SetParents(AsbtractSetParents): + def set_parents(self,character:AbstractCharacter,father:AbstractCharacter,mother:AbstractCharacter): #con este método se pueden definir padres y madres para un personaje recien creado + if character.father == None and character.mother == None: #IGUALMENTE SE PODRÍA CONTROLAR POR EL SEXO DEL PADRE Y LA MADRE, TESTEAR + if (father.couple == None or father.couple == mother) and (mother.couple == None or mother.couple == father): + father.couple = mother + mother.couple = father + character.father = father + character.mother = mother + if father.children: + father.children.append(character) + else: + father.children = [character] + if mother.children: + mother.children.append(character) + else: + mother.children = [character] + else: + if father.couple != None and father.couple != father: + print(f"{father.name} no puede ser el padre de {character.name} porque {father.name} ya tiene una pareja que no es {mother.name}, es {father.couple.name}\n") + elif mother.couple != None and mother.couple != mother: + print(f"{mother.name} no puede ser la madre de {character.name} porque {mother.name} ya tiene una pareja que no es {father.name}, es {mother.couple.name}\n") + else: + if character.father != None: + print(f"{father.name} no puede ser el padre de {character.name} porque ya tiene un padre que es {character.father}\n") + elif character.mother != None: + print(f"{mother.name} no puede ser la madre de {character.name} porque ya tiene un padre que es {character.mother}\n") + +class CharacterPrinter(AbstractCharacterPrinter): + def print_character(self,character:AbstractCharacter): + if character: + print(f"Id: {character.id}\nNombre: {character.name}\nSexo: {character.sex}") + if character.couple: + print(f"Su pareja es {character.couple.name}") + if character.children: + print(f"Tiene {len(character.children)} hijo(s):") + for child in character.children: + print(f"- {child.name}") + if character.father and character.mother: + print("Y sus padres son:") + print(f"- {character.father.name}") + print(f"- {character.mother.name}") + print("\n") + else: + print(f"Ese personaje no está en el árbol") + + def print_character_by_id(self,id:int,origin_character:AbstractCharacter,character_finder:AbstractCharacterFinder): + character = character_finder.find_character(origin_character,id) + self.print_character(character) + +class FullTreePrinter(AbstractFullTreePrinter): + def __is_printed(self,id:int,characters_printed:set[int]): + if id in characters_printed: + return True + else: + return False + + def print_tree(self,root:AbstractCharacter,character_printer:AbstractCharacterPrinter): + stack = [root] + characters_printed = set() + + while stack: + current_character = stack.pop() + #print(current_character.id) + if not self.__is_printed (current_character.id,characters_printed): + character_printer.print_character(current_character) + characters_printed.add(current_character.id) + + if current_character.couple and not self.__is_printed(current_character.couple.id,characters_printed): + stack.append(current_character.couple) + + if current_character.children: + for child in current_character.children: + if not self.__is_printed(child.id,characters_printed): + stack.append(child) + + if current_character.father and not self.__is_printed(current_character.father.id,characters_printed): + stack.append(current_character.father) + + if current_character.mother and not self.__is_printed(current_character.mother.id,characters_printed): + stack.append(current_character.mother) + + stack = sorted(stack,key=lambda x : x.id,reverse=True) + +#Los dos métodos de a continuación podrían ir en una clase para tratar de respetar aún más los principios SOLID +#Sin ella, el programa no los cumple al 100% + +def __find_id_in_list_of_characters(id:int, list:list): #nueva clase que incluya este y la siguiente función??? + for character in list: + if character.id == id: + return True + return False + +def __find_character_in_list(id:int,list:list): + for character in list: + if character.id == id: + return character + +print("Te doy la bienvenida a la aplicación de creación del Árbol Genealógico de los Targaryen") +id_finder = IdFinder() +root = None +list_of_characters = [] +character_finder = CharacterFinder() +character_printer = CharacterPrinter() +tree_printer = FullTreePrinter() +while True: + option = input("\n¿Qué deseas hacer?:\n- Crear un personaje(C)\n- Casar a un personaje(M)\n- Definir los padres de un personaje(P)\n- Definir los hijos de un personaje(S)\n- Imprimir el árbol completo(F)\n- Salir(O)\nIntroduce tu opción ----> ").upper() + if option == "C": + if not root: + print("Como el árbol genealógico está vacío, vamos a crear el primer personaje que tendrá el id 1") + name = input("Dime su nombre: ") + while True: + sex_option = input ("Dime si es hombre (H) o mujer (M): ").upper() + if sex_option == "H": + sex = "hombre" + break + elif sex_option == "M": + sex = "mujer" + break + else: + print("Parece que has introducido una opción errónea...") + root = Character(1,name,sex) + list_of_characters.append(root) + else: + try: + id = int(input("Dime su id: ")) + except ValueError: + print("Introduce un número por favor") + else: + if not id_finder.find_id(root,id) and not __find_id_in_list_of_characters(id,list_of_characters): #busca el id en el ábrol y en la lista + name = input("Dime su nombre: ") + while True: + sex_option = input ("Dime si es hombre (H) o mujer (M): ").upper() + if sex_option == "H": + sex = "hombre" + break + elif sex_option == "M": + sex = "mujer" + break + else: + print("Parece que has introducido una opción errónea...") + new_character = Character(id,name,sex) + list_of_characters.append(new_character) + else: + print("Ups... ese ID existe, empecemos de nuevo...") + + elif option == "M": + if len(list_of_characters) == 1: + print("No es posible celebrar ningún matrimonio porque solo has dado de alta 1 personaje") + if len(list_of_characters) == 2: + print(f"Como solo hay dos personajes dados de alta, se celebrará el matrimonio entre {root.name} y {list_of_characters[1].name}") + Marriage().marriage(root,list_of_characters[1]) + else: + id_1 = int(input("Dime el id del primer personaje (perteneciente al árbol) que quieres casar: ")) #ha de pertenecer al árbol porque en caso contrario crearíamos un árbol diferente. + print(f"Has elegido a {character_finder.find_character(root,id_1).name}") + if id_finder.find_id(root,id_1): #Se podría llegar a enlazar pero el nivel de complejidad sería muy alto para este ejercicio + id_2 = int(input("Ahora dime el id del segundo personaje (perteneciente al árbol o solo dado de alta) que quieres casar: ")) + if id_finder.find_id(root,id_2): + print(f"Has elegido a {character_finder.find_character(root,id_2).name}") + Marriage().marriage(character_finder.find_character(root,id_1),character_finder.find_character(root,id_2)) + elif __find_id_in_list_of_characters(id_2,list_of_characters): + print(f"Has elegido a {__find_character_in_list(id_2,list_of_characters).name}") + Marriage().marriage(character_finder.find_character(root,id_1),__find_character_in_list(id_2,list_of_characters)) + else: + print(f"No existe ningún personaje con el id {id_2}") + else: + print(f"No existe ningún personaje con el id {id_1}") + + elif option == "P": + character_id = int(input("Dime el id del personaje del árbol que quieres declarar sus padres: ")) + if id_finder.find_id(root,character_id): + print(f"Has elegido a {character_finder.find_character(root,character_id)}") + father_id = int(input("Dime el id de su padre (El personaje debe estar dado de alta): ")) + if __find_id_in_list_of_characters(father_id,list_of_characters): + print(f"Has elegido como padre a {__find_character_in_list(father_id,list_of_characters)}") + mother_id = int(input("Ahora dime el id de la madre (Igualmente el personaje debe estár dado de alta): ")) + if __find_id_in_list_of_characters(mother_id,list_of_characters): + print(f"Has elegido como madre a {__find_character_in_list(mother_id,list_of_characters)}") + SetParents().set_parents(character_finder.find_character(root,character_id),__find_character_in_list(father_id,list_of_characters),__find_character_in_list(mother_id,list_of_characters)) + else: + print(f"No existe ningún personaje en el árbol con el id {mother_id}") + else: + print(f"No existe ningún personaje en el árbol con el id {father_id}") + else: + print(f"No existe ningún personaje en el árbol con el id {character_id}") + elif option == "S": + father_id = int(input("Dime el id del padre (solamente serán válidos los ids de personajes registrados en el árbol): ")) + if id_finder.find_id(root,father_id): + print(f"Has elegido como padre a {character_finder.find_character(root,father_id)}") + mother_id = int(input("Ahora el id de la madre: ")) + if id_finder.find_id(root,mother_id): + print(f"Has elegido como madre a {character_finder.find_character(root,mother_id)}") + son_id = int(input("Y para finalizar el del hijo (en este caso solo hace falta que esté dado de alta o creado): ")) + if __find_id_in_list_of_characters(son_id,list_of_characters): + print(f"Has elegido como hijo a {__find_character_in_list(son_id,list_of_characters)}") + SetChildren().set_children(character_finder.find_character(root,father_id),character_finder.find_character(root,mother_id),__find_character_in_list(son_id,list_of_characters)) + else: + print("El hijo/a no está creado o dado de alta") + else: + print("No hay ningún personaje con ese id en el árbol, por tanto, no se puede declarar como madre") + else: + print("No hay ningún personaje con ese id en el árbol, por tanto, no se puede declarar como padre") + elif option == "F": + print(" --- ÁBROL GENEALOGICO ---") + tree_printer.print_tree(root,character_printer) + elif option == "O": + print("Gracias por usar el sistema del Árbol Genealógico de los Targaryen. Hasta pronto.") + break + else: + print("Tu opción no es válida...\n") From 08dd85c742b23b112a44c1d9b0a49b1727e2f017 Mon Sep 17 00:00:00 2001 From: avcenal <134477562+avcenal@users.noreply.github.com> Date: Sat, 14 Sep 2024 11:53:36 +0200 Subject: [PATCH 226/539] #35 - Python Ejercicio #35 del Roadmap 2024 --- .../python/avcenal.py | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/avcenal.py diff --git a/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/avcenal.py b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/avcenal.py new file mode 100644 index 0000000000..87a2bfeb0d --- /dev/null +++ b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/avcenal.py @@ -0,0 +1,58 @@ +""" * EJERCICIO: + * ¡La temporada 2 de "Los Anillos de Poder" está a punto de estrenarse! + * ¿Qué pasaría si tuvieras que encargarte de repartir los anillos + * entre las razas de la Tierra Media? + * Desarrolla un programa que se encargue de distribuirlos. + * Requisitos: + * 1. Los Elfos recibirán un número impar. + * 2. Los Enanos un número primo. + * 3. Los Hombres un número par. + * 4. Sauron siempre uno. + * Acciones: + * 1. Crea un programa que reciba el número total de anillos + * y busque una posible combinación para repartirlos. + * 2. Muestra el reparto final o el error al realizarlo. +""" + +from random import randint + +def is_prime(number:int): + if number ==1: #en el caso de este programa, el número nunca podrá ser 0. En otro caso habría que evaluar number < 2 + return False + else: + for index in range(2,int(number**0.5)+1): #se evalúan valores desde 2 hasta la raíz cuadrada del número + if number % index == 0: # y si la división entre el número y alguno de esos valorers tien resto 0 + return False #entonces no es un número primo. + return True + +def is_odd(number:int): + return number % 2 != 0 + +def is_even(number:int): + return number %2 == 0 + +THE_ONE_RING = 1 +print("Te doy la bienvenida al programa de reparto de LOS ANILLOS DE PODER") +rings = int(input("Dime el número de Anillos de Poder a Repartir: ")) +#rings = 9 +if rings <= 5: + print("No hay suficientes anillos para repartir") +else: + sauron = THE_ONE_RING + while True: + rings_aux = rings-sauron + men = randint(1,rings_aux) + if is_even(men): + rings_aux -= men + if rings_aux >= 3: + dwarven = randint(1,rings_aux) + if is_prime(dwarven): + rings_aux -= dwarven + + if rings_aux > 0: + elven = rings_aux + if is_odd(elven): + if sauron+men+dwarven+elven == rings: + print("LOS ANILLOS SE HAN REPARTIDO CORRECTAMENTE") + print(f"TOTAL DE ANILLOS: {rings}\n- SAURON: {sauron}\n- HOMBRES: {men}\n- ENANOS: {dwarven}\n- ELFOS: {elven}") + break From 8140ee077b8ac6a0f477f122043badc1bd3c36b1 Mon Sep 17 00:00:00 2001 From: Parababire Date: Sat, 14 Sep 2024 07:52:49 -0400 Subject: [PATCH 227/539] #27 - Javascript --- .../27 - SOLID OCP/javascript/parababire.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Roadmap/27 - SOLID OCP/javascript/parababire.js b/Roadmap/27 - SOLID OCP/javascript/parababire.js index a354975e03..73bbc2ca00 100644 --- a/Roadmap/27 - SOLID OCP/javascript/parababire.js +++ b/Roadmap/27 - SOLID OCP/javascript/parababire.js @@ -52,6 +52,8 @@ console.log(`Hola mi nombre es ${engineer.name} soy ${engineer.getOccupation()}` // Extra +/* Clase abstracta. No puede ser instanciada directamente pero es capaz de ser heredada por la descendencia */ + class Operation { constructor() { if (new.target === Operation) { @@ -107,10 +109,22 @@ class Divide extends Operation{ } } +class Power extends Operation{ + constructor(a, b) { + super() + this.a = a + this.b = b + } + execute() { + return this.a ** this.b + } +} + class Calculator { constructor() { this.operations = {} } + addOperation(name, operation) { this.operations[name] = operation } @@ -127,7 +141,11 @@ const calculadora = new Calculator() calculadora.addOperation('addition', new Addition(10, 2)) calculadora.addOperation('subtraction', new Subtract(5, 2)) calculadora.addOperation('multiplication', new Multiply(9, 2)) +calculadora.addOperation('division', new Divide(9, 2)) +calculadora.addOperation('power', new Power(5, 4)) console.log(calculadora.calculate('subtraction')) console.log(calculadora.calculate('addition')) console.log(calculadora.calculate('multiplication')) +console.log(calculadora.calculate('division')) +console.log(calculadora.calculate('power')) \ No newline at end of file From 8970e9d0aaaac953f7ac86ab9b9ccfabc1dc1ee7 Mon Sep 17 00:00:00 2001 From: breativo Date: Sat, 14 Sep 2024 14:16:02 +0200 Subject: [PATCH 228/539] #37-python --- .../python/bellodeveloper.py | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/bellodeveloper.py diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/bellodeveloper.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/bellodeveloper.py new file mode 100644 index 0000000000..d754aa93b8 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/bellodeveloper.py @@ -0,0 +1,104 @@ +# Enunciado +# /* +# * EJERCICIO: +# * ¡Dos de las bandas más grandes de la historia están de vuelta! +# * Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? +# * Desarrolla un programa que se conecte al API de Spotify y los compare. +# * Requisitos: +# * 1. Crea una cuenta de desarrollo en https://developer.spotify.com. +# * 2. Conéctate al API utilizando tu lenguaje de programación. +# * 3. Recupera datos de los endpoint que tú quieras. +# * Acciones: +# * 1. Accede a las estadísticas de las dos bandas. +# * Por ejemplo: número total de seguidores, escuchas mensuales, +# * canción con más reproducciones... +# * 2. Compara los resultados de, por lo menos, 3 endpoint. +# * 3. Muestra todos los resultados por consola para notificar al usuario. +# * 4. Desarrolla un criterio para seleccionar qué banda es más popular. +# */ + +# Import +import requests +import base64 +from dotenv import load_dotenv +import os + +# Variables de entorno (fichero oculto) +load_dotenv() +client_id = os.getenv('SPOTIFY_CLIENT_ID') +client_secret = os.getenv('SPOTIFY_CLIENT_SECRET') + +# URLs del API (Spotify) +auth_url = 'https://accounts.spotify.com/api/token' +base_url = 'https://api.spotify.com/v1/' + +# Artistas que se van a comparar (Oasis y Linkin Park) +artists = { + "Oasis": "2DaxqgrOhkeH0fpeiQq2f4", + "Linkin Park": "6XyY86QOPPrYVGvF9ch6wz" +} + +# Función para obtener el token de autenticación +def get_token(client_id, client_secret): + auth_str = f"{client_id}:{client_secret}" + b64_auth_str = base64.b64encode(auth_str.encode()).decode() + + headers = { + 'Authorization': f'Basic {b64_auth_str}', + } + data = { + 'grant_type': 'client_credentials' + } + + response = requests.post(auth_url, headers=headers, data=data) + if response.status_code != 200: + raise Exception("Error en la autenticación. Verifica tus credenciales.") + + response_data = response.json() + return response_data['access_token'] + +# Función para obtener datos del artista (Oasis y Linkin Park) +def get_artist_data(artist_id, token): + headers = { + 'Authorization': f'Bearer {token}', + } + try: + artist_url = f'{base_url}artists/{artist_id}' + artist_data = requests.get(artist_url, headers=headers).json() + + top_tracks_url = f'{base_url}artists/{artist_id}/top-tracks?market=US' + top_tracks_data = requests.get(top_tracks_url, headers=headers).json() + + return artist_data, top_tracks_data + except requests.exceptions.RequestException as e: + print(f"Error al obtener datos del artista: {e}") + return None, None + +# Función para comparar estadísticas entre los artistas (Oasis y Linkin Park) +def compare_artists(artists_data): + for artist, data in artists_data.items(): + artist_info, top_tracks = data + if artist_info and top_tracks: + print(f"Artista: {artist}") + print(f"Seguidores: {artist_info['followers']['total']}") + print(f"Popularidad: {artist_info['popularity']}") + print(f"Canción más popular: {top_tracks['tracks'][0]['name']} - {top_tracks['tracks'][0]['popularity']} popularidad\n") + else: + print(f"No se pudo obtener datos para {artist}") + +# Función principal +def main(): + # Obtener el token de acceso + token = get_token(client_id, client_secret) + + # Obtener datos de ambos artistas + artists_data = {} + for artist_name, artist_id in artists.items(): + artist_info, top_tracks = get_artist_data(artist_id, token) + artists_data[artist_name] = (artist_info, top_tracks) + + # Comparar los resultados + compare_artists(artists_data) + +if __name__ == "__main__": + main() \ No newline at end of file From 7a565a9b659b11474c5f1feb88044e10fc836bec Mon Sep 17 00:00:00 2001 From: mario Date: Sat, 14 Sep 2024 16:26:24 +0200 Subject: [PATCH 229/539] #37 python --- Roadmap/37 - OASIS VS LINKIN PARK/python/bellodeveloper.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/bellodeveloper.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/bellodeveloper.py index d754aa93b8..6b420ba5cf 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/python/bellodeveloper.py +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/bellodeveloper.py @@ -1,5 +1,5 @@ -# Enunciado -# /* +# */ +# * Enunciado # * EJERCICIO: # * ¡Dos de las bandas más grandes de la historia están de vuelta! # * Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? From 20e90588af7e9e140c03825ddf7daaffed0707ab Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Sat, 14 Sep 2024 10:55:25 -0400 Subject: [PATCH 230/539] 37 - JavaScript --- .../javascript/RicJDev.js | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js index 5c779c74c6..94bb7d1b6b 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js @@ -1,9 +1,11 @@ /** - * Genera un token de acceso, necesario para hacer peticiones a la API de Spotify. + * Genera un token de acceso, necesario para hacer peticiones a la API de Spotify. * - * @param {string} clientId Visite https://developer.spotify.com/dashboard para obtenerlo. - * @param {string} clientSecret Visite https://developer.spotify.com/dashboard para obtenerlo. + * @param {string} clientId + * @param {string} clientSecret * @returns {Promise} + * + * @see https://developer.spotify.com/dashboard */ async function getToken(clientId, clientSecret) { @@ -17,9 +19,7 @@ async function getToken(clientId, clientSecret) { client_id: clientId, client_secret: clientSecret, }), - }) - .then((response) => response.json()) - .catch((err) => console.log(err)) + }).then((response) => response.json()) return token } @@ -40,8 +40,8 @@ const token = await getToken(myClientId, myClientSecret) /** * Retorna la información sobre un artista utilizando la API de Spotify. * - * @param {string} artistId se obtiene de la página del artista en Spotify `https://open.spotify.com/intl-es/artist/{artistId}`. - * @param {object} token token de acceso. Use getToken() para obetenerlo. + * @param {string} artistId se obtiene de la página del artista en Spotify (https://open.spotify.com/intl-es/artist/ `artistId`). + * @param {object} token token de acceso. Use `getToken()` para obetenerlo. * @returns {Promise} */ @@ -51,22 +51,23 @@ async function getArtistData(artistId, token) { headers: { Authorization: `${token.token_type} ${token.access_token}`, }, - }) - .then((response) => response.json()) - .catch((err) => console.log(err)) + }).then((response) => response.json()) return artistData } // Almacenamos las id's de Oasis y Linkin Park. -const OasisId = '4YwysTnPMvi1Q72Zopy8VA' +const OasisId = '2DaxqgrOhkeH0fpeiQq2f4' const LinkinParkId = '6XyY86QOPPrYVGvF9ch6wz' const OasisData = await getArtistData(OasisId, token) const LinkinParkData = await getArtistData(LinkinParkId, token) +console.log('\nDatos de Oasis') console.log(OasisData) + +console.log('\nDatos de Linkin Park') console.log(LinkinParkData) /* @@ -80,4 +81,4 @@ Acciones: 3. Muestra todos los resultados por consola para notificar al usuario. 4. Desarrolla un criterio para seleccionar qué banda es más popular. -*/ \ No newline at end of file +*/ From 9f46402c897e1bd0eaebba2b6eb93e41a8509e5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Sat, 14 Sep 2024 17:28:36 +0200 Subject: [PATCH 231/539] reto 37 d1d4cum --- .../python/d1d4cum.py | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/d1d4cum.py diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/d1d4cum.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/d1d4cum.py new file mode 100644 index 0000000000..1e795e1839 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/d1d4cum.py @@ -0,0 +1,56 @@ +import requests +from requests.adapters import Response + + +ACCESS_TOKEN = 'BQDskkWetddthiddwtbTTkJS_H5lg-LgNAxs82vlR1rP9tQVusdakSVPLY_DjisoPASLrXZrYhPc0eNR3GSTsU2-2XCXxmCPk03MvpFJQ1atgp9n3GY' +OASIS_ID = '2DaxqgrOhkeH0fpeiQq2f4' +LININ_PARK_ID = '6XyY86QOPPrYVGvF9ch6wz' +URL = 'https://api.spotify.com/v1/artists/' +HEADERS = { + 'Authorization': f"Bearer {ACCESS_TOKEN}" +} + + +def get_data(artist_id): + + response = requests.get(f"{URL}{artist_id}", headers=HEADERS) + + if response.status_code == 200: + data = response.json() + + return data + + else: + print(f"Error: {response.status_code}") + +def main(): + oasis_data = get_data(OASIS_ID) + linkin_park_data = get_data(LININ_PARK_ID) + + oasis_followers = oasis_data["followers"]["total"] + linkin_park_followers = linkin_park_data["followers"]["total"] + + oasis_popularity = oasis_data["popularity"] + linkin_park_popularity = linkin_park_data["popularity"] + + print("> Oasis") + print(f"- Followers: {oasis_followers}") + print(f"- Popularity: {oasis_popularity}") + print("\n> Linkin Park") + print(f"- Followers: {linkin_park_followers}") + print(f"- Popularity: {linkin_park_popularity}") + + if oasis_popularity > linkin_park_popularity: + print("\nOasis es más popular") + elif oasis_popularity < linkin_park_popularity: + print("\nLinkin Park es más popular") + else: + if oasis_followers > linkin_park_followers: + print("\nOasis es más popular") + elif oasis_followers < linkin_park_followers: + print("\nLinkin Park es más popular") + else: + print("\nSon igual de populares") + +if __name__ == '__main__': + main() From 3fe04de5933d36ad032b2defadc353a52e5207e4 Mon Sep 17 00:00:00 2001 From: password1989 <103333457+password1989@users.noreply.github.com> Date: Sat, 14 Sep 2024 18:02:18 +0200 Subject: [PATCH 232/539] #03 - Java --- .../java/Password1989.java | 296 ++++++++++++++++++ 1 file changed, 296 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/java/Password1989.java diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/java/Password1989.java b/Roadmap/03 - ESTRUCTURAS DE DATOS/java/Password1989.java new file mode 100644 index 0000000000..fe3b611aa7 --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/java/Password1989.java @@ -0,0 +1,296 @@ +package org.roadmap.java.ejercicio.tres; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Scanner; +import java.util.Stack; + +public class Password1989 { + + // Mapa para almacenar los contactos (nombre como clave y teléfono como valor) + private static final HashMap contacts = new HashMap<>(); + private static final Scanner scanner = new Scanner(System.in); + + // Constante para la opción de salir + private static final int OPTION_EXIT = 6; + + // Bucle principal de la agenda + public static void runAgenda() { + boolean exit = false; + while (!exit) { + showMenu(); + int option = readOption(); + exit = processOption(option); + } + } + + // Mostrar menú + private static void showMenu() { + System.out.println("\n--- Agenda de Contactos ---"); + System.out.println("1. Insertar contacto"); + System.out.println("2. Buscar contacto"); + System.out.println("3. Actualizar contacto"); + System.out.println("4. Eliminar contacto"); + System.out.println("5. Mostrar todos los contactos"); + System.out.println("6. Salir"); + System.out.print("Elige una opción: "); + } + + // Leer opción del usuario + private static int readOption() { + int option = scanner.nextInt(); + scanner.nextLine(); // Limpieza del buffer + return option; + } + + // Procesar la opción elegida + private static boolean processOption(int option) { + switch (option) { + case 1: + insertContact(); + break; + case 2: + searchContact(); + break; + case 3: + updateContact(); + break; + case 4: + deleteContact(); + break; + case 5: + showAllContacts(); + break; + case OPTION_EXIT: + System.out.println("Adiós!"); + return true; + default: + System.out.println("Opción no válida."); + } + return false; + } + + // Insertar un contacto + private static void insertContact() { + String name = inputNonEmptyString("Introduce nombre: "); + String phone = inputValidPhoneNumber(); + + if (contacts.containsKey(name)) { + System.out.println("El contacto ya existe."); + } else { + contacts.put(name, phone); + System.out.println("Contacto añadido."); + } + } + + // Buscar un contacto (verificar si el mapa está vacío) + private static void searchContact() { + if (contacts.isEmpty()) { + System.out.println("La agenda está vacía. No hay contactos para buscar."); + return; + } + + String name = inputNonEmptyString("Introduce nombre a buscar: "); + + if (contacts.containsKey(name)) { + System.out.println("Nombre: " + name + ", Teléfono: " + contacts.get(name)); + } else { + System.out.println("Contacto no encontrado."); + } + } + + // Actualizar un contacto (verificar si el mapa está vacío) + private static void updateContact() { + if (contacts.isEmpty()) { + System.out.println("La agenda está vacía. No hay contactos para actualizar."); + return; + } + + String name = inputNonEmptyString("Introduce nombre del contacto a actualizar: "); + + if (contacts.containsKey(name)) { + String newPhone = inputValidPhoneNumber(); + contacts.put(name, newPhone); + System.out.println("Contacto actualizado."); + } else { + System.out.println("Contacto no encontrado."); + } + } + + // Eliminar un contacto (verificar si el mapa está vacío) + private static void deleteContact() { + if (contacts.isEmpty()) { + System.out.println("La agenda está vacía. No hay contactos para eliminar."); + return; + } + + String name = inputNonEmptyString("Introduce nombre del contacto a eliminar: "); + + if (contacts.remove(name) != null) { + System.out.println("Contacto eliminado."); + } else { + System.out.println("Contacto no encontrado."); + } + } + + // Mostrar todos los contactos + private static void showAllContacts() { + if (contacts.isEmpty()) { + System.out.println("No hay contactos en la agenda."); + } else { + System.out.println("--- Lista de Contactos ---"); + contacts.forEach((name, phone) -> + System.out.println("Nombre: " + name + ", Teléfono: " + phone)); + } + } + + // Leer una cadena no vacía del usuario + private static String inputNonEmptyString(String prompt) { + String input; + do { + System.out.print(prompt); + input = scanner.nextLine().trim(); + if (input.isEmpty()) { + System.out.println("El valor no puede estar vacío. Inténtalo de nuevo."); + } + } while (input.isEmpty()); + return input; + } + + // Validar y leer un número de teléfono válido (solo dígitos, hasta 11 caracteres) + private static String inputValidPhoneNumber() { + String phone; + do { + System.out.print("Introduce un número de teléfono (solo dígitos, máximo 11): "); + phone = scanner.nextLine().trim(); + if (!phone.matches("\\d{1,11}")) { + System.out.println("Número de teléfono no válido. Debe contener solo dígitos y hasta 11 caracteres."); + } + } while (!phone.matches("\\d{1,11}")); + return phone; + } + + public static void main(String[] args) { + + /* + * EJERCICIO: + * - Muestra ejemplos de creación de todas las estructuras soportadas por defecto en tu lenguaje. + * - Utiliza operaciones de inserción, borrado, actualización y ordenación. + * + * DIFICULTAD EXTRA (opcional): + * Crea una agenda de contactos por terminal. + * - Debes implementar funcionalidades de búsqueda, inserción, actualización y eliminación de contactos. + * - Cada contacto debe tener un nombre y un número de teléfono. + * - El programa solicita en primer lugar cuál es la operación que se quiere realizar, y a continuación + * los datos necesarios para llevarla a cabo. + * - El programa no puede dejar introducir números de teléfono no númericos y con más de 11 dígitos. + * (o el número de dígitos que quieras) + * - También se debe proponer una operación de finalización del programa. + + + // Creación de una lista + ArrayList list = new ArrayList<>(); + + // Inserción + list.add(5); + list.add(2); + list.add(8); + System.out.println("Lista después de inserción: " + list); + + // Borrado + list.remove(Integer.valueOf(2)); // Eliminar el valor 2 + System.out.println("Lista después de borrado: " + list); + + // Actualización + list.set(1, 2); // Cambiar el elemento en el índice 1 por 10 + System.out.println("Lista después de actualización: " + list); + + // Ordenación + Collections.sort(list); + System.out.println("Lista ordenada: " + list); + + // Creación de un conjunto + HashSet set = new HashSet<>(); + + // Inserción + set.add("Rojo"); + set.add("Azul"); + set.add("Verde"); + System.out.println("Conjunto después de inserción: " + set); + + // Borrado + set.remove("Azul"); + System.out.println("Conjunto después de borrado: " + set); + + // Actualización (no hay actualización directa, se debe eliminar y volver a insertar) + set.remove("Rojo"); + set.add("Amarillo"); + System.out.println("Conjunto después de actualización: " + set); + + // Ordenación (no aplicable a HashSet, pero se puede convertir en una lista) + System.out.println("Conjunto (no ordenado por defecto): " + set); + + // Creación de una lista enlazada + LinkedList queue = new LinkedList<>(); + + // Inserción (en cola) + queue.add(3); + queue.add(1); + queue.add(4); + System.out.println("Cola después de inserción: " + queue); + + // Borrado (de la cabeza) + queue.remove(); + System.out.println("Cola después de borrado: " + queue); + + // Actualización + queue.set(0, 7); // Cambia el primer elemento a 7 + System.out.println("Cola después de actualización: " + queue); + + // Ordenación + Collections.sort(queue); + System.out.println("Cola ordenada: " + queue); + + // Creación de una pila + Stack stack = new Stack<>(); + + // Inserción (empujar en la pila) + stack.push("Uno"); + stack.push("Dos"); + stack.push("Tres"); + System.out.println("Pila después de inserción: " + stack); + + // Borrado (pop, sacar de la pila) + stack.pop(); + System.out.println("Pila después de borrado: " + stack); + + // Actualización (no hay actualización directa) + stack.set(0, "Cuatro"); + System.out.println("Pila después de actualización: " + stack); + + // Creación de un mapa + HashMap map = new HashMap<>(); + + // Inserción + map.put(1, "Manzana"); + map.put(2, "Banana"); + map.put(3, "Cereza"); + System.out.println("Mapa después de inserción: " + map); + + // Borrado + map.remove(2); // Eliminar la entrada con clave 2 + System.out.println("Mapa después de borrado: " + map); + + // Actualización + map.put(1, "Durazno"); // Cambiar el valor de la clave 1 + System.out.println("Mapa después de actualización: " + map); + + // No hay ordenación para HashMap, ya que no mantiene orden. + + */ + runAgenda(); + } +} From 5a2f2ca17793b1d2ba65cbe316b045052ff6aa66 Mon Sep 17 00:00:00 2001 From: nolemoon <114313796+nolemoon@users.noreply.github.com> Date: Sat, 14 Sep 2024 14:37:38 -0300 Subject: [PATCH 233/539] Create nolemoon.java --- .../java/nolemoon.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/nolemoon.java diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/nolemoon.java b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/nolemoon.java new file mode 100644 index 0000000000..b7ece90644 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/nolemoon.java @@ -0,0 +1,30 @@ +public class Nolemoon { + public static void main(String[] args) { + //https://www.oracle.com/ar/java/ + //Diferentes + /* + formas de + comentar + */ + + String nombre = "María"; //variable + final int edad = 23; //constante + + //tipos de datos primitivos + + int entero = 10; + float decimal = 5.4f ; + double doble = 32.4324; + boolean verdaderoFalso = true; + char letra = 'n'; + + //tipos de datos no primitivos + String saludo = " Hola cómo estás ?"; + + //Saludo en consola + System.out.println("Hola, JAVA!"); + + + + } +} From b2ae567477860ebfa12bb9029d3fe3586bcb9067 Mon Sep 17 00:00:00 2001 From: nolemoon <114313796+nolemoon@users.noreply.github.com> Date: Sat, 14 Sep 2024 14:59:57 -0300 Subject: [PATCH 234/539] #00 - Java --- .../java/nolemoon.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/nolemoon.java b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/nolemoon.java index b7ece90644..8cbe0639f4 100644 --- a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/nolemoon.java +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/nolemoon.java @@ -1,6 +1,6 @@ public class Nolemoon { public static void main(String[] args) { - //https://www.oracle.com/ar/java/ + // https://www.oracle.com/ar/java/ //Diferentes /* formas de From 5b58d6c1f43d9c4a584182eff23b10d3af0db4ff Mon Sep 17 00:00:00 2001 From: ProTpuS98 Date: Sat, 14 Sep 2024 22:50:06 +0200 Subject: [PATCH 235/539] ProTpuS98.cs --- .../c#/ProTpuS98.cs | 1 + 1 file changed, 1 insertion(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c#/ProTpuS98.cs diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c#/ProTpuS98.cs b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c#/ProTpuS98.cs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c#/ProTpuS98.cs @@ -0,0 +1 @@ + From 8fe213bc77572f4361f686080a1c854c604dd74a Mon Sep 17 00:00:00 2001 From: Jesus Antonio Escamilla Date: Sat, 14 Sep 2024 17:22:59 -0600 Subject: [PATCH 236/539] #08 - Java & Python "Extra" --- .../java/JesusAntonioEEscamilla.java | 99 ++++++++++++++++++- .../python/JesusAntonioEEscamilla.py | 68 ++++++++++++- 2 files changed, 163 insertions(+), 4 deletions(-) diff --git a/Roadmap/08 - CLASES/java/JesusAntonioEEscamilla.java b/Roadmap/08 - CLASES/java/JesusAntonioEEscamilla.java index 771fc9d9d3..d9029d9a20 100644 --- a/Roadmap/08 - CLASES/java/JesusAntonioEEscamilla.java +++ b/Roadmap/08 - CLASES/java/JesusAntonioEEscamilla.java @@ -1,14 +1,35 @@ - +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.Queue; /** #07 - Java -> Jesus Antonio Escamilla */ public class JesusAntonioEEscamilla { public static void main(String[] args) { //---EJERCIÓ--- + System.out.println("CLASES"); Persona persona = new Persona("Jesus Antonio", 24, "Programador"); persona.imprimirDetalles(); //---EXTRA--- - + // Ejemplo con Pila + System.out.println("\nSTACK"); + Pila pila = new Pila<>(); + pila.apilar(1); + pila.apilar(2); + pila.apilar(3); + pila.imprimir(); // Contenido de la Pila: [1, 2, 3] + pila.desapilar(); + pila.imprimir(); // Contenido de la Pila: [1, 2] + + // Ejemplo con Cola + System.out.println("\nQUEUE"); + Cola cola = new Cola<>(); + cola.encolar("A"); + cola.encolar("B"); + cola.encolar("C"); + cola.imprimir(); // Contenido de la Cola: [A, B, C] + cola.desencolar(); + cola.imprimir(); // Contenido de la Cola: [B, C] } //---EJERCIÓ--- @@ -38,7 +59,79 @@ public void imprimirDetalles() { /**-----DIFICULTAD EXTRA-----*/ - // Pendiente + // Clase Pila (Stack) + public static class Pila { + private ArrayList elementos; + + public Pila() { + elementos = new ArrayList<>(); + } + + // Agregar un elemento a la pila + public void apilar(T elemento) { + elementos.add(elemento); + } + + // Eliminar el último elemento agregado (pop) + public T desapilar() { + if (!estaVacia()) { + return elementos.remove(elementos.size() - 1); + } + return null; // Devuelve null si la pila está vacía + } + + // Retornar el número de elementos en la pila + public int tamano() { + return elementos.size(); + } + + // Verificar si la pila está vacía + public boolean estaVacia() { + return elementos.isEmpty(); + } + + // Imprimir el contenido de la pila + public void imprimir() { + System.out.println("Contenido de la Pila: " + elementos); + } + } + + // Clase Cola (Queue) + public static class Cola { + private Queue elementos; + + public Cola() { + elementos = new LinkedList<>(); + } + + // Agregar un elemento a la cola + public void encolar(T elemento) { + elementos.add(elemento); + } + + // Eliminar el primer elemento (dequeue) + public T desencolar() { + if (!estaVacia()) { + return elementos.poll(); // poll elimina y retorna el primer elemento + } + return null; // Devuelve null si la cola está vacía + } + + // Retornar el número de elementos en la cola + public int tamano() { + return elementos.size(); + } + + // Verificar si la cola está vacía + public boolean estaVacia() { + return elementos.isEmpty(); + } + + // Imprimir el contenido de la cola + public void imprimir() { + System.out.println("Contenido de la Cola: " + elementos); + } + } /**-----DIFICULTAD EXTRA-----*/ } \ No newline at end of file diff --git a/Roadmap/08 - CLASES/python/JesusAntonioEEscamilla.py b/Roadmap/08 - CLASES/python/JesusAntonioEEscamilla.py index 3fbb235ef6..0e74dfc182 100644 --- a/Roadmap/08 - CLASES/python/JesusAntonioEEscamilla.py +++ b/Roadmap/08 - CLASES/python/JesusAntonioEEscamilla.py @@ -18,6 +18,7 @@ def imprimir_informacion(self): # Crear una instancia de la clase Persona persona1 = Persona("Jesus Antonio", 30, "Programador") +print("CLASES") persona1.imprimir_informacion() @@ -25,4 +26,69 @@ def imprimir_informacion(self): """ EXTRA """ -# Pendientes \ No newline at end of file +# Ejemplos de CLASES con Pilas y Colas +class Pila: + def __init__(self): + self.items = [] + + def push(self, item): + self.items.append(item) + + def pop(self): + if not self.is_empty(): + return self.items.pop() + else: + return None + + def is_empty(self): + return len(self.items) == 0 + + def size(self): + return len(self.items) + + def print_stack(self): + print(self.items) + + +class Cola: + def __init__(self): + self.items = [] + + def enqueue(self, item): + self.items.append(item) + + def dequeue(self): + if not self.is_empty(): + return self.items.pop(0) + else: + return None + + def is_empty(self): + return len(self.items) == 0 + + def size(self): + return len(self.items) + + def print_queue(self): + print(self.items) + + +# Ejemplo de uso: +print("\nSTACK") +pila = Pila() +pila.push(1) +pila.push(2) +pila.push(3) +pila.print_stack() +pila.pop() +pila.print_stack() + + +print("\nQUEUE") +cola = Cola() +cola.enqueue("A") +cola.enqueue("B") +cola.enqueue("C") +cola.print_queue() +cola.dequeue() +cola.print_queue() From 6a439988a04f1accced54ed1a9f7c64976ff7d82 Mon Sep 17 00:00:00 2001 From: mouredev Date: Sun, 15 Sep 2024 00:16:53 +0000 Subject: [PATCH 237/539] Update stats --- Roadmap/stats.json | 1238 ++++++++++++++++++++++---------------------- 1 file changed, 622 insertions(+), 616 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index 90232a41a8..b008ef6b0e 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,23 +1,23 @@ { "challenges_total": 38, "languages_total": 48, - "files_total": 7010, - "users_total": 1175, + "files_total": 7017, + "users_total": 1176, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1280 + "count": 1281 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 776 + "count": 778 }, { "order": 3, "name": "02 - FUNCIONES Y ALCANCE", - "count": 595 + "count": 596 }, { "order": 4, @@ -122,17 +122,17 @@ { "order": 24, "name": "23 - SINGLETON", - "count": 79 + "count": 80 }, { "order": 25, "name": "24 - DECORADORES", - "count": 71 + "count": 72 }, { "order": 26, "name": "25 - LOGS", - "count": 64 + "count": 65 }, { "order": 27, @@ -200,25 +200,25 @@ "order": 1, "name": "python", "count": 3021, - "percentage": 43.1 + "percentage": 43.05 }, { "order": 2, "name": "javascript", - "count": 1388, - "percentage": 19.8 + "count": 1389, + "percentage": 19.79 }, { "order": 3, "name": "java", - "count": 633, - "percentage": 9.03 + "count": 638, + "percentage": 9.09 }, { "order": 4, "name": "typescript", - "count": 311, - "percentage": 4.44 + "count": 312, + "percentage": 4.45 }, { "order": 5, @@ -236,7 +236,7 @@ "order": 7, "name": "go", "count": 215, - "percentage": 3.07 + "percentage": 3.06 }, { "order": 8, @@ -266,7 +266,7 @@ "order": 12, "name": "c", "count": 67, - "percentage": 0.96 + "percentage": 0.95 }, { "order": 13, @@ -290,7 +290,7 @@ "order": 16, "name": "ocaml", "count": 34, - "percentage": 0.49 + "percentage": 0.48 }, { "order": 17, @@ -860,61 +860,61 @@ }, { "order": 63, + "name": "simonguzman", + "count": 26, + "languages": 1 + }, + { + "order": 64, "name": "isaacus98", "count": 25, "languages": 4 }, { - "order": 64, + "order": 65, "name": "monicavaquerano", "count": 25, "languages": 2 }, { - "order": 65, + "order": 66, "name": "allbertomd", "count": 25, "languages": 1 }, { - "order": 66, + "order": 67, "name": "victoriaparraf", "count": 24, "languages": 1 }, { - "order": 67, + "order": 68, "name": "jamerrq", "count": 24, "languages": 1 }, { - "order": 68, + "order": 69, "name": "deyvid-10", "count": 24, "languages": 1 }, { - "order": 69, + "order": 70, "name": "fedeairala", "count": 24, "languages": 1 }, { - "order": 70, + "order": 71, "name": "zetared92", "count": 23, "languages": 3 }, - { - "order": 71, - "name": "christian-jfr", - "count": 23, - "languages": 1 - }, { "order": 72, - "name": "simonguzman", + "name": "christian-jfr", "count": 23, "languages": 1 }, @@ -2072,1531 +2072,1531 @@ }, { "order": 265, + "name": "martinbohorquez", + "count": 5, + "languages": 2 + }, + { + "order": 266, "name": "eloychavezdev", "count": 5, "languages": 1 }, { - "order": 266, + "order": 267, "name": "drvito1977", "count": 5, "languages": 1 }, { - "order": 267, + "order": 268, "name": "vasilealexandru02", "count": 5, "languages": 1 }, { - "order": 268, + "order": 269, "name": "esaens12", "count": 5, "languages": 1 }, { - "order": 269, + "order": 270, "name": "victormugo", "count": 5, "languages": 1 }, { - "order": 270, + "order": 271, "name": "adridoce", "count": 5, "languages": 1 }, { - "order": 271, + "order": 272, "name": "vixito", "count": 5, "languages": 1 }, { - "order": 272, + "order": 273, "name": "danielbustos342", "count": 5, "languages": 1 }, { - "order": 273, + "order": 274, "name": "douglasdiazr", "count": 5, "languages": 1 }, { - "order": 274, + "order": 275, "name": "n1sek", "count": 5, "languages": 1 }, { - "order": 275, + "order": 276, "name": "robmxz", "count": 5, "languages": 1 }, { - "order": 276, + "order": 277, "name": "d4-n1", "count": 5, "languages": 1 }, { - "order": 277, + "order": 278, "name": "lauracastrillonmp", "count": 5, "languages": 1 }, { - "order": 278, + "order": 279, "name": "joanfv-git", "count": 5, "languages": 1 }, { - "order": 279, + "order": 280, "name": "yharyarias", "count": 5, "languages": 1 }, { - "order": 280, + "order": 281, "name": "jorgeadamowicz", "count": 5, "languages": 1 }, { - "order": 281, + "order": 282, "name": "franz-arzapalo", "count": 5, "languages": 1 }, { - "order": 282, + "order": 283, "name": "d0ubt0", "count": 5, "languages": 1 }, { - "order": 283, + "order": 284, "name": "gmbarrios", "count": 5, "languages": 1 }, { - "order": 284, + "order": 285, "name": "santiago434c", "count": 5, "languages": 1 }, { - "order": 285, + "order": 286, "name": "augustdev2003", "count": 5, "languages": 1 }, { - "order": 286, + "order": 287, "name": "alberba", "count": 5, "languages": 1 }, { - "order": 287, + "order": 288, "name": "gabrielramos02", "count": 5, "languages": 1 }, { - "order": 288, + "order": 289, "name": "thezhizn", "count": 5, "languages": 1 }, { - "order": 289, + "order": 290, "name": "jose-luis-lanza", "count": 5, "languages": 1 }, { - "order": 290, + "order": 291, "name": "nomellamodante", "count": 5, "languages": 1 }, { - "order": 291, + "order": 292, "name": "karolle", "count": 5, "languages": 1 }, { - "order": 292, + "order": 293, "name": "jcrodmir", "count": 5, "languages": 1 }, { - "order": 293, + "order": 294, "name": "alvarofernandezavalos", "count": 5, "languages": 1 }, { - "order": 294, + "order": 295, "name": "lucasag01", "count": 5, "languages": 1 }, { - "order": 295, + "order": 296, "name": "thaishdz", "count": 5, "languages": 1 }, { - "order": 296, + "order": 297, "name": "bastianalq", "count": 5, "languages": 1 }, { - "order": 297, + "order": 298, "name": "w00k", "count": 5, "languages": 1 }, { - "order": 298, + "order": 299, "name": "mohamedelderkaoui", "count": 5, "languages": 1 }, { - "order": 299, + "order": 300, "name": "boterop", "count": 5, "languages": 1 }, { - "order": 300, + "order": 301, "name": "rafacv23", "count": 5, "languages": 1 }, { - "order": 301, + "order": 302, "name": "d1d4cum", "count": 5, "languages": 1 }, { - "order": 302, + "order": 303, "name": "zarakilancelot", "count": 4, "languages": 3 }, { - "order": 303, + "order": 304, "name": "eonozux", "count": 4, "languages": 2 }, { - "order": 304, + "order": 305, "name": "yablik", "count": 4, "languages": 2 }, { - "order": 305, + "order": 306, "name": "fullovellas", "count": 4, "languages": 2 }, { - "order": 306, + "order": 307, "name": "k3nvd", "count": 4, "languages": 2 }, { - "order": 307, + "order": 308, "name": "josefuentes-dev", "count": 4, "languages": 2 }, { - "order": 308, + "order": 309, "name": "willr30", "count": 4, "languages": 2 }, { - "order": 309, + "order": 310, "name": "ruthmp", "count": 4, "languages": 2 }, { - "order": 310, + "order": 311, "name": "daeduol", "count": 4, "languages": 2 }, { - "order": 311, + "order": 312, "name": "mendozalz", "count": 4, "languages": 2 }, { - "order": 312, + "order": 313, "name": "salkalero", "count": 4, "languages": 2 }, { - "order": 313, + "order": 314, "name": "elhacedordecosas", "count": 4, "languages": 1 }, { - "order": 314, + "order": 315, "name": "andeveling", "count": 4, "languages": 1 }, { - "order": 315, + "order": 316, "name": "santiago-munoz-garcia", "count": 4, "languages": 1 }, { - "order": 316, + "order": 317, "name": "deivitdev", "count": 4, "languages": 1 }, { - "order": 317, + "order": 318, "name": "joshbaez", "count": 4, "languages": 1 }, { - "order": 318, + "order": 319, "name": "marcoslombardo", "count": 4, "languages": 1 }, { - "order": 319, + "order": 320, "name": "lrpeset", "count": 4, "languages": 1 }, { - "order": 320, + "order": 321, "name": "dieswae", "count": 4, "languages": 1 }, { - "order": 321, + "order": 322, "name": "mateo423", "count": 4, "languages": 1 }, { - "order": 322, + "order": 323, "name": "joaquinlopez14", "count": 4, "languages": 1 }, { - "order": 323, + "order": 324, "name": "angelurrutdev", "count": 4, "languages": 1 }, { - "order": 324, + "order": 325, "name": "elianisdev", "count": 4, "languages": 1 }, { - "order": 325, + "order": 326, "name": "omegatroy", "count": 4, "languages": 1 }, { - "order": 326, + "order": 327, "name": "socramwd", "count": 4, "languages": 1 }, { - "order": 327, + "order": 328, "name": "carzep09", "count": 4, "languages": 1 }, { - "order": 328, + "order": 329, "name": "mayerga", "count": 4, "languages": 1 }, { - "order": 329, + "order": 330, "name": "hugovrc", "count": 4, "languages": 1 }, { - "order": 330, + "order": 331, "name": "cdbiancotti", "count": 4, "languages": 1 }, { - "order": 331, + "order": 332, "name": "h4ckxel", "count": 4, "languages": 1 }, { - "order": 332, + "order": 333, "name": "tobibordino", "count": 4, "languages": 1 }, { - "order": 333, + "order": 334, "name": "guillermo-k", "count": 4, "languages": 1 }, { - "order": 334, + "order": 335, "name": "zakkdrte", "count": 4, "languages": 1 }, { - "order": 335, + "order": 336, "name": "sarismejiasanchez", "count": 4, "languages": 1 }, { - "order": 336, + "order": 337, "name": "buriticasara", "count": 4, "languages": 1 }, { - "order": 337, + "order": 338, "name": "davstudy", "count": 4, "languages": 1 }, { - "order": 338, + "order": 339, "name": "zerek247", "count": 4, "languages": 1 }, { - "order": 339, + "order": 340, "name": "vicman-182", "count": 4, "languages": 1 }, { - "order": 340, + "order": 341, "name": "dlgai12", "count": 4, "languages": 1 }, { - "order": 341, + "order": 342, "name": "rodrigoghr", "count": 4, "languages": 1 }, { - "order": 342, + "order": 343, "name": "txuky", "count": 4, "languages": 1 }, { - "order": 343, + "order": 344, "name": "nox456", "count": 4, "languages": 1 }, { - "order": 344, + "order": 345, "name": "mplatab", "count": 4, "languages": 1 }, { - "order": 345, + "order": 346, "name": "angell4s", "count": 4, "languages": 1 }, { - "order": 346, + "order": 347, "name": "quejuan52", "count": 4, "languages": 1 }, { - "order": 347, + "order": 348, "name": "axelprz", "count": 4, "languages": 1 }, { - "order": 348, + "order": 349, "name": "javirub", "count": 4, "languages": 1 }, { - "order": 349, + "order": 350, "name": "mallcca", "count": 4, "languages": 1 }, { - "order": 350, + "order": 351, "name": "sunjamer", "count": 4, "languages": 1 }, { - "order": 351, + "order": 352, "name": "carrenoalexander", "count": 4, "languages": 1 }, { - "order": 352, + "order": 353, "name": "jadraz", "count": 4, "languages": 1 }, { - "order": 353, + "order": 354, "name": "anvildestroyer", "count": 4, "languages": 1 }, { - "order": 354, + "order": 355, "name": "luissssoto", "count": 4, "languages": 1 }, { - "order": 355, + "order": 356, "name": "albertorevel", "count": 4, "languages": 1 }, { - "order": 356, + "order": 357, "name": "juanca2805", "count": 4, "languages": 1 }, { - "order": 357, + "order": 358, "name": "bladi23", "count": 4, "languages": 1 }, { - "order": 358, + "order": 359, "name": "blasbarragan", "count": 4, "languages": 1 }, { - "order": 359, + "order": 360, "name": "jerrysantana", "count": 4, "languages": 1 }, { - "order": 360, + "order": 361, "name": "abel-ade", "count": 4, "languages": 1 }, { - "order": 361, + "order": 362, "name": "jairo-alejandro", "count": 4, "languages": 1 }, { - "order": 362, + "order": 363, "name": "sbs24", "count": 4, "languages": 1 }, { - "order": 363, + "order": 364, "name": "traver79", "count": 4, "languages": 1 }, { - "order": 364, + "order": 365, "name": "ramxv", "count": 4, "languages": 1 }, { - "order": 365, + "order": 366, "name": "inkhemi", "count": 4, "languages": 1 }, { - "order": 366, + "order": 367, "name": "juperdev", "count": 4, "languages": 1 }, { - "order": 367, + "order": 368, "name": "abelsrzz", "count": 3, "languages": 3 }, { - "order": 368, + "order": 369, "name": "angelo-eyama", "count": 3, "languages": 3 }, { - "order": 369, + "order": 370, "name": "akaisombra", "count": 3, "languages": 3 }, { - "order": 370, + "order": 371, "name": "oskarcali", "count": 3, "languages": 3 }, { - "order": 371, + "order": 372, "name": "owen-ian", "count": 3, "languages": 3 }, { - "order": 372, + "order": 373, "name": "jehiselruth", "count": 3, "languages": 3 }, { - "order": 373, + "order": 374, "name": "n-skot", "count": 3, "languages": 2 }, { - "order": 374, + "order": 375, "name": "clotrack", "count": 3, "languages": 2 }, { - "order": 375, + "order": 376, "name": "dimasb69", "count": 3, "languages": 2 }, { - "order": 376, + "order": 377, "name": "alfarog507", "count": 3, "languages": 2 }, { - "order": 377, + "order": 378, "name": "eloitr", "count": 3, "languages": 2 }, { - "order": 378, + "order": 379, "name": "diegopc-dev", "count": 3, "languages": 2 }, { - "order": 379, + "order": 380, "name": "robindev1812", "count": 3, "languages": 2 }, { - "order": 380, + "order": 381, "name": "arliumdev", "count": 3, "languages": 2 }, { - "order": 381, + "order": 382, "name": "skala2301", "count": 3, "languages": 2 }, { - "order": 382, + "order": 383, "name": "pablotaber", "count": 3, "languages": 2 }, { - "order": 383, + "order": 384, "name": "allanoscoding", "count": 3, "languages": 2 }, { - "order": 384, + "order": 385, "name": "seba9906", "count": 3, "languages": 2 }, { - "order": 385, + "order": 386, "name": "augustosdev", "count": 3, "languages": 2 }, { - "order": 386, + "order": 387, "name": "dylanb55", "count": 3, "languages": 1 }, { - "order": 387, + "order": 388, "name": "mellamoomar", "count": 3, "languages": 1 }, { - "order": 388, + "order": 389, "name": "oscar503sv", "count": 3, "languages": 1 }, { - "order": 389, + "order": 390, "name": "alejomazov", "count": 3, "languages": 1 }, { - "order": 390, + "order": 391, "name": "bryanalzate007", "count": 3, "languages": 1 }, { - "order": 391, + "order": 392, "name": "ivanpelu7", "count": 3, "languages": 1 }, { - "order": 392, + "order": 393, "name": "dmauricio4", "count": 3, "languages": 1 }, { - "order": 393, + "order": 394, "name": "davidr1594", "count": 3, "languages": 1 }, { - "order": 394, + "order": 395, "name": "vandresca", "count": 3, "languages": 1 }, { - "order": 395, + "order": 396, "name": "marlonleon2023", "count": 3, "languages": 1 }, { - "order": 396, + "order": 397, "name": "nikorasu-d", "count": 3, "languages": 1 }, { - "order": 397, + "order": 398, "name": "barbafebles", "count": 3, "languages": 1 }, { - "order": 398, + "order": 399, "name": "heliercamejo", "count": 3, "languages": 1 }, { - "order": 399, + "order": 400, "name": "aggranadoss", "count": 3, "languages": 1 }, { - "order": 400, + "order": 401, "name": "dannyvera1234", "count": 3, "languages": 1 }, { - "order": 401, + "order": 402, "name": "axelsparta", "count": 3, "languages": 1 }, { - "order": 402, + "order": 403, "name": "gitperalta", "count": 3, "languages": 1 }, { - "order": 403, + "order": 404, "name": "samuelarandia", "count": 3, "languages": 1 }, { - "order": 404, + "order": 405, "name": "jaimerocel96", "count": 3, "languages": 1 }, { - "order": 405, + "order": 406, "name": "sitnestic", "count": 3, "languages": 1 }, { - "order": 406, + "order": 407, "name": "matteozhao98", "count": 3, "languages": 1 }, { - "order": 407, + "order": 408, "name": "tebaah", "count": 3, "languages": 1 }, { - "order": 408, + "order": 409, "name": "sebasgrdev", "count": 3, "languages": 1 }, { - "order": 409, + "order": 410, "name": "14davidnkt", "count": 3, "languages": 1 }, { - "order": 410, + "order": 411, "name": "legs30011", "count": 3, "languages": 1 }, { - "order": 411, + "order": 412, "name": "dariorfm", "count": 3, "languages": 1 }, { - "order": 412, + "order": 413, "name": "orlas135", "count": 3, "languages": 1 }, { - "order": 413, + "order": 414, "name": "arbenisacosta", "count": 3, "languages": 1 }, { - "order": 414, + "order": 415, "name": "hectoriglesias", "count": 3, "languages": 1 }, { - "order": 415, + "order": 416, "name": "matrix-miguel", "count": 3, "languages": 1 }, { - "order": 416, + "order": 417, "name": "jacarrillob", "count": 3, "languages": 1 }, { - "order": 417, + "order": 418, "name": "jelozanov", "count": 3, "languages": 1 }, { - "order": 418, + "order": 419, "name": "andyfg0289", "count": 3, "languages": 1 }, { - "order": 419, + "order": 420, "name": "daniback95", "count": 3, "languages": 1 }, { - "order": 420, + "order": 421, "name": "r4kso", "count": 3, "languages": 1 }, { - "order": 421, + "order": 422, "name": "singularpigeon", "count": 3, "languages": 1 }, { - "order": 422, + "order": 423, "name": "sandracalatayud", "count": 3, "languages": 1 }, { - "order": 423, + "order": 424, "name": "andresargote", "count": 3, "languages": 1 }, { - "order": 424, + "order": 425, "name": "fernandog25", "count": 3, "languages": 1 }, { - "order": 425, + "order": 426, "name": "agusbelp", "count": 3, "languages": 1 }, { - "order": 426, + "order": 427, "name": "uyarra73", "count": 3, "languages": 1 }, { - "order": 427, + "order": 428, "name": "asaelz", "count": 3, "languages": 1 }, { - "order": 428, + "order": 429, "name": "davidb313", "count": 3, "languages": 1 }, { - "order": 429, + "order": 430, "name": "fdcorreadev", "count": 3, "languages": 1 }, { - "order": 430, + "order": 431, "name": "magupe09", "count": 3, "languages": 1 }, { - "order": 431, + "order": 432, "name": "nathaliamf", "count": 3, "languages": 1 }, { - "order": 432, + "order": 433, "name": "victorsschz", "count": 3, "languages": 1 }, { - "order": 433, + "order": 434, "name": "hatorob", "count": 3, "languages": 1 }, { - "order": 434, + "order": 435, "name": "zuluangel", "count": 3, "languages": 1 }, { - "order": 435, + "order": 436, "name": "matiascba27", "count": 3, "languages": 1 }, { - "order": 436, + "order": 437, "name": "faga01", "count": 3, "languages": 1 }, { - "order": 437, + "order": 438, "name": "ahinar", "count": 3, "languages": 1 }, { - "order": 438, + "order": 439, "name": "migueltfangche", "count": 3, "languages": 1 }, { - "order": 439, + "order": 440, "name": "duendeintemporal", "count": 3, "languages": 1 }, { - "order": 440, + "order": 441, "name": "josueeeee", "count": 3, "languages": 1 }, { - "order": 441, + "order": 442, "name": "emaenriquez", "count": 3, "languages": 1 }, { - "order": 442, + "order": 443, "name": "sebascmb", "count": 3, "languages": 1 }, { - "order": 443, + "order": 444, "name": "gpinedaoviedo", "count": 3, "languages": 1 }, { - "order": 444, + "order": 445, "name": "blfuentes", "count": 3, "languages": 1 }, { - "order": 445, + "order": 446, "name": "javiearth", "count": 3, "languages": 1 }, { - "order": 446, + "order": 447, "name": "atienzar", "count": 3, "languages": 1 }, { - "order": 447, + "order": 448, "name": "coshiloco", "count": 3, "languages": 1 }, { - "order": 448, + "order": 449, "name": "crisvigas", "count": 3, "languages": 1 }, { - "order": 449, + "order": 450, "name": "tomytsa", "count": 3, "languages": 1 }, { - "order": 450, + "order": 451, "name": "rocallejas", "count": 3, "languages": 1 }, { - "order": 451, + "order": 452, "name": "guido2288", "count": 3, "languages": 1 }, { - "order": 452, + "order": 453, "name": "githjuan", "count": 3, "languages": 1 }, { - "order": 453, + "order": 454, "name": "jeyker-dev", "count": 3, "languages": 1 }, { - "order": 454, + "order": 455, "name": "eliskopun", "count": 3, "languages": 1 }, { - "order": 455, + "order": 456, "name": "ramon-almeida", "count": 3, "languages": 1 }, { - "order": 456, + "order": 457, "name": "danielperezrubio", "count": 3, "languages": 1 }, { - "order": 457, + "order": 458, "name": "minn09", "count": 3, "languages": 1 }, { - "order": 458, + "order": 459, "name": "elkin-dev", "count": 3, "languages": 1 }, { - "order": 459, + "order": 460, "name": "bertolini-victor", "count": 3, "languages": 1 }, { - "order": 460, + "order": 461, "name": "jorgegarcia-dev", "count": 3, "languages": 1 }, { - "order": 461, + "order": 462, "name": "suescun845", "count": 3, "languages": 1 }, { - "order": 462, + "order": 463, "name": "carlosalberto05", "count": 3, "languages": 1 }, { - "order": 463, + "order": 464, "name": "mmacalli", "count": 3, "languages": 1 }, { - "order": 464, + "order": 465, "name": "ggtorca", "count": 3, "languages": 1 }, { - "order": 465, + "order": 466, "name": "mstaz4", "count": 3, "languages": 1 }, { - "order": 466, + "order": 467, "name": "emilianohoyos", "count": 3, "languages": 1 }, { - "order": 467, + "order": 468, "name": "rgeditv1", "count": 3, "languages": 1 }, { - "order": 468, + "order": 469, "name": "elder202", "count": 3, "languages": 1 }, { - "order": 469, + "order": 470, "name": "dandrusco", "count": 3, "languages": 1 }, { - "order": 470, + "order": 471, "name": "mizadlogcia", "count": 3, "languages": 1 }, { - "order": 471, + "order": 472, "name": "antii16", "count": 3, "languages": 1 }, { - "order": 472, + "order": 473, "name": "strooplab", "count": 3, "languages": 1 }, { - "order": 473, + "order": 474, "name": "marcoh2325", "count": 3, "languages": 1 }, { - "order": 474, + "order": 475, "name": "frostbitepy", "count": 3, "languages": 1 }, { - "order": 475, + "order": 476, "name": "zzepu", "count": 3, "languages": 1 }, { - "order": 476, + "order": 477, "name": "tekatoki", "count": 3, "languages": 1 }, { - "order": 477, + "order": 478, "name": "yeam-10", "count": 3, "languages": 1 }, { - "order": 478, + "order": 479, "name": "exanderguitar", "count": 3, "languages": 1 }, { - "order": 479, + "order": 480, "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { - "order": 480, + "order": 481, "name": "macova96", "count": 3, "languages": 1 }, { - "order": 481, + "order": 482, "name": "betzadev", "count": 3, "languages": 1 }, { - "order": 482, + "order": 483, "name": "monikgbar", "count": 3, "languages": 1 }, { - "order": 483, + "order": 484, "name": "guillesese", "count": 3, "languages": 1 }, { - "order": 484, + "order": 485, "name": "artdugarte", "count": 3, "languages": 1 }, { - "order": 485, + "order": 486, "name": "jofedev", "count": 3, "languages": 1 }, { - "order": 486, + "order": 487, "name": "oscarhub90", "count": 3, "languages": 1 }, { - "order": 487, + "order": 488, "name": "tonywarcode", "count": 3, "languages": 1 }, { - "order": 488, + "order": 489, "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { - "order": 489, + "order": 490, "name": "joandevpy", "count": 3, "languages": 1 }, { - "order": 490, + "order": 491, "name": "estelacode", "count": 3, "languages": 1 }, { - "order": 491, + "order": 492, "name": "xurxogz", "count": 3, "languages": 1 }, { - "order": 492, + "order": 493, "name": "freedainew", "count": 3, "languages": 1 }, { - "order": 493, + "order": 494, "name": "swifty0705", "count": 3, "languages": 1 }, { - "order": 494, + "order": 495, "name": "marce1084", "count": 3, "languages": 1 }, { - "order": 495, + "order": 496, "name": "rubioj17", "count": 3, "languages": 1 }, { - "order": 496, + "order": 497, "name": "kingsaul22", "count": 3, "languages": 1 }, { - "order": 497, + "order": 498, "name": "ainoaran", "count": 3, "languages": 1 }, { - "order": 498, + "order": 499, "name": "francofmv", "count": 3, "languages": 1 }, { - "order": 499, + "order": 500, "name": "marianoemir", "count": 3, "languages": 1 }, { - "order": 500, + "order": 501, "name": "davidsorroche", "count": 3, "languages": 1 }, { - "order": 501, + "order": 502, "name": "david-quinones", "count": 3, "languages": 1 }, { - "order": 502, + "order": 503, "name": "fluna29", "count": 3, "languages": 1 }, { - "order": 503, + "order": 504, "name": "natalinacn", "count": 3, "languages": 1 }, { - "order": 504, + "order": 505, "name": "kine-jdf", "count": 3, "languages": 1 }, { - "order": 505, + "order": 506, "name": "yaretzyrb", "count": 3, "languages": 1 }, { - "order": 506, + "order": 507, "name": "password1989", "count": 3, "languages": 1 }, { - "order": 507, + "order": 508, "name": "confley", "count": 3, "languages": 1 }, { - "order": 508, + "order": 509, "name": "beonzj", "count": 3, "languages": 1 }, { - "order": 509, + "order": 510, "name": "mantaras96", "count": 3, "languages": 1 }, { - "order": 510, + "order": 511, "name": "juxxon23", "count": 3, "languages": 1 }, { - "order": 511, + "order": 512, "name": "frangarmez21", "count": 3, "languages": 1 }, { - "order": 512, + "order": 513, "name": "ikeragi05", "count": 3, "languages": 1 }, { - "order": 513, + "order": 514, "name": "johnalexguerrero", "count": 3, "languages": 1 }, - { - "order": 514, - "name": "devvdroid01", - "count": 2, - "languages": 2 - }, { "order": 515, - "name": "sgb004", + "name": "devvdroid01", "count": 2, "languages": 2 }, { "order": 516, - "name": "chuanmi", + "name": "sgb004", "count": 2, "languages": 2 }, { "order": 517, - "name": "jlcareglio", + "name": "chuanmi", "count": 2, "languages": 2 }, { "order": 518, - "name": "jurgen-alfaro", + "name": "jlcareglio", "count": 2, "languages": 2 }, { "order": 519, - "name": "martinbohorquez", + "name": "jurgen-alfaro", "count": 2, "languages": 2 }, @@ -5582,1956 +5582,1962 @@ }, { "order": 850, - "name": "luchof5", + "name": "mekanicas", "count": 1, "languages": 1 }, { "order": 851, - "name": "fullstackarlo", + "name": "luchof5", "count": 1, "languages": 1 }, { "order": 852, - "name": "mdemena", + "name": "fullstackarlo", "count": 1, "languages": 1 }, { "order": 853, - "name": "cliverjimny123", + "name": "mdemena", "count": 1, "languages": 1 }, { "order": 854, - "name": "rodmiggithub", + "name": "cliverjimny123", "count": 1, "languages": 1 }, { "order": 855, - "name": "s9code", + "name": "rodmiggithub", "count": 1, "languages": 1 }, { "order": 856, - "name": "javieradev", + "name": "s9code", "count": 1, "languages": 1 }, { "order": 857, - "name": "xnomada", + "name": "javieradev", "count": 1, "languages": 1 }, { "order": 858, - "name": "miguelsarm", + "name": "xnomada", "count": 1, "languages": 1 }, { "order": 859, - "name": "royhuamanavila", + "name": "miguelsarm", "count": 1, "languages": 1 }, { "order": 860, - "name": "imista", + "name": "royhuamanavila", "count": 1, "languages": 1 }, { "order": 861, - "name": "denisortega", + "name": "imista", "count": 1, "languages": 1 }, { "order": 862, - "name": "kouski", + "name": "denisortega", "count": 1, "languages": 1 }, { "order": 863, - "name": "leydimadrid", + "name": "kouski", "count": 1, "languages": 1 }, { "order": 864, - "name": "frannm29", + "name": "leydimadrid", "count": 1, "languages": 1 }, { "order": 865, - "name": "saintsluis", + "name": "frannm29", "count": 1, "languages": 1 }, { "order": 866, - "name": "gc796", + "name": "saintsluis", "count": 1, "languages": 1 }, { "order": 867, - "name": "pierre-ol", + "name": "gc796", "count": 1, "languages": 1 }, { "order": 868, - "name": "francescoalterio", + "name": "pierre-ol", "count": 1, "languages": 1 }, { "order": 869, - "name": "gustavoguerrero", + "name": "francescoalterio", "count": 1, "languages": 1 }, { "order": 870, - "name": "diegoxxd", + "name": "gustavoguerrero", "count": 1, "languages": 1 }, { "order": 871, - "name": "fzcarlitos", + "name": "diegoxxd", "count": 1, "languages": 1 }, { "order": 872, - "name": "walkerlyna", + "name": "fzcarlitos", "count": 1, "languages": 1 }, { "order": 873, - "name": "sejotaz", + "name": "walkerlyna", "count": 1, "languages": 1 }, { "order": 874, - "name": "frcan89", + "name": "sejotaz", "count": 1, "languages": 1 }, { "order": 875, - "name": "nicorey89", + "name": "frcan89", "count": 1, "languages": 1 }, { "order": 876, - "name": "alexis0717", + "name": "nicorey89", "count": 1, "languages": 1 }, { "order": 877, - "name": "edgonzz", + "name": "alexis0717", "count": 1, "languages": 1 }, { "order": 878, - "name": "vmga09", + "name": "edgonzz", "count": 1, "languages": 1 }, { "order": 879, - "name": "lfam200", + "name": "vmga09", "count": 1, "languages": 1 }, { "order": 880, - "name": "kenzambrano", + "name": "lfam200", "count": 1, "languages": 1 }, { "order": 881, - "name": "dmhenaopa", + "name": "kenzambrano", "count": 1, "languages": 1 }, { "order": 882, - "name": "jpiacaruso", + "name": "dmhenaopa", "count": 1, "languages": 1 }, { "order": 883, - "name": "isnatthy", + "name": "jpiacaruso", "count": 1, "languages": 1 }, { "order": 884, - "name": "diego-santana23", + "name": "isnatthy", "count": 1, "languages": 1 }, { "order": 885, - "name": "peticas", + "name": "diego-santana23", "count": 1, "languages": 1 }, { "order": 886, - "name": "flarien", + "name": "peticas", "count": 1, "languages": 1 }, { "order": 887, - "name": "franciscokarriere", + "name": "flarien", "count": 1, "languages": 1 }, { "order": 888, - "name": "pipeyz21", + "name": "franciscokarriere", "count": 1, "languages": 1 }, { "order": 889, - "name": "luisgarm", + "name": "pipeyz21", "count": 1, "languages": 1 }, { "order": 890, - "name": "tetotille", + "name": "luisgarm", "count": 1, "languages": 1 }, { "order": 891, - "name": "vorosdev", + "name": "tetotille", "count": 1, "languages": 1 }, { "order": 892, - "name": "santiagomac", + "name": "vorosdev", "count": 1, "languages": 1 }, { "order": 893, - "name": "implevacui", + "name": "santiagomac", "count": 1, "languages": 1 }, { "order": 894, - "name": "fede6299", + "name": "implevacui", "count": 1, "languages": 1 }, { "order": 895, - "name": "kevin05m", + "name": "fede6299", "count": 1, "languages": 1 }, { "order": 896, - "name": "diegomm27", + "name": "kevin05m", "count": 1, "languages": 1 }, { "order": 897, - "name": "whiterunjarl", + "name": "diegomm27", "count": 1, "languages": 1 }, { "order": 898, - "name": "pablo-lnx", + "name": "whiterunjarl", "count": 1, "languages": 1 }, { "order": 899, - "name": "darkohokage", + "name": "pablo-lnx", "count": 1, "languages": 1 }, { "order": 900, - "name": "jhonnfl", + "name": "darkohokage", "count": 1, "languages": 1 }, { "order": 901, - "name": "jarzatedev", + "name": "jhonnfl", "count": 1, "languages": 1 }, { "order": 902, - "name": "brunom-93", + "name": "jarzatedev", "count": 1, "languages": 1 }, { "order": 903, - "name": "alejandroruiz23", + "name": "brunom-93", "count": 1, "languages": 1 }, { "order": 904, - "name": "trollface77", + "name": "alejandroruiz23", "count": 1, "languages": 1 }, { "order": 905, - "name": "jaimesoftdev", + "name": "trollface77", "count": 1, "languages": 1 }, { "order": 906, - "name": "edm1ya", + "name": "jaimesoftdev", "count": 1, "languages": 1 }, { "order": 907, - "name": "tartabullroberto", + "name": "edm1ya", "count": 1, "languages": 1 }, { "order": 908, - "name": "serg-pq", + "name": "tartabullroberto", "count": 1, "languages": 1 }, { "order": 909, - "name": "lara-vel-dev", + "name": "serg-pq", "count": 1, "languages": 1 }, { "order": 910, - "name": "alexisbarradev", + "name": "lara-vel-dev", "count": 1, "languages": 1 }, { "order": 911, - "name": "kelvincb", + "name": "alexisbarradev", "count": 1, "languages": 1 }, { "order": 912, - "name": "carlostoledoe", + "name": "kelvincb", "count": 1, "languages": 1 }, { "order": 913, - "name": "gilbertho502", + "name": "carlostoledoe", "count": 1, "languages": 1 }, { "order": 914, - "name": "v0l0v", + "name": "gilbertho502", "count": 1, "languages": 1 }, { "order": 915, - "name": "johao23", + "name": "v0l0v", "count": 1, "languages": 1 }, { "order": 916, - "name": "geridage", + "name": "johao23", "count": 1, "languages": 1 }, { "order": 917, - "name": "vmarialuzm", + "name": "geridage", "count": 1, "languages": 1 }, { "order": 918, - "name": "snowcardenas", + "name": "vmarialuzm", "count": 1, "languages": 1 }, { "order": 919, + "name": "snowcardenas", + "count": 1, + "languages": 1 + }, + { + "order": 920, "name": "and-y21", "count": 1, "languages": 1 }, { - "order": 920, + "order": 921, "name": "arturodlapaz17", "count": 1, "languages": 1 }, { - "order": 921, + "order": 922, "name": "manuu42", "count": 1, "languages": 1 }, { - "order": 922, + "order": 923, "name": "howlett9999", "count": 1, "languages": 1 }, { - "order": 923, + "order": 924, "name": "dkp-dev", "count": 1, "languages": 1 }, { - "order": 924, + "order": 925, "name": "hnaranjog", "count": 1, "languages": 1 }, { - "order": 925, + "order": 926, "name": "wallsified", "count": 1, "languages": 1 }, { - "order": 926, + "order": 927, "name": "javitron100", "count": 1, "languages": 1 }, { - "order": 927, + "order": 928, "name": "lluistech", "count": 1, "languages": 1 }, { - "order": 928, + "order": 929, "name": "mamartinez14", "count": 1, "languages": 1 }, { - "order": 929, + "order": 930, "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { - "order": 930, + "order": 931, "name": "bassalex27", "count": 1, "languages": 1 }, { - "order": 931, + "order": 932, "name": "yetlanezils", "count": 1, "languages": 1 }, { - "order": 932, + "order": 933, "name": "ndepaul82", "count": 1, "languages": 1 }, { - "order": 933, + "order": 934, "name": "amitchellg", "count": 1, "languages": 1 }, { - "order": 934, + "order": 935, "name": "turudev1979", "count": 1, "languages": 1 }, { - "order": 935, + "order": 936, "name": "deivimiller", "count": 1, "languages": 1 }, { - "order": 936, + "order": 937, "name": "haroldalb", "count": 1, "languages": 1 }, { - "order": 937, + "order": 938, "name": "dakkaj", "count": 1, "languages": 1 }, { - "order": 938, + "order": 939, "name": "jheisonquiroga", "count": 1, "languages": 1 }, { - "order": 939, + "order": 940, "name": "juli-m4", "count": 1, "languages": 1 }, { - "order": 940, + "order": 941, "name": "sergiomhernandez", "count": 1, "languages": 1 }, { - "order": 941, + "order": 942, "name": "masenace", "count": 1, "languages": 1 }, { - "order": 942, + "order": 943, "name": "e-xtian", "count": 1, "languages": 1 }, { - "order": 943, + "order": 944, "name": "vickalck", "count": 1, "languages": 1 }, { - "order": 944, + "order": 945, "name": "gmedinat911", "count": 1, "languages": 1 }, { - "order": 945, + "order": 946, "name": "eljavi0", "count": 1, "languages": 1 }, { - "order": 946, + "order": 947, "name": "yeisongil", "count": 1, "languages": 1 }, { - "order": 947, + "order": 948, "name": "julioorozco05", "count": 1, "languages": 1 }, { - "order": 948, + "order": 949, "name": "fergz1988", "count": 1, "languages": 1 }, { - "order": 949, + "order": 950, "name": "marcos0803", "count": 1, "languages": 1 }, { - "order": 950, + "order": 951, "name": "xcortes", "count": 1, "languages": 1 }, { - "order": 951, + "order": 952, "name": "facundorsabia", "count": 1, "languages": 1 }, { - "order": 952, + "order": 953, "name": "nico70012", "count": 1, "languages": 1 }, { - "order": 953, + "order": 954, "name": "charly024", "count": 1, "languages": 1 }, { - "order": 954, + "order": 955, "name": "devjerez", "count": 1, "languages": 1 }, { - "order": 955, + "order": 956, "name": "copamire", "count": 1, "languages": 1 }, { - "order": 956, + "order": 957, "name": "gersonoroz", "count": 1, "languages": 1 }, { - "order": 957, + "order": 958, "name": "jafuma0320", "count": 1, "languages": 1 }, { - "order": 958, + "order": 959, "name": "g4nd4lf", "count": 1, "languages": 1 }, { - "order": 959, + "order": 960, "name": "obed-tc", "count": 1, "languages": 1 }, { - "order": 960, + "order": 961, "name": "devkenn", "count": 1, "languages": 1 }, { - "order": 961, + "order": 962, "name": "xalejandrow", "count": 1, "languages": 1 }, { - "order": 962, + "order": 963, "name": "henrydavidprimera", "count": 1, "languages": 1 }, { - "order": 963, + "order": 964, "name": "luceldasilva", "count": 1, "languages": 1 }, { - "order": 964, + "order": 965, "name": "mjordanaam", "count": 1, "languages": 1 }, { - "order": 965, + "order": 966, "name": "betulioo", "count": 1, "languages": 1 }, { - "order": 966, + "order": 967, "name": "judithernandez", "count": 1, "languages": 1 }, { - "order": 967, + "order": 968, "name": "dimanu-py", "count": 1, "languages": 1 }, { - "order": 968, + "order": 969, "name": "snowale", "count": 1, "languages": 1 }, { - "order": 969, + "order": 970, "name": "cd1974", "count": 1, "languages": 1 }, { - "order": 970, + "order": 971, "name": "acobo3", "count": 1, "languages": 1 }, { - "order": 971, + "order": 972, "name": "isaacdci", "count": 1, "languages": 1 }, { - "order": 972, + "order": 973, "name": "manueldenisdev", "count": 1, "languages": 1 }, { - "order": 973, + "order": 974, "name": "anexo01", "count": 1, "languages": 1 }, { - "order": 974, + "order": 975, "name": "yamiyugi25", "count": 1, "languages": 1 }, { - "order": 975, + "order": 976, "name": "gl-informatica", "count": 1, "languages": 1 }, { - "order": 976, + "order": 977, "name": "miguelmancebo", "count": 1, "languages": 1 }, { - "order": 977, + "order": 978, "name": "neusier101", "count": 1, "languages": 1 }, { - "order": 978, + "order": 979, "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { - "order": 979, + "order": 980, "name": "xhinto", "count": 1, "languages": 1 }, { - "order": 980, + "order": 981, "name": "dacaldev", "count": 1, "languages": 1 }, { - "order": 981, + "order": 982, "name": "juan-cruz01", "count": 1, "languages": 1 }, { - "order": 982, + "order": 983, "name": "juanalbornoz32", "count": 1, "languages": 1 }, { - "order": 983, + "order": 984, "name": "cisneros2404", "count": 1, "languages": 1 }, { - "order": 984, + "order": 985, "name": "neftalyr", "count": 1, "languages": 1 }, { - "order": 985, + "order": 986, "name": "latorredev", "count": 1, "languages": 1 }, { - "order": 986, + "order": 987, "name": "osneidert", "count": 1, "languages": 1 }, { - "order": 987, + "order": 988, "name": "jrgranadosb", "count": 1, "languages": 1 }, { - "order": 988, + "order": 989, "name": "vicvilla30", "count": 1, "languages": 1 }, { - "order": 989, + "order": 990, "name": "carlosbb70", "count": 1, "languages": 1 }, { - "order": 990, + "order": 991, "name": "pablom-2015", "count": 1, "languages": 1 }, { - "order": 991, + "order": 992, "name": "xtinarita", "count": 1, "languages": 1 }, { - "order": 992, + "order": 993, "name": "wilsonbarrera", "count": 1, "languages": 1 }, { - "order": 993, + "order": 994, "name": "jereaguilar", "count": 1, "languages": 1 }, { - "order": 994, + "order": 995, "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { - "order": 995, + "order": 996, "name": "danidan1214", "count": 1, "languages": 1 }, { - "order": 996, + "order": 997, "name": "demegorash", "count": 1, "languages": 1 }, { - "order": 997, + "order": 998, "name": "cris10026", "count": 1, "languages": 1 }, { - "order": 998, + "order": 999, "name": "davidgramiro", "count": 1, "languages": 1 }, { - "order": 999, + "order": 1000, "name": "jgarteag", "count": 1, "languages": 1 }, { - "order": 1000, + "order": 1001, "name": "adcarret", "count": 1, "languages": 1 }, { - "order": 1001, + "order": 1002, "name": "natanaelzubiri", "count": 1, "languages": 1 }, { - "order": 1002, + "order": 1003, "name": "diegogomezcor4", "count": 1, "languages": 1 }, { - "order": 1003, + "order": 1004, "name": "perla-zg", "count": 1, "languages": 1 }, { - "order": 1004, + "order": 1005, "name": "neshurtado", "count": 1, "languages": 1 }, { - "order": 1005, + "order": 1006, "name": "marcelinoarias369", "count": 1, "languages": 1 }, { - "order": 1006, + "order": 1007, "name": "pushodev", "count": 1, "languages": 1 }, { - "order": 1007, + "order": 1008, "name": "sherkla12e", "count": 1, "languages": 1 }, { - "order": 1008, + "order": 1009, "name": "luisangeles20", "count": 1, "languages": 1 }, { - "order": 1009, + "order": 1010, "name": "johannmanrique", "count": 1, "languages": 1 }, { - "order": 1010, + "order": 1011, "name": "omar8102", "count": 1, "languages": 1 }, { - "order": 1011, + "order": 1012, "name": "eatsangels", "count": 1, "languages": 1 }, { - "order": 1012, + "order": 1013, "name": "alejarandro", "count": 1, "languages": 1 }, { - "order": 1013, + "order": 1014, "name": "tashidian", "count": 1, "languages": 1 }, { - "order": 1014, + "order": 1015, "name": "alejandro000", "count": 1, "languages": 1 }, { - "order": 1015, + "order": 1016, "name": "francgci", "count": 1, "languages": 1 }, { - "order": 1016, + "order": 1017, "name": "krisipo", "count": 1, "languages": 1 }, { - "order": 1017, + "order": 1018, "name": "jalonso76", "count": 1, "languages": 1 }, { - "order": 1018, + "order": 1019, "name": "leo18q", "count": 1, "languages": 1 }, { - "order": 1019, + "order": 1020, "name": "sofiamfernandez", "count": 1, "languages": 1 }, { - "order": 1020, + "order": 1021, "name": "jgregoris", "count": 1, "languages": 1 }, { - "order": 1021, + "order": 1022, "name": "josuelopez5", "count": 1, "languages": 1 }, { - "order": 1022, + "order": 1023, "name": "mrf1989", "count": 1, "languages": 1 }, { - "order": 1023, + "order": 1024, "name": "zeraven09", "count": 1, "languages": 1 }, { - "order": 1024, + "order": 1025, "name": "pr1de-23", "count": 1, "languages": 1 }, { - "order": 1025, + "order": 1026, "name": "kronoscba", "count": 1, "languages": 1 }, { - "order": 1026, + "order": 1027, "name": "erickcis", "count": 1, "languages": 1 }, { - "order": 1027, + "order": 1028, "name": "experthacker444", "count": 1, "languages": 1 }, { - "order": 1028, + "order": 1029, "name": "javirr4", "count": 1, "languages": 1 }, { - "order": 1029, + "order": 1030, "name": "ignacioskm", "count": 1, "languages": 1 }, { - "order": 1030, + "order": 1031, "name": "jchernandez87", "count": 1, "languages": 1 }, { - "order": 1031, + "order": 1032, "name": "ferngpv", "count": 1, "languages": 1 }, { - "order": 1032, + "order": 1033, "name": "kshields51", "count": 1, "languages": 1 }, { - "order": 1033, + "order": 1034, "name": "salas89", "count": 1, "languages": 1 }, { - "order": 1034, + "order": 1035, "name": "90dread", "count": 1, "languages": 1 }, { - "order": 1035, + "order": 1036, "name": "chema-dw", "count": 1, "languages": 1 }, { - "order": 1036, + "order": 1037, "name": "sbngl", "count": 1, "languages": 1 }, { - "order": 1037, + "order": 1038, "name": "m4xxdev", "count": 1, "languages": 1 }, { - "order": 1038, + "order": 1039, "name": "cristianvergaraf", "count": 1, "languages": 1 }, { - "order": 1039, + "order": 1040, "name": "lizzymaken", "count": 1, "languages": 1 }, { - "order": 1040, + "order": 1041, "name": "jandortiz", "count": 1, "languages": 1 }, { - "order": 1041, + "order": 1042, "name": "claudios1980", "count": 1, "languages": 1 }, { - "order": 1042, + "order": 1043, "name": "sergiovelayos", "count": 1, "languages": 1 }, { - "order": 1043, + "order": 1044, "name": "miguelangel861", "count": 1, "languages": 1 }, { - "order": 1044, + "order": 1045, "name": "marcosjarrin", "count": 1, "languages": 1 }, { - "order": 1045, + "order": 1046, "name": "jandresalvar", "count": 1, "languages": 1 }, { - "order": 1046, + "order": 1047, "name": "joferpg", "count": 1, "languages": 1 }, { - "order": 1047, + "order": 1048, "name": "jlrojano", "count": 1, "languages": 1 }, { - "order": 1048, + "order": 1049, "name": "ivanserran", "count": 1, "languages": 1 }, { - "order": 1049, + "order": 1050, "name": "dany3gs", "count": 1, "languages": 1 }, { - "order": 1050, + "order": 1051, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1051, + "order": 1052, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1052, + "order": 1053, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1053, + "order": 1054, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1054, + "order": 1055, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1055, + "order": 1056, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1056, + "order": 1057, "name": "bycris13", "count": 1, "languages": 1 }, { - "order": 1057, + "order": 1058, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1058, + "order": 1059, "name": "v1k770r", "count": 1, "languages": 1 }, { - "order": 1059, + "order": 1060, "name": "gianellannie", "count": 1, "languages": 1 }, { - "order": 1060, + "order": 1061, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1061, + "order": 1062, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1062, + "order": 1063, "name": "fredylopez01", "count": 1, "languages": 1 }, { - "order": 1063, + "order": 1064, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1064, + "order": 1065, "name": "lautimorales", "count": 1, "languages": 1 }, { - "order": 1065, + "order": 1066, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1066, + "order": 1067, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1067, + "order": 1068, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1068, + "order": 1069, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1069, + "order": 1070, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1070, + "order": 1071, "name": "adriansaint07", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1072, "name": "javiir", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1073, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1074, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1075, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1076, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1077, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1078, "name": "jrgim", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1079, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1080, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1081, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1082, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1083, "name": "robermejia", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1084, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1085, "name": "reneguzman7", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1086, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1087, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1088, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1089, "name": "queralesdev", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1090, "name": "dovinhoyos", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1091, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1092, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1093, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1094, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1095, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1095, + "order": 1096, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1096, + "order": 1097, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1098, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1099, "name": "antoniojzp86", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1100, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1101, "name": "zyn7e", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1102, "name": "diegopardomontero", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1103, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1104, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1105, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1106, "name": "clespinosa2024", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1107, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1108, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1109, "name": "cdryampi", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1110, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1111, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1112, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1113, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1114, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1115, "name": "rawc1nnamon", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1116, "name": "mvidab", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1117, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1117, + "order": 1118, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1118, + "order": 1119, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1120, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1121, "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1122, "name": "orzefox", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1123, "name": "acirdeveloper", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1124, "name": "emiliordev", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1125, "name": "sve-nnn", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1126, "name": "edgarmedranoa", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1127, "name": "rafapg93", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1128, "name": "vickalc", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1129, "name": "riukac", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1130, "name": "rusian69", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1131, "name": "wijimenezz", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1132, "name": "albertovf", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1133, "name": "markayala13", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1134, "name": "rocha30", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1135, "name": "righelch", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1136, "name": "deathbat00", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1137, "name": "nicoloboo02", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1138, "name": "sergiopq", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1139, "name": "angeloro", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1140, "name": "jony-english22", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1141, "name": "tilordqwerty", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1142, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1143, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1144, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1144, + "order": 1145, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1145, + "order": 1146, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1147, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1148, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1148, + "order": 1149, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1149, + "order": 1150, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1150, + "order": 1151, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1151, + "order": 1152, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1152, + "order": 1153, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1153, + "order": 1154, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1154, + "order": 1155, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1155, + "order": 1156, "name": "willypaz243", "count": 1, "languages": 1 }, { - "order": 1156, + "order": 1157, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1157, + "order": 1158, "name": "arperezinf", "count": 1, "languages": 1 }, { - "order": 1158, + "order": 1159, "name": "alecraft8", "count": 1, "languages": 1 }, { - "order": 1159, + "order": 1160, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1160, + "order": 1161, "name": "juampaweb", "count": 1, "languages": 1 }, { - "order": 1161, + "order": 1162, "name": "girngoma", "count": 1, "languages": 1 }, { - "order": 1162, + "order": 1163, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1163, + "order": 1164, "name": "ddaniel27", "count": 1, "languages": 1 }, { - "order": 1164, + "order": 1165, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1165, + "order": 1166, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1166, + "order": 1167, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1167, + "order": 1168, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1168, + "order": 1169, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1169, + "order": 1170, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1170, + "order": 1171, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1171, + "order": 1172, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1172, + "order": 1173, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1173, + "order": 1174, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1174, + "order": 1175, "name": "ouendinga", "count": 1, "languages": 1 }, { - "order": 1175, + "order": 1176, "name": "melonconyogurt", "count": 1, "languages": 1 From 216c1661dfb52b6c874cde7688b433e42fc4a09e Mon Sep 17 00:00:00 2001 From: 7R0N1X Date: Sat, 14 Sep 2024 20:05:39 -0500 Subject: [PATCH 238/539] #11 - JavaScript --- .../11 - MANEJO DE FICHEROS/javascript/7R0N1X.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Roadmap/11 - MANEJO DE FICHEROS/javascript/7R0N1X.js diff --git a/Roadmap/11 - MANEJO DE FICHEROS/javascript/7R0N1X.js b/Roadmap/11 - MANEJO DE FICHEROS/javascript/7R0N1X.js new file mode 100644 index 0000000000..e64c594294 --- /dev/null +++ b/Roadmap/11 - MANEJO DE FICHEROS/javascript/7R0N1X.js @@ -0,0 +1,15 @@ +const fs = require("fs") + +fs.appendFile('7R0N1X.txt', 'Nombre: Eduardo Molina \nEdad: 24 años \nLenguaje de programación favorito: JavaScript', (error) => { + if (error) throw error +}) + +fs.readFile('7R0N1X.txt', (err, data) => { + if (err) throw err + console.log(data.toString()) +}) + +fs.unlink('7R0N1X.txt', (err) => { + if (err) throw err + console.log('Archivo eliminado') +}) \ No newline at end of file From fc8cc4198d1af9c45f9849eb8e3255f4e4030c45 Mon Sep 17 00:00:00 2001 From: h4ckxel Date: Sat, 14 Sep 2024 20:08:14 -0600 Subject: [PATCH 239/539] #06 - Python --- Roadmap/06 - RECURSIVIDAD/python/h4ckxel.py | 29 +++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Roadmap/06 - RECURSIVIDAD/python/h4ckxel.py diff --git a/Roadmap/06 - RECURSIVIDAD/python/h4ckxel.py b/Roadmap/06 - RECURSIVIDAD/python/h4ckxel.py new file mode 100644 index 0000000000..3f4ffaa89a --- /dev/null +++ b/Roadmap/06 - RECURSIVIDAD/python/h4ckxel.py @@ -0,0 +1,29 @@ +def printNums (num) : + if num < 0: + return + print(num) + + printNums(num - 1) + +printNums(100) + +""" +EXTRA +""" +def factorial(n): + if n == 0 or n == 1: + result = 1 + elif n > 1: + result = n * factorial (n - 1) + return result + +def fibonacci(n): + if n < 2: + return n + else: + return fibonacci (n - 1) + fibonacci (n - 2) + +for n in range(10): + print(fibonacci(n)) + + From d08ad4b60e06d3cae9a7bf7a59f440ac40daeebc Mon Sep 17 00:00:00 2001 From: h4ckxel Date: Sat, 14 Sep 2024 20:09:38 -0600 Subject: [PATCH 240/539] #07 - Python --- Roadmap/07 - PILAS Y COLAS/python/h4ckxel.py | 117 +++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 Roadmap/07 - PILAS Y COLAS/python/h4ckxel.py diff --git a/Roadmap/07 - PILAS Y COLAS/python/h4ckxel.py b/Roadmap/07 - PILAS Y COLAS/python/h4ckxel.py new file mode 100644 index 0000000000..d85e6f856f --- /dev/null +++ b/Roadmap/07 - PILAS Y COLAS/python/h4ckxel.py @@ -0,0 +1,117 @@ +import os +import time +import unicodedata + +clear = lambda: os.system('cls') +clear() + +class Pila: + def __init__(self): + # Define elems list of the stack + self.items = [] + + def Add(self, elem): + # Add elem to the stack + if type(elem) == list: + self.items += elem + else: + self.items.append(elem) + + def Take(self): + # Return last elem from the stack + return self.items.pop() + +class Cola: + def __init__(self): + # Define elems list of the stack + self.items = [] + + def Add(self, elem): + # Add elem to the stack + if type(elem) == list: + self.items += elem + else: + self.items.append(elem) + + def Take(self): + # Return first elem from the queue + return self.items.pop(0) + +## EXTRA ## + +def elimina_tildes(cadena): + s = ''.join((c for c in unicodedata.normalize('NFD',cadena) if unicodedata.category(c) != 'Mn')) + return s + +def wait_and_clear(t): + time.sleep(t) + clear() + +# Program 1 (Navegador) +def navegador(): + pila = Pila() + + while True: + # Ask user what to do + t = 2 + print("Estamos navegando ¿Qué desea hacer ahora?") + userIn = input() + + if userIn.lower() == "end": + break + else: + #Look for command + command = [userIn.lower().find("adelante") > -1,elimina_tildes(userIn.lower()).find("atras") > -1] + + # Execution + if all(command): + # Both commands where sent, do nothing + print("Error, no se puede ir adelante y atrás al mismo tiempo") + + elif command[0]: + # ADELANTE + pila.Add(userIn[len("adelante")+1:]) + print("Avanzamos a " + pila.items[-1]) + t = 1.5 + + elif command[1]: + # ATRÁS + if not pila.items: + # pila is empty + print("No hay dirección anterior a la actual") + else: + # Return to previous adress + print("Regresamos a " + pila.Take()) + + else: + # No commands where sent + print('No hay comandos. Use adelante o atrás para navegar') + + wait_and_clear(t) + +# Program 2 (Cola impresión) +def cola_impresion(): + cola = Cola() + + # Ask user what to do + while True: + t = 1 + print("INSTRUCCIONES PARA LA IMPRESORA. ESCRIBA IMPRIMIR O AÑADA UN ELEMENTO A LA COLA") + userIn = input() + + # Execution + if userIn.lower() == "end": + break + elif userIn.lower().find("imprimir") > -1: + # Print + print("Procedemos a imprimir " + str(cola.Take()) + ". Quedan " + str(len(cola.items)) + " elementos en la cola de impresión.") + t = 2 + else: + # Add elem to queue + cola.Add(userIn) + print(userIn + " ha sido añadido a la cola de impresión") + + wait_and_clear(t) + +# navegador() +# cola_impresion() \ No newline at end of file From bebe81abee362aff93f6d5c0260438c32b12d863 Mon Sep 17 00:00:00 2001 From: h4ckxel Date: Sat, 14 Sep 2024 20:13:49 -0600 Subject: [PATCH 241/539] #08 - Java --- Roadmap/08 - CLASES/java/h4ckxel.java | 104 ++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 Roadmap/08 - CLASES/java/h4ckxel.java diff --git a/Roadmap/08 - CLASES/java/h4ckxel.java b/Roadmap/08 - CLASES/java/h4ckxel.java new file mode 100644 index 0000000000..91558a0477 --- /dev/null +++ b/Roadmap/08 - CLASES/java/h4ckxel.java @@ -0,0 +1,104 @@ +import java.util.ArrayList; +import java.util.List; + +class Persona { + private String nombre; + private int edad; + + public Persona(String nombre, int edad) { + this.nombre = nombre; + this.edad = edad; + } + + public void imprimirInformacion() { + System.out.println("Nombre: " + this.nombre); + System.out.println("Edad: " + this.edad); + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getNombre() { + return this.nombre; + } + + public void setEdad(int edad) { + this.edad = edad; + } + + public int getEdad() { + return this.edad; + } +} + +class Pila { + private List pila; + + public Pila(List pila) { + this.pila = pila; + } + + public void push(int dato) { + this.pila.add(dato); + } + + public int pop() { + int lastIndex = this.pila.size() - 1; + int dato = this.pila.get(lastIndex); + this.pila.remove(lastIndex); + return dato; + } + + public void imprimir() { + System.out.println(this.pila); + } +} + +class Cola { + private List cola; + + public Cola(List cola) { + this.cola = cola; + } + + public void enqueue(int dato) { + this.cola.add(dato); + } + + public int dequeue() { + return this.cola.remove(0); + } + + public void imprimir() { + System.out.println(this.cola); + } +} + +public class Main { + public static void main(String[] args) { + Persona person1 = new Persona("Juan", 30); + person1.imprimirInformacion(); + person1.setNombre("Pedro"); + person1.setEdad(25); + person1.imprimirInformacion(); + System.out.println(person1.getNombre()); + System.out.println(person1.getEdad()); + + Pila pila1 = new Pila(new ArrayList<>()); + pila1.push(1); + pila1.push(2); + pila1.push(3); + pila1.imprimir(); + System.out.println(pila1.pop()); + pila1.imprimir(); + + Cola cola1 = new Cola(new ArrayList<>()); + cola1.enqueue(1); + cola1.enqueue(2); + cola1.enqueue(3); + cola1.imprimir(); + System.out.println(cola1.dequeue()); + cola1.imprimir(); + } +} From fd8549ac15f37227d5c71112aa5a766088a6146f Mon Sep 17 00:00:00 2001 From: AndreiM Date: Sat, 14 Sep 2024 20:28:02 -0600 Subject: [PATCH 242/539] reto 03, primero del roadmap --- .../python/amedina_03.py | 222 ++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/python/amedina_03.py diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/python/amedina_03.py b/Roadmap/03 - ESTRUCTURAS DE DATOS/python/amedina_03.py new file mode 100644 index 0000000000..15f8ef1b5d --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/python/amedina_03.py @@ -0,0 +1,222 @@ +""" + * EJERCICIO: + * - Muestra ejemplos de creación de todas las estructuras soportadas por defecto + * en tu lenguaje. + * - Utiliza operaciones de inserción, borrado, actualización y ordenación. +""" +# Creando LISTA Usando Brackets +my_list: list = ["Brais", "Black", 4 , True, 3.1416, ["a", "b", "c", "d"]] + +# Creando LISTA Using the list() constructor to make a List: +thislist = list(("xerox", "tomas", "apple", "banana", "cherry")) # note the double round-brackets +print(thislist) +print(my_list) + +empty_list = list() # this is an empty list, no item in the list + +my_list.append("Castor") # Inserción +print(my_list) +my_list.remove("Brais") # Eliminación +print(my_list) +print(my_list[1]) # Acceso al segundo elemento, recuerda que empieza en cero +my_list[1] = "Cuervillo" # Actualización +print(my_list) + +thislist.sort() +print(thislist) + +lst = ['item1','item2','item3', 'item4', 'item5'] +f_item, s_item, t_item, *rest = lst # Hace un emparejamiento de cada nombre de estos con el correspondiente elemento de la lista + # El *rest crea una lista con los elementos restantes +print(f_item) # item1 +print(t_item) # item2 +print(s_item) # item3 +print(rest) # ['item4', 'item5'] +print(type(my_list)) + + +# Creando TUPLE con parentesis +my_tuple: tuple = ("Andrei", "Med", "@amed", "66") +print(my_tuple) + +# Creando TUPLE usando el constructor +thistuple = tuple(("apple", "banana", "cherry")) # note the double round-brackets +print(thistuple) + +print(my_tuple[1]) # Acceso +print(my_tuple[3]) +my_tuple = tuple(sorted(my_tuple)) # Ordenación +print(my_tuple) +print(type(my_tuple)) + + +# Creando un SET usando llaves {} +my_set: set = {"Brais", "Moure", "@mouredev", "36"} +print(my_set) + +# Creando un SET usando e constructor +thisset = set(("apple", "banana", "cherry")) # note the double round-brackets +print(thisset) + + +my_set.add("mouredev@gmail.com") # Inserción +print(my_set) +my_set.remove("Moure") # Eliminación +print(my_set) +my_set = set(sorted(my_set)) # No se puede ordenar +print(my_set) +print(type(my_set)) + +# Creando un Diccionario usando {} +my_dict: dict = { + "name": "Brais", + "surname": "Moure", + "alias": "@mouredev", + "age": "36" +} +print(my_dict) + +# Creating a Dictionary Using the dict() method to make a dictionary: +thisdict = dict(name = "John", age = 36, country = "Norway") +print(thisdict) + + +my_dict["email"] = "mouredev@gmail.com" # Inserción +print(my_dict) +del my_dict["surname"] # Eliminación +print(my_dict) +print(my_dict["name"]) # Acceso +my_dict["age"] = "37" # Actualización +print(my_dict) +my_dict = dict(sorted(my_dict.items())) # Ordenación +print(my_dict) +print(type(my_dict)) + + +# Diccionario anidado +child1 = { + "name" : "Emil", + "year" : 2004 +} +child2 = { + "name" : "Tobias", + "year" : 2007 +} +child3 = { + "name" : "Linus", + "year" : 2011 +} + +myfamily = { + "child1" : child1, + "child2" : child2, + "child3" : child3 +} + +print(child1) +print(child2) +print(child3) +print(myfamily) + + +""" +* DIFICULTAD EXTRA (opcional): + * Crea una agenda de contactos por terminal. + * - Debes implementar funcionalidades de búsqueda, inserción, actualización + * y eliminación de contactos. + * - Cada contacto debe tener un nombre y un número de teléfono. + * - El programa solicita en primer lugar cuál es la operación que se quiere realizar, + * y a continuación los datos necesarios para llevarla a cabo. + * - El programa no puede dejar introducir números de teléfono no númericos y con más + * de 11 dígitos (o el número de dígitos que quieras). + * - También se debe proponer una operación de finalización del programa. +""" + +global agenda +agenda = {} + +def searching(): + print("\nBuscando contactoF") + nombre = input("Dime el nombre a Buscar: ") + if nombre in agenda.keys(): + print(f"Encontre el nombre {nombre} solicitado y su teléfono es {agenda[nombre]}\n") + + else: + print(f"No existe el contacto {nombre}\n") + + +def adding(): + print("\nAñadiendo contactoF") + nombre = input("Dime el nombre del nuevo contacto: ") + if nombre in agenda.keys(): + print(f"Ya existe un contacto con el nombre -> {nombre} y telefono {agenda[nombre]}\n\n") + + else: + # print(f"Nombre no Duplicado ============> nombre = {nombre}") + tel = input("Introduce el número telefónico del contacto: ") + if tel.isdigit() and len(tel) > 0 and len(tel) <= 11: + agenda[nombre] = tel + print(f"Se añadió nuevo contacto nombre: {nombre} y telefono {agenda[nombre]}\n\n") + + else: + print("Debes introducir un teléfono solo con números y un máximo de 11 dígitos.\n\n") + +def updating(): + print("Modificar contactoF") + nombre = input("Dime el nombre del contacto que deseas actualizar: ") + if nombre in agenda.keys(): + tel = input("Dime el nuevo telefono para este contacto: ") + agenda[nombre] = tel + print(f"Se actualizó el contacto {nombre} con el telefono {agenda[nombre]}\n\n") + else: + print(f"No existe el contacto {nombre}\n") + +def deleting(): + print("Eliminando contactoF") + nombre = input("Dime el nombre del contacto que deseas eliminar: ") + if nombre in agenda.keys(): + agenda.pop(nombre) + print(f"Se eliminó el contacto {nombre}") + else: + print(f"No existe el contacto {nombre}\n") + +def my_agenda(): + + operacion = "0" + + while operacion != "5": + print("1. Buscar Contacto") + print("2. Añadir Nuevo Contacto") + print("3. Modificar Contacto") + print("4. Eliminar Contacto") + print("p. Genrra Lista de Contactos") + print("5. Terminar") + + operacion = input("Seleccione la operación deseada: ") + + match operacion: + case "1": + searching() + + case "2": + adding() + + case "3": + updating() + + case "4": + deleting() + + case "p": + for x, y in agenda.items(): + print(x, y) + + case "5": + print("Terminar") + break + + case _: + print("Opcion seleccionada NO válida.") + +my_agenda() + From 3281bd2a16d9e53f115c84926ea0428f20250876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Andr=C3=A9s=20Rojas=20Mu=C3=B1oz?= Date: Sat, 14 Sep 2024 21:43:44 -0500 Subject: [PATCH 243/539] #00 - Python --- .../python/idiegorojas.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/idiegorojas.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/idiegorojas.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/idiegorojas.py new file mode 100644 index 0000000000..f9901ddeb6 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/idiegorojas.py @@ -0,0 +1,26 @@ +# https://www.python.org/ + +# Comentario en una linea + +""" +Esto tambien +es un +comentario +""" + +''' +Esto tambien +es un +comentario +''' + +variable = 'Almacena un valor' + +MY_CONSTANT = 'Mi Constante' + +str = 'Texto' +int = 12 +float = 12.5 +bool = True + +print('¡Hola Python!') \ No newline at end of file From df7292f9044504c67c48c440f59cde6ef3e00b15 Mon Sep 17 00:00:00 2001 From: GordoMaster Date: Sat, 14 Sep 2024 22:47:19 -0400 Subject: [PATCH 244/539] #21-Python --- Roadmap/21 - CALLBACKS/python/Gordo-Master.py | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Roadmap/21 - CALLBACKS/python/Gordo-Master.py diff --git a/Roadmap/21 - CALLBACKS/python/Gordo-Master.py b/Roadmap/21 - CALLBACKS/python/Gordo-Master.py new file mode 100644 index 0000000000..aa1cd0ccce --- /dev/null +++ b/Roadmap/21 - CALLBACKS/python/Gordo-Master.py @@ -0,0 +1,55 @@ +# 21 - Callbacks + +import asyncio +import random + +def end_process(): + print("Proceso terminado.") + +def count_number(num, fun): + for i in range(num): + print(i+1) + fun() + +count_number(6,end_process) + +def greeting_process(callback, name): + print("Ejecutando el proceso de saludo....") + callback(name) + +def greet_callback(name: str): + print(f"Hola {name}!") + +greeting_process(greet_callback, "Gordo Master") + +""" +Ejercicio Extra +""" + +async def confir(name): + print(f"Pedido de: {name} confirmado") + +async def order_ok(name): + print(f"Pedido de: {name} esta listo") + +async def delivered(name): + print(f"Pedido de: {name} fue entregado") + +async def order(name,confir_callback,order_ok_callback,delivered_callback): + await confir_callback(name) + await asyncio.sleep(random.randint(1,10)) + + await order_ok_callback(name) + await asyncio.sleep(random.randint(1,10)) + + await delivered_callback(name) + +async def main(): + await asyncio.gather( + order("Hamburguesa",confir,order_ok,delivered), + order("Papas fritas",confir,order_ok,delivered), + order("Gaseosa",confir,order_ok,delivered), + order("Helado",confir,order_ok,delivered) + ) + +asyncio.run(main()) \ No newline at end of file From f9a8f3f053083e5ea29935714420a794cce5e458 Mon Sep 17 00:00:00 2001 From: AndreiM Date: Sat, 14 Sep 2024 20:52:08 -0600 Subject: [PATCH 245/539] reto 03, primero del roadmap --- .../python/{amedina_03.py => pwrxman.py} | 1 - 1 file changed, 1 deletion(-) rename Roadmap/03 - ESTRUCTURAS DE DATOS/python/{amedina_03.py => pwrxman.py} (99%) diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/python/amedina_03.py b/Roadmap/03 - ESTRUCTURAS DE DATOS/python/pwrxman.py similarity index 99% rename from Roadmap/03 - ESTRUCTURAS DE DATOS/python/amedina_03.py rename to Roadmap/03 - ESTRUCTURAS DE DATOS/python/pwrxman.py index 15f8ef1b5d..401be79626 100644 --- a/Roadmap/03 - ESTRUCTURAS DE DATOS/python/amedina_03.py +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/python/pwrxman.py @@ -132,7 +132,6 @@ * - También se debe proponer una operación de finalización del programa. """ -global agenda agenda = {} def searching(): From 9f75b46f6d19b27e879e7cd9ded30aa7f781a887 Mon Sep 17 00:00:00 2001 From: Erysnell Gonzalez Perez <118245971+Erysnell@users.noreply.github.com> Date: Sat, 14 Sep 2024 23:41:10 -0400 Subject: [PATCH 246/539] #03-javascript --- .../javascript/Erysnell.js | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/javascript/Erysnell.js diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/javascript/Erysnell.js b/Roadmap/02 - FUNCIONES Y ALCANCE/javascript/Erysnell.js new file mode 100644 index 0000000000..9fc878b289 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/javascript/Erysnell.js @@ -0,0 +1,80 @@ +// Función sin parámetros ni retorno +function sinParametros() { + console.log("Esta función no tiene parámetros ni devuelve nada"); +} + +// Función con un parámetro y sin retorno +function conUnPar(parametro) { + const nombre = "Juan"; + console.log(`Hola, ${nombre}`); +} + +// Función con múltiples parámetros y sin retorno +function conMultiplesParams(a, b, c) { + console.log(`Recibí: ${a}, ${b}, ${c}`); +} + +// Función con parámetros y retorno +function suma(a, b) { + return a + b; +} + +// Función anidada +function funcionAnidata() { + function subFuncion() { + console.log("Soy una función anidada"); + } + console.log("Estoy en la función principal"); + subFuncion(); +} + + +let globalVar = "Esta es una variable global"; + +// Función que usa la variable global +function usarVariableGlobal() { + globalVar += " modificada"; + console.log(globalVar); +} + +sinParametros(); +conUnPar("Carlos"); +conMultiplesParams(1, 2, 3); +console.log(suma(5, 7)); +funcionAnidata(); +usarVariableGlobal(); + + +const localVar = "Esta es una variable local"; + +// Función que usa la variable local +function usarVariableLocal() { + console.log(localVar); +} +usarVariableLocal(); // Esto causaría un error porque localVar está fuera del alcance + + +// Ejercicio Extra +function imprimirMultiplos(texto1, texto2) { + let contador = 0; + + for (let i = 1; i <= 100; i++) { + if (i % 3 === 0 && i % 5 !== 0) { + console.log(texto1); + } else if (i % 5 === 0 && i % 3 !== 0) { + console.log(texto2); + } else if (i % 3 === 0 && i % 5 === 0) { + console.log(`${texto1}${texto2}`); + } else { + console.log(i); + } + + contador++; + } + + return contador; +} + +const resultado = imprimirMultiplos("Tres", "Cinco"); +console.log(`\nSe imprimieron ${resultado} números.`); + From 0174782b87d4fe61d3ae474293b11ad225cde895 Mon Sep 17 00:00:00 2001 From: h4ckxel Date: Sun, 15 Sep 2024 00:04:47 -0600 Subject: [PATCH 247/539] #08 - Java --- Roadmap/08 - CLASES/java/h4ckxel.java | 104 ++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 Roadmap/08 - CLASES/java/h4ckxel.java diff --git a/Roadmap/08 - CLASES/java/h4ckxel.java b/Roadmap/08 - CLASES/java/h4ckxel.java new file mode 100644 index 0000000000..91558a0477 --- /dev/null +++ b/Roadmap/08 - CLASES/java/h4ckxel.java @@ -0,0 +1,104 @@ +import java.util.ArrayList; +import java.util.List; + +class Persona { + private String nombre; + private int edad; + + public Persona(String nombre, int edad) { + this.nombre = nombre; + this.edad = edad; + } + + public void imprimirInformacion() { + System.out.println("Nombre: " + this.nombre); + System.out.println("Edad: " + this.edad); + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getNombre() { + return this.nombre; + } + + public void setEdad(int edad) { + this.edad = edad; + } + + public int getEdad() { + return this.edad; + } +} + +class Pila { + private List pila; + + public Pila(List pila) { + this.pila = pila; + } + + public void push(int dato) { + this.pila.add(dato); + } + + public int pop() { + int lastIndex = this.pila.size() - 1; + int dato = this.pila.get(lastIndex); + this.pila.remove(lastIndex); + return dato; + } + + public void imprimir() { + System.out.println(this.pila); + } +} + +class Cola { + private List cola; + + public Cola(List cola) { + this.cola = cola; + } + + public void enqueue(int dato) { + this.cola.add(dato); + } + + public int dequeue() { + return this.cola.remove(0); + } + + public void imprimir() { + System.out.println(this.cola); + } +} + +public class Main { + public static void main(String[] args) { + Persona person1 = new Persona("Juan", 30); + person1.imprimirInformacion(); + person1.setNombre("Pedro"); + person1.setEdad(25); + person1.imprimirInformacion(); + System.out.println(person1.getNombre()); + System.out.println(person1.getEdad()); + + Pila pila1 = new Pila(new ArrayList<>()); + pila1.push(1); + pila1.push(2); + pila1.push(3); + pila1.imprimir(); + System.out.println(pila1.pop()); + pila1.imprimir(); + + Cola cola1 = new Cola(new ArrayList<>()); + cola1.enqueue(1); + cola1.enqueue(2); + cola1.enqueue(3); + cola1.imprimir(); + System.out.println(cola1.dequeue()); + cola1.imprimir(); + } +} From 72129f3a3131f0a77a55595a29e81cd4a9741ea4 Mon Sep 17 00:00:00 2001 From: h4ckxel Date: Sun, 15 Sep 2024 00:06:44 -0600 Subject: [PATCH 248/539] #09 - Java --- Roadmap/09 - HERENCIA/java/h4ckxel.java | 191 ++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 Roadmap/09 - HERENCIA/java/h4ckxel.java diff --git a/Roadmap/09 - HERENCIA/java/h4ckxel.java b/Roadmap/09 - HERENCIA/java/h4ckxel.java new file mode 100644 index 0000000000..e43bca02f5 --- /dev/null +++ b/Roadmap/09 - HERENCIA/java/h4ckxel.java @@ -0,0 +1,191 @@ +package ejercicio09; + +import java.util.ArrayList; +import java.util.List; + +/* +* EJERCICIO: + * Explora el concepto de herencia según tu lenguaje. Crea un ejemplo que + * implemente una superclase Animal y un par de subclases Perro y Gato, + * junto con una función que sirva para imprimir el sonido que emite cada Animal. + */ +public class JesusWay69 { + + public static void main(String[] args) { + Perro perro = new Perro(); + Gato gato = new Gato(); + Vaca vaca = new Vaca(); + Gerente gerente = new Gerente(); + GerenteProyectos gerenteproyectos = new GerenteProyectos(); + Programador programador = new Programador(); + + perro.print(perro.animal, perro.sonido); + gato.print(gato.sonido, gato.animal); + vaca.print(vaca.sonido, vaca.animal); + System.out.println(""); + + String[] nombres = {"Carlos", "Ana", "Francisco", "Paula", "Felipe", "Ainhoa", "Jesus", "Raquel", "Álvaro"}; + List empleadosGerencia = new ArrayList<>(); + List empleadosProyectos = new ArrayList<>(); + for (int i = 1; i <= nombres.length; i++) { + if (i > 2 && i <= nombres.length) { + empleadosGerencia.add(nombres[i - 1]); + } + if (i > 5 && i <= nombres.length) { + empleadosProyectos.add(nombres[i - 1]); + + } + } + + for (int i = 1; i <= nombres.length; i++) { + if (i > 0 && i < 3) { + gerente.print(i, nombres[i - 1], gerente.cargo); + gerente.print(empleadosGerencia); + } else if (i > 2 && i < 6) { + gerenteproyectos.print(i, nombres[i - 1], gerenteproyectos.cargo); + gerenteproyectos.print(empleadosProyectos); + + } else { + programador.print(i, nombres[i - 1], programador.cargo); + + } + + } + + } + +} + +abstract class Animal { + + public String animal; + public String sonido; + private String articulo; + + public Animal() { + + articulo = "El"; + } + + protected void print(String sonido, String animal) { + if (animal.charAt(animal.length() - 1) == 'a') { + articulo = "La"; + } + System.out.println(articulo + " " + animal + " " + sonido); + + } + +} + +class Perro extends Animal { + + public Perro() { + this.animal = "perro"; + this.sonido = "ladra"; + } + + @Override + public void print(String sonido, String animal) { + super.print("ladra", "perro"); + } + +} + +class Gato extends Animal { + + public Gato() { + this.animal = "gato"; + this.sonido = "maulla"; + } +} + +class Vaca extends Animal { + + public Vaca() { + this.animal = "vaca"; + this.sonido = "muge"; + } +} + + +/* + * DIFICULTAD EXTRA (opcional): + * Implementa la jerarquía de una empresa de desarrollo formada por Empleados que + * pueden ser Gerentes, Gerentes de Proyectos o Programadores. + * Cada empleado tiene un identificador y un nombre. + * Dependiendo de su labor, tienen propiedades y funciones exclusivas de su + * actividad, y almacenan los empleados a su cargo. + */ +abstract class Empleado { + + public String finanzas = "NO"; + public String compras = "NO"; + public String proyectos = "NO"; + public String organizacion = "NO"; + public String programacion = "NO"; + public String despliegue = "NO"; + public int id; + public String nombre; + public String cargo; + + public Empleado() { + + } + + protected Empleado(int id, String nombre) { + this.id = id; + this.nombre = nombre; + } + + protected Empleado(int id, String nombre, String cargo) { + this.id = id; + this.nombre = nombre; + this.cargo = cargo; + } + + protected void print(int id, String nombre, String cargo) { + System.out.println("\nID: " + id + "\nnombre: " + nombre + "\ncargo: " + cargo + "\nHace finanzas? " + finanzas + + "\nHace compras? " + compras + "\nHace proyectos? " + proyectos + "\nOrganiza el trabajo? " + organizacion + + "\nPica código? " + programacion + "\nDespliega programas? " + despliegue); + } + + protected void print(List listaEmpleados) { + + System.out.print("Empleados a su cargo: "); + for (int i = 0; i < listaEmpleados.size() - 1; ++i) { + System.out.print(listaEmpleados.get(i) + ((i != listaEmpleados.size() - 2) ? " , " : " y ")); + } + System.out.println(listaEmpleados.get(listaEmpleados.size() - 1)); + } + +} + +class Gerente extends Empleado { + + protected Gerente() { + this.compras = "SI"; + this.finanzas = "SI"; + this.cargo = "Gerente"; + } + +} + +class GerenteProyectos extends Empleado { + + protected GerenteProyectos() { + this.organizacion = "SI"; + this.proyectos = "SI"; + this.cargo = "Gerente de proyectos"; + } + +} + +class Programador extends Empleado { + + protected Programador() { + this.programacion = "SI"; + this.despliegue = "SI"; + this.cargo = "Programador"; + } + +} From 581100632650280f5fa0100bd582c62c5057f4dd Mon Sep 17 00:00:00 2001 From: h4ckxel Date: Sun, 15 Sep 2024 00:08:43 -0600 Subject: [PATCH 249/539] 08 - Java --- Roadmap/08 - CLASES/java/h4ckxel.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Roadmap/08 - CLASES/java/h4ckxel.java b/Roadmap/08 - CLASES/java/h4ckxel.java index 91558a0477..873e613afe 100644 --- a/Roadmap/08 - CLASES/java/h4ckxel.java +++ b/Roadmap/08 - CLASES/java/h4ckxel.java @@ -1,6 +1,7 @@ import java.util.ArrayList; import java.util.List; + class Persona { private String nombre; private int edad; From fb958d3de5a867485a2fe54c35897dead033374e Mon Sep 17 00:00:00 2001 From: h4ckxel Date: Sun, 15 Sep 2024 00:14:27 -0600 Subject: [PATCH 250/539] #10 - Python --- Roadmap/10 - EXCEPCIONES/python/h4ckxel.py | 90 ++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 Roadmap/10 - EXCEPCIONES/python/h4ckxel.py diff --git a/Roadmap/10 - EXCEPCIONES/python/h4ckxel.py b/Roadmap/10 - EXCEPCIONES/python/h4ckxel.py new file mode 100644 index 0000000000..51b7919bc3 --- /dev/null +++ b/Roadmap/10 - EXCEPCIONES/python/h4ckxel.py @@ -0,0 +1,90 @@ +''' +/* + * EJERCICIO: + * Explora el concepto de manejo de excepciones según tu lenguaje. + * Fuerza un error en tu código, captura el error, imprime dicho error + * y evita que el programa se detenga de manera inesperada. + * Prueba a dividir "10/0" o acceder a un índice no existente + * de un listado para intentar provocar un error. + * + * DIFICULTAD EXTRA (opcional): + * Crea una función que sea capaz de procesar parámetros, pero que también + * pueda lanzar 3 tipos diferentes de excepciones (una de ellas tiene que + * corresponderse con un tipo de excepción creada por nosotros de manera + * personalizada, y debe ser lanzada de manera manual) en caso de error. + * - Captura todas las excepciones desde el lugar donde llamas a la función. + * - Imprime el tipo de error. + * - Imprime si no se ha producido ningún error. + * - Imprime que la ejecución ha finalizado. + */ +''' + +#Declaramos las variables necesarias +numero1 = 10 +numero2 = 0 +listado= ["Hola","Python","Alexdevrep","Mundo"] + +#División + +def dividir(numero1, numero2): + try: + resultado = numero1 / numero2 + print(resultado) + + except ZeroDivisionError: # En este bloque indicamos el error que queremos que capture el programa + print("No se puede dividir un número por cero") + + finally: + print("Finalizando el programa") + +dividir(numero1, numero2) + +#Listado + +def iterarLista(): + try: + #Intentamos acceder a un índice que no existe + print(listado[6]) + except: + print("Índice no existente en la lista") + finally: + print("Programa finalizado") + +iterarLista() + +#Dificultad EXTRA + +#Vamos a crear una función que multiplique un número natural de una cifra por 5 + +class NoneException(Exception): + pass #Creamos una excepcion personalizada + +def multiplo(numero3): + try: + + if numero3 is None: + raise NoneException("Es necesario dar un número para multiplicar") #Generamos manualmente la excepcion con raise + elif 9 < numero3 < 100: + raise Exception("El número tiene 2 cifras.") + elif numero3 < 0: + raise ValueError("El número es negativo, no se puede multiplicar.") + else: + producto = 5 * numero3 + print(producto) + + except ValueError as e: + print(f'Error: {e}') + except NoneException as e: + print(f'Error: {e}') + except Exception as e: + print(f"Error: {e}") + + finally: + print("Cerrando el programa") + + +entrada = input("Por favor ingrese el número a multiplicar: ") +numero3= int(entrada) if entrada else None +multiplo(numero3) + + From b5842a87ac0c34500dcf6df29a72eb5453672fbd Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sun, 15 Sep 2024 09:07:09 +0200 Subject: [PATCH 251/539] #04 java --- .../java/eulogioep.java | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Roadmap/04 - CADENAS DE CARACTERES/java/eulogioep.java diff --git a/Roadmap/04 - CADENAS DE CARACTERES/java/eulogioep.java b/Roadmap/04 - CADENAS DE CARACTERES/java/eulogioep.java new file mode 100644 index 0000000000..88c9187483 --- /dev/null +++ b/Roadmap/04 - CADENAS DE CARACTERES/java/eulogioep.java @@ -0,0 +1,99 @@ +public class eulogioep { + public static void main(String[] args) { + // Declaración de una cadena + String texto = "Hola, mundo!"; + + // 1. Acceso a caracteres específicos + char primerCaracter = texto.charAt(0); + System.out.println("1. Primer carácter: " + primerCaracter); + + // 2. Subcadenas + String subcadena = texto.substring(0, 4); + System.out.println("2. Subcadena: " + subcadena); + + // 3. Longitud + int longitud = texto.length(); + System.out.println("3. Longitud: " + longitud); + + // 4. Concatenación + String otraCadena = " Bienvenidos"; + String concatenacion = texto.concat(otraCadena); + System.out.println("4. Concatenación: " + concatenacion); + + // 5. Repetición + String repetida = texto.repeat(3); + System.out.println("5. Repetición: " + repetida); + + // 6. Recorrido + System.out.print("6. Recorrido: "); + for (char c : texto.toCharArray()) { + System.out.print(c + " "); + } + System.out.println(); + + // 7. Conversión a mayúsculas y minúsculas + System.out.println("7. Mayúsculas: " + texto.toUpperCase()); + System.out.println(" Minúsculas: " + texto.toLowerCase()); + + // 8. Reemplazo + String reemplazo = texto.replace("mundo", "Java"); + System.out.println("8. Reemplazo: " + reemplazo); + + // 9. División + String[] palabras = texto.split(", "); + System.out.println("9. División: " + String.join(" | ", palabras)); + + // 10. Unión + String[] arrayPalabras = {"Java", "es", "genial"}; + String union = String.join(" ", arrayPalabras); + System.out.println("10. Unión: " + union); + + // 11. Interpolación (en Java se usa concat o StringBuilder) + String nombre = "Alice"; + int edad = 30; + String interpolacion = "Me llamo " + nombre + " y tengo " + edad + " años."; + System.out.println("11. Interpolación: " + interpolacion); + + // 12. Verificación + boolean empiezaCon = texto.startsWith("Hola"); + boolean terminaCon = texto.endsWith("!"); + boolean contiene = texto.contains("mundo"); + System.out.println("12. Empieza con 'Hola': " + empiezaCon); + System.out.println(" Termina con '!': " + terminaCon); + System.out.println(" Contiene 'mundo': " + contiene); + + // DIFICULTAD EXTRA + System.out.println("\nDIFICULTAD EXTRA:"); + String palabra1 = "amor"; + String palabra2 = "roma"; + + System.out.println("Palabra 1: " + palabra1); + System.out.println("Palabra 2: " + palabra2); + System.out.println("¿Son palíndromos? " + esPalindromo(palabra1) + ", " + esPalindromo(palabra2)); + System.out.println("¿Son anagramas? " + sonAnagramas(palabra1, palabra2)); + System.out.println("¿Son isogramas? " + esIsograma(palabra1) + ", " + esIsograma(palabra2)); + } + + // Método para verificar si una palabra es un palíndromo + public static boolean esPalindromo(String palabra) { + String reversa = new StringBuilder(palabra).reverse().toString(); + return palabra.equalsIgnoreCase(reversa); + } + + // Método para verificar si dos palabras son anagramas + public static boolean sonAnagramas(String palabra1, String palabra2) { + if (palabra1.length() != palabra2.length()) { + return false; + } + char[] chars1 = palabra1.toLowerCase().toCharArray(); + char[] chars2 = palabra2.toLowerCase().toCharArray(); + java.util.Arrays.sort(chars1); + java.util.Arrays.sort(chars2); + return java.util.Arrays.equals(chars1, chars2); + } + + // Método para verificar si una palabra es un isograma + public static boolean esIsograma(String palabra) { + return palabra.length() == palabra.toLowerCase().chars().distinct().count(); + } +} \ No newline at end of file From 4a12e976f20d2f43f355e2ed618a45e2071fa087 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sun, 15 Sep 2024 09:08:14 +0200 Subject: [PATCH 252/539] #04 javascript --- .../javascript/eulogioep.js | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 Roadmap/04 - CADENAS DE CARACTERES/javascript/eulogioep.js diff --git a/Roadmap/04 - CADENAS DE CARACTERES/javascript/eulogioep.js b/Roadmap/04 - CADENAS DE CARACTERES/javascript/eulogioep.js new file mode 100644 index 0000000000..e2e1ebedae --- /dev/null +++ b/Roadmap/04 - CADENAS DE CARACTERES/javascript/eulogioep.js @@ -0,0 +1,92 @@ +// Operaciones con cadenas en JavaScript + +// Declaración de una cadena +const texto = "Hola, mundo!"; + +console.log("Texto original:", texto); + +// 1. Acceso a caracteres específicos +console.log("1. Primer carácter:", texto[0]); + +// 2. Subcadenas +console.log("2. Subcadena:", texto.substring(0, 4)); + +// 3. Longitud +console.log("3. Longitud:", texto.length); + +// 4. Concatenación +const otraCadena = " Bienvenidos"; +console.log("4. Concatenación:", texto + otraCadena); + +// 5. Repetición +console.log("5. Repetición:", texto.repeat(3)); + +// 6. Recorrido +console.log("6. Recorrido:"); +for (let char of texto) { + console.log(char); +} + +// 7. Conversión a mayúsculas y minúsculas +console.log("7. Mayúsculas:", texto.toUpperCase()); +console.log(" Minúsculas:", texto.toLowerCase()); + +// 8. Reemplazo +console.log("8. Reemplazo:", texto.replace("mundo", "JavaScript")); + +// 9. División +console.log("9. División:", texto.split(", ")); + +// 10. Unión +const arrayPalabras = ["JavaScript", "es", "genial"]; +console.log("10. Unión:", arrayPalabras.join(" ")); + +// 11. Interpolación (template literals en JavaScript) +const nombre = "Alice"; +const edad = 30; +console.log(`11. Interpolación: Me llamo ${nombre} y tengo ${edad} años.`); + +// 12. Verificación +console.log("12. Empieza con 'Hola':", texto.startsWith("Hola")); +console.log(" Termina con '!':", texto.endsWith("!")); +console.log(" Contiene 'mundo':", texto.includes("mundo")); + +// 13. Recorte de espacios +const textoConEspacios = " Hola Mundo "; +console.log("13. Recorte de espacios:", textoConEspacios.trim()); + +// 14. Extracción de subcadenas +console.log("14. Extracción (slice):", texto.slice(0, 4)); + +// 15. Búsqueda de índice +console.log("15. Índice de 'mundo':", texto.indexOf("mundo")); + +// DIFICULTAD EXTRA +console.log("\nDIFICULTAD EXTRA:"); + +const palabra1 = "amor"; +const palabra2 = "roma"; + +console.log("Palabra 1:", palabra1); +console.log("Palabra 2:", palabra2); + +// Función para verificar si una palabra es un palíndromo +function esPalindromo(palabra) { + return palabra === palabra.split('').reverse().join(''); +} + +// Función para verificar si dos palabras son anagramas +function sonAnagramas(palabra1, palabra2) { + return palabra1.toLowerCase().split('').sort().join('') === + palabra2.toLowerCase().split('').sort().join(''); +} + +// Función para verificar si una palabra es un isograma +function esIsograma(palabra) { + return new Set(palabra.toLowerCase()).size === palabra.length; +} + +console.log("¿Son palíndromos?", + esPalindromo(palabra1), esPalindromo(palabra2)); +console.log("¿Son anagramas?", sonAnagramas(palabra1, palabra2)); +console.log("¿Son isogramas?", esIsograma(palabra1), esIsograma(palabra2)); \ No newline at end of file From 1dedbb9fc4f3d7a1af5a6cd8924a363cdf0b947d Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sun, 15 Sep 2024 09:08:56 +0200 Subject: [PATCH 253/539] #04 php --- .../php/eulogioep.php | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Roadmap/04 - CADENAS DE CARACTERES/php/eulogioep.php diff --git a/Roadmap/04 - CADENAS DE CARACTERES/php/eulogioep.php b/Roadmap/04 - CADENAS DE CARACTERES/php/eulogioep.php new file mode 100644 index 0000000000..f603c48253 --- /dev/null +++ b/Roadmap/04 - CADENAS DE CARACTERES/php/eulogioep.php @@ -0,0 +1,100 @@ + \ No newline at end of file From 002ef957e459b42af0779dcd9d6b095da235098c Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sun, 15 Sep 2024 09:09:50 +0200 Subject: [PATCH 254/539] #04 typescript --- .../typescript/eulogioep.ts | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 Roadmap/04 - CADENAS DE CARACTERES/typescript/eulogioep.ts diff --git a/Roadmap/04 - CADENAS DE CARACTERES/typescript/eulogioep.ts b/Roadmap/04 - CADENAS DE CARACTERES/typescript/eulogioep.ts new file mode 100644 index 0000000000..cafe53f5fd --- /dev/null +++ b/Roadmap/04 - CADENAS DE CARACTERES/typescript/eulogioep.ts @@ -0,0 +1,92 @@ +// Operaciones con cadenas en TypeScript + +// Declaración de una cadena +const texto: string = "Hola, mundo!"; + +console.log("Texto original:", texto); + +// 1. Acceso a caracteres específicos +console.log("1. Primer carácter:", texto[0]); + +// 2. Subcadenas +console.log("2. Subcadena:", texto.substring(0, 4)); + +// 3. Longitud +console.log("3. Longitud:", texto.length); + +// 4. Concatenación +const otraCadena: string = " Bienvenidos"; +console.log("4. Concatenación:", texto.concat(otraCadena)); + +// 5. Repetición +console.log("5. Repetición:", texto.repeat(3)); + +// 6. Recorrido +console.log("6. Recorrido:"); +for (let char of texto) { + console.log(char); +} + +// 7. Conversión a mayúsculas y minúsculas +console.log("7. Mayúsculas:", texto.toUpperCase()); +console.log(" Minúsculas:", texto.toLowerCase()); + +// 8. Reemplazo +console.log("8. Reemplazo:", texto.replace("mundo", "TypeScript")); + +// 9. División +console.log("9. División:", texto.split(", ")); + +// 10. Unión +const arrayPalabras: string[] = ["TypeScript", "es", "genial"]; +console.log("10. Unión:", arrayPalabras.join(" ")); + +// 11. Interpolación (template literals en TypeScript) +const nombre: string = "Alice"; +const edad: number = 30; +console.log(`11. Interpolación: Me llamo ${nombre} y tengo ${edad} años.`); + +// 12. Verificación +console.log("12. Empieza con 'Hola':", texto.startsWith("Hola")); +console.log(" Termina con '!':", texto.endsWith("!")); +console.log(" Contiene 'mundo':", texto.includes("mundo")); + +// 13. Recorte de espacios +const textoConEspacios: string = " Hola Mundo "; +console.log("13. Recorte de espacios:", textoConEspacios.trim()); + +// 14. Extracción de subcadenas +console.log("14. Extracción (slice):", texto.slice(0, 4)); + +// 15. Búsqueda de índice +console.log("15. Índice de 'mundo':", texto.indexOf("mundo")); + +// DIFICULTAD EXTRA +console.log("\nDIFICULTAD EXTRA:"); + +const palabra1: string = "amor"; +const palabra2: string = "roma"; + +console.log("Palabra 1:", palabra1); +console.log("Palabra 2:", palabra2); + +// Función para verificar si una palabra es un palíndromo +function esPalindromo(palabra: string): boolean { + return palabra === palabra.split('').reverse().join(''); +} + +// Función para verificar si dos palabras son anagramas +function sonAnagramas(palabra1: string, palabra2: string): boolean { + return palabra1.toLowerCase().split('').sort().join('') === + palabra2.toLowerCase().split('').sort().join(''); +} + +// Función para verificar si una palabra es un isograma +function esIsograma(palabra: string): boolean { + return new Set(palabra.toLowerCase()).size === palabra.length; +} + +console.log("¿Son palíndromos?", + esPalindromo(palabra1), esPalindromo(palabra2)); +console.log("¿Son anagramas?", sonAnagramas(palabra1, palabra2)); +console.log("¿Son isogramas?", esIsograma(palabra1), esIsograma(palabra2)); \ No newline at end of file From 55829e5a45615baf5bb30edf45482096b35393f0 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Sun, 15 Sep 2024 09:10:54 +0200 Subject: [PATCH 255/539] #04 sql --- .../sql/eulogioep.sql | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Roadmap/04 - CADENAS DE CARACTERES/sql/eulogioep.sql diff --git a/Roadmap/04 - CADENAS DE CARACTERES/sql/eulogioep.sql b/Roadmap/04 - CADENAS DE CARACTERES/sql/eulogioep.sql new file mode 100644 index 0000000000..d930d08e26 --- /dev/null +++ b/Roadmap/04 - CADENAS DE CARACTERES/sql/eulogioep.sql @@ -0,0 +1,91 @@ +-- Operaciones con cadenas en SQL + +-- Creamos una tabla temporal para nuestros ejemplos +CREATE TEMPORARY TABLE IF NOT EXISTS ejemplos ( + id INT AUTO_INCREMENT PRIMARY KEY, + texto VARCHAR(100) +); + +-- Insertamos algunos datos de ejemplo +INSERT INTO ejemplos (texto) VALUES +('Hola, mundo!'), +('TypeScript'), +('amor'), +('roma'); + +-- 1. Longitud de la cadena +SELECT texto, LENGTH(texto) AS longitud +FROM ejemplos; + +-- 2. Conversión a mayúsculas y minúsculas +SELECT texto, + UPPER(texto) AS mayusculas, + LOWER(texto) AS minusculas +FROM ejemplos; + +-- 3. Subcadenas +SELECT texto, + SUBSTRING(texto, 1, 4) AS subcadena +FROM ejemplos; + +-- 4. Reemplazo +SELECT texto, + REPLACE(texto, 'mundo', 'SQL') AS reemplazo +FROM ejemplos +WHERE texto LIKE '%mundo%'; + +-- 5. Concatenación +SELECT CONCAT(e1.texto, ' ', e2.texto) AS concatenacion +FROM ejemplos e1, ejemplos e2 +WHERE e1.id = 1 AND e2.id = 2; + +-- 6. Recorte de espacios +SELECT TRIM(' Hola Mundo ') AS recorte_espacios; + +-- 7. Verificación +SELECT texto, + texto LIKE 'Hola%' AS empieza_con_hola, + texto LIKE '%!' AS termina_con_exclamacion, + texto LIKE '%mundo%' AS contiene_mundo +FROM ejemplos; + +-- DIFICULTAD EXTRA + +-- Función para verificar si una palabra es un palíndromo +DELIMITER // +CREATE FUNCTION esPalindromo(palabra VARCHAR(100)) +RETURNS BOOLEAN +DETERMINISTIC +BEGIN + RETURN palabra = REVERSE(palabra); +END // +DELIMITER ; + +-- Función para verificar si dos palabras son anagramas +DELIMITER // +CREATE FUNCTION sonAnagramas(palabra1 VARCHAR(100), palabra2 VARCHAR(100)) +RETURNS BOOLEAN +DETERMINISTIC +BEGIN + RETURN LOWER(palabra1) REGEXP CONCAT('^[', LOWER(palabra2), ']+$') + AND LENGTH(palabra1) = LENGTH(palabra2); +END // +DELIMITER ; + +-- Función para verificar si una palabra es un isograma +DELIMITER // +CREATE FUNCTION esIsograma(palabra VARCHAR(100)) +RETURNS BOOLEAN +DETERMINISTIC +BEGIN + RETURN LENGTH(palabra) = LENGTH(DISTINCT palabra); +END // +DELIMITER ; + +-- Probamos las funciones +SELECT texto, + esPalindromo(texto) AS es_palindromo, + sonAnagramas(texto, 'roma') AS es_anagrama_de_roma, + esIsograma(texto) AS es_isograma +FROM ejemplos +WHERE texto IN ('amor', 'roma', 'TypeScript'); \ No newline at end of file From 292f2c6b0e9703c522d712c01d621fbf9ff10642 Mon Sep 17 00:00:00 2001 From: Miquel Roset Date: Sun, 15 Sep 2024 11:04:16 +0200 Subject: [PATCH 256/539] Add Reto 00 (TS): Sintaxis, Variables, Tipos de datos e imprimir por consola --- .../typescript/mikelroset.ts | 178 ++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/mikelroset.ts diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/mikelroset.ts b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/mikelroset.ts new file mode 100644 index 0000000000..8f7547d31c --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/mikelroset.ts @@ -0,0 +1,178 @@ +// ------------------------- DOCUMENTACIÓN OFICIAL ------------------------- // + +// https://www.typescriptlang.org/ + + +// -------------------------- TIPOS DE COMENTARIOS -------------------------- // + +// Esto es un comentario de línea +let x = 10; // Comentario al final de la línea + +/* + Esto es un comentario de bloque + Puede abarcar varias líneas +*/ +let y = 20; + +/** + * Suma dos números + * @param {number} a - El primer número + * @param {number} b - El segundo número + * @returns {number} - La suma de a y b + */ +function sum(a, b) { + return a + b; +} + + +// ------------------------- VARIABLES Y CONSTANTES ------------------------- // + +// Let +let age: number = 25; +age = 30; // OK, ya que 'let' permite reasignación + +// Var +/** + * var también se usa para declarar variables, pero tiene un ámbito global o de + * función (function scope), lo que puede llevar a comportamientos inesperados, + * por lo que en TypeScript se prefiere el uso de let + */ + +var username: string = "Alice"; +// OK, 'var' también permite reasignación, pero su uso es menos recomendable +username = "Bob"; + +// Const +const PI: number = 3.1416; +// PI = 3.15; // Error: no se puede reasignar una constante + +// Plus: Inferir tipos +let city = "Madrid"; // TypeScript infiere que 'city' es de tipo 'string' +// TypeScript infiere que 'numberOfPlanets' es de tipo 'number' +const numberOfPlanets = 8; + + +// ---------------------------- DATOS PRIMITIVOS ---------------------------- // +// Y datos no estrictamente primitivos pero valen la pena mencionarlos para TS) + +// number +let myAge: number = 25; + +// string +let myName: string = "John"; + +// boolean +let isActive: boolean = true; + +// null +let value: null = null; + +// undefined +let notAssigned: undefined = undefined; + +/* + Array + Ambas formas son equivalentes en términos de funcionalidad, varían en estilo: + + 1. `number[]`: Es más concisa y comúnmente usada por simplicidad y legibilidad + 2. `Array`: Usa sintaxis genérica, útil para casos más complejos o + cuando se trabaja con programación genérica (ej. arrays multidimensionales) + + Elección: + - Para arreglos simples, como `number[]`, se prefiere la notación simplificada + - En tipos de datos más complejos, `Array`, puede ofrecer mayor claridad + + No hay una forma "más correcta", la elección depende de las convenciones de + estilo del proyecto y del equipo. +*/ + +let numbers: Array = [1, 2, 3]; +let numbers2: number[] = [1, 2, 3]; + +let strings: Array = ["a", "b", "c"]; +let strings2: string[] = ["a", "b", "c"]; + +// Object +let obj: object = { key: "value" }; + +// Tupla +let tuple: [number, string] = [25, "John"]; + +// Enum +enum Color { + Red, + Green, + Blue +} +let c: Color = Color.Green; + +// Union +let id: number | string; +id = 10; // OK +id = "ABC123"; // OK + +// Literales +let direction: "up" | "down"; +direction = "up"; // OK +// direction = "left"; // Error + +// Any (Desactiva la verificación de tipos. Útil cuando no se conoce el tipo) +let randomAnyValue: any = "Hello"; +randomAnyValue = 10; // OK + +// Void (Se utiliza principalmente en funciones que no devuelven un valor) +function logMessage(message: string): void { + console.log(message); +} + +// Never (Representa el tipo de valores que nunca ocurren) +// útil para funciones que nunca terminan o que siempre lanzan errores +function throwError(message: string): never { + throw new Error(message); +} + +// Interface +interface Person { + name: string; + age: number; +} +let employee: Person = { name: "Bob", age: 25 }; + +// Personalizados (Permiten crear alias para un tipo o una combinación de tipos) +type ID = number | string; +let userId: ID = 123; + +// Functions (Se pueden tipar tanto los parámetros como el valor de retorno) +function add(a: number, b: number): number { + return a + b; +} + +// Symbol +let sym1: symbol = Symbol(); +let sym2: symbol = Symbol("description"); + +/* + Unknown + Es un tipo seguro que se usa cuando no sabemos de antemano cuál será el tipo + de una variable. A diferencia de any, no se pueden realizar operaciones + sobre un valor unknown sin verificar su tipo primero. +*/ +let randomUnknownValue: unknown = "Hello"; +if (typeof randomUnknownValue === "string") { + console.log(randomUnknownValue.toUpperCase()); // OK +} + +/* + BigInt + Es un tipo de dato que representa números enteros muy grandes, mayores de lo + que puede manejar el tipo number. + Los valores de tipo bigint se crean añadiendo una n al final de un número + entero o usando el constructor BigInt(). +*/ + let bigNumber: bigint = 9007199254740n; // Usando 'n' + let anotherBigNumber: bigint = BigInt(9007199254740); // Usando el constructor + + + // ------------------------- IMPRIMIR POR CONSOLA ------------------------- // +let language = 'TypeScript'; +console.log(`Hola ${language}`); \ No newline at end of file From 22d70771a317e732f76661c7136eff2028e19de8 Mon Sep 17 00:00:00 2001 From: Miquel Roset Date: Sun, 15 Sep 2024 11:06:07 +0200 Subject: [PATCH 257/539] Revert "Add Reto 00 (TS): Sintaxis, Variables, Tipos de datos e imprimir por consola" This reverts commit 292f2c6b0e9703c522d712c01d621fbf9ff10642. --- .../typescript/mikelroset.ts | 178 ------------------ 1 file changed, 178 deletions(-) delete mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/mikelroset.ts diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/mikelroset.ts b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/mikelroset.ts deleted file mode 100644 index 8f7547d31c..0000000000 --- a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/mikelroset.ts +++ /dev/null @@ -1,178 +0,0 @@ -// ------------------------- DOCUMENTACIÓN OFICIAL ------------------------- // - -// https://www.typescriptlang.org/ - - -// -------------------------- TIPOS DE COMENTARIOS -------------------------- // - -// Esto es un comentario de línea -let x = 10; // Comentario al final de la línea - -/* - Esto es un comentario de bloque - Puede abarcar varias líneas -*/ -let y = 20; - -/** - * Suma dos números - * @param {number} a - El primer número - * @param {number} b - El segundo número - * @returns {number} - La suma de a y b - */ -function sum(a, b) { - return a + b; -} - - -// ------------------------- VARIABLES Y CONSTANTES ------------------------- // - -// Let -let age: number = 25; -age = 30; // OK, ya que 'let' permite reasignación - -// Var -/** - * var también se usa para declarar variables, pero tiene un ámbito global o de - * función (function scope), lo que puede llevar a comportamientos inesperados, - * por lo que en TypeScript se prefiere el uso de let - */ - -var username: string = "Alice"; -// OK, 'var' también permite reasignación, pero su uso es menos recomendable -username = "Bob"; - -// Const -const PI: number = 3.1416; -// PI = 3.15; // Error: no se puede reasignar una constante - -// Plus: Inferir tipos -let city = "Madrid"; // TypeScript infiere que 'city' es de tipo 'string' -// TypeScript infiere que 'numberOfPlanets' es de tipo 'number' -const numberOfPlanets = 8; - - -// ---------------------------- DATOS PRIMITIVOS ---------------------------- // -// Y datos no estrictamente primitivos pero valen la pena mencionarlos para TS) - -// number -let myAge: number = 25; - -// string -let myName: string = "John"; - -// boolean -let isActive: boolean = true; - -// null -let value: null = null; - -// undefined -let notAssigned: undefined = undefined; - -/* - Array - Ambas formas son equivalentes en términos de funcionalidad, varían en estilo: - - 1. `number[]`: Es más concisa y comúnmente usada por simplicidad y legibilidad - 2. `Array`: Usa sintaxis genérica, útil para casos más complejos o - cuando se trabaja con programación genérica (ej. arrays multidimensionales) - - Elección: - - Para arreglos simples, como `number[]`, se prefiere la notación simplificada - - En tipos de datos más complejos, `Array`, puede ofrecer mayor claridad - - No hay una forma "más correcta", la elección depende de las convenciones de - estilo del proyecto y del equipo. -*/ - -let numbers: Array = [1, 2, 3]; -let numbers2: number[] = [1, 2, 3]; - -let strings: Array = ["a", "b", "c"]; -let strings2: string[] = ["a", "b", "c"]; - -// Object -let obj: object = { key: "value" }; - -// Tupla -let tuple: [number, string] = [25, "John"]; - -// Enum -enum Color { - Red, - Green, - Blue -} -let c: Color = Color.Green; - -// Union -let id: number | string; -id = 10; // OK -id = "ABC123"; // OK - -// Literales -let direction: "up" | "down"; -direction = "up"; // OK -// direction = "left"; // Error - -// Any (Desactiva la verificación de tipos. Útil cuando no se conoce el tipo) -let randomAnyValue: any = "Hello"; -randomAnyValue = 10; // OK - -// Void (Se utiliza principalmente en funciones que no devuelven un valor) -function logMessage(message: string): void { - console.log(message); -} - -// Never (Representa el tipo de valores que nunca ocurren) -// útil para funciones que nunca terminan o que siempre lanzan errores -function throwError(message: string): never { - throw new Error(message); -} - -// Interface -interface Person { - name: string; - age: number; -} -let employee: Person = { name: "Bob", age: 25 }; - -// Personalizados (Permiten crear alias para un tipo o una combinación de tipos) -type ID = number | string; -let userId: ID = 123; - -// Functions (Se pueden tipar tanto los parámetros como el valor de retorno) -function add(a: number, b: number): number { - return a + b; -} - -// Symbol -let sym1: symbol = Symbol(); -let sym2: symbol = Symbol("description"); - -/* - Unknown - Es un tipo seguro que se usa cuando no sabemos de antemano cuál será el tipo - de una variable. A diferencia de any, no se pueden realizar operaciones - sobre un valor unknown sin verificar su tipo primero. -*/ -let randomUnknownValue: unknown = "Hello"; -if (typeof randomUnknownValue === "string") { - console.log(randomUnknownValue.toUpperCase()); // OK -} - -/* - BigInt - Es un tipo de dato que representa números enteros muy grandes, mayores de lo - que puede manejar el tipo number. - Los valores de tipo bigint se crean añadiendo una n al final de un número - entero o usando el constructor BigInt(). -*/ - let bigNumber: bigint = 9007199254740n; // Usando 'n' - let anotherBigNumber: bigint = BigInt(9007199254740); // Usando el constructor - - - // ------------------------- IMPRIMIR POR CONSOLA ------------------------- // -let language = 'TypeScript'; -console.log(`Hola ${language}`); \ No newline at end of file From 9559f0bb2819c3b0f65d878575f643a4850bb97b Mon Sep 17 00:00:00 2001 From: Miquel Roset Date: Sun, 15 Sep 2024 11:08:06 +0200 Subject: [PATCH 258/539] Add Reto 00 (TS): Sintaxis, Variables, Tipos de datos e imprimir por consola --- .../typescript/mikelroset.ts | 178 ++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/mikelroset.ts diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/mikelroset.ts b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/mikelroset.ts new file mode 100644 index 0000000000..8f7547d31c --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/mikelroset.ts @@ -0,0 +1,178 @@ +// ------------------------- DOCUMENTACIÓN OFICIAL ------------------------- // + +// https://www.typescriptlang.org/ + + +// -------------------------- TIPOS DE COMENTARIOS -------------------------- // + +// Esto es un comentario de línea +let x = 10; // Comentario al final de la línea + +/* + Esto es un comentario de bloque + Puede abarcar varias líneas +*/ +let y = 20; + +/** + * Suma dos números + * @param {number} a - El primer número + * @param {number} b - El segundo número + * @returns {number} - La suma de a y b + */ +function sum(a, b) { + return a + b; +} + + +// ------------------------- VARIABLES Y CONSTANTES ------------------------- // + +// Let +let age: number = 25; +age = 30; // OK, ya que 'let' permite reasignación + +// Var +/** + * var también se usa para declarar variables, pero tiene un ámbito global o de + * función (function scope), lo que puede llevar a comportamientos inesperados, + * por lo que en TypeScript se prefiere el uso de let + */ + +var username: string = "Alice"; +// OK, 'var' también permite reasignación, pero su uso es menos recomendable +username = "Bob"; + +// Const +const PI: number = 3.1416; +// PI = 3.15; // Error: no se puede reasignar una constante + +// Plus: Inferir tipos +let city = "Madrid"; // TypeScript infiere que 'city' es de tipo 'string' +// TypeScript infiere que 'numberOfPlanets' es de tipo 'number' +const numberOfPlanets = 8; + + +// ---------------------------- DATOS PRIMITIVOS ---------------------------- // +// Y datos no estrictamente primitivos pero valen la pena mencionarlos para TS) + +// number +let myAge: number = 25; + +// string +let myName: string = "John"; + +// boolean +let isActive: boolean = true; + +// null +let value: null = null; + +// undefined +let notAssigned: undefined = undefined; + +/* + Array + Ambas formas son equivalentes en términos de funcionalidad, varían en estilo: + + 1. `number[]`: Es más concisa y comúnmente usada por simplicidad y legibilidad + 2. `Array`: Usa sintaxis genérica, útil para casos más complejos o + cuando se trabaja con programación genérica (ej. arrays multidimensionales) + + Elección: + - Para arreglos simples, como `number[]`, se prefiere la notación simplificada + - En tipos de datos más complejos, `Array`, puede ofrecer mayor claridad + + No hay una forma "más correcta", la elección depende de las convenciones de + estilo del proyecto y del equipo. +*/ + +let numbers: Array = [1, 2, 3]; +let numbers2: number[] = [1, 2, 3]; + +let strings: Array = ["a", "b", "c"]; +let strings2: string[] = ["a", "b", "c"]; + +// Object +let obj: object = { key: "value" }; + +// Tupla +let tuple: [number, string] = [25, "John"]; + +// Enum +enum Color { + Red, + Green, + Blue +} +let c: Color = Color.Green; + +// Union +let id: number | string; +id = 10; // OK +id = "ABC123"; // OK + +// Literales +let direction: "up" | "down"; +direction = "up"; // OK +// direction = "left"; // Error + +// Any (Desactiva la verificación de tipos. Útil cuando no se conoce el tipo) +let randomAnyValue: any = "Hello"; +randomAnyValue = 10; // OK + +// Void (Se utiliza principalmente en funciones que no devuelven un valor) +function logMessage(message: string): void { + console.log(message); +} + +// Never (Representa el tipo de valores que nunca ocurren) +// útil para funciones que nunca terminan o que siempre lanzan errores +function throwError(message: string): never { + throw new Error(message); +} + +// Interface +interface Person { + name: string; + age: number; +} +let employee: Person = { name: "Bob", age: 25 }; + +// Personalizados (Permiten crear alias para un tipo o una combinación de tipos) +type ID = number | string; +let userId: ID = 123; + +// Functions (Se pueden tipar tanto los parámetros como el valor de retorno) +function add(a: number, b: number): number { + return a + b; +} + +// Symbol +let sym1: symbol = Symbol(); +let sym2: symbol = Symbol("description"); + +/* + Unknown + Es un tipo seguro que se usa cuando no sabemos de antemano cuál será el tipo + de una variable. A diferencia de any, no se pueden realizar operaciones + sobre un valor unknown sin verificar su tipo primero. +*/ +let randomUnknownValue: unknown = "Hello"; +if (typeof randomUnknownValue === "string") { + console.log(randomUnknownValue.toUpperCase()); // OK +} + +/* + BigInt + Es un tipo de dato que representa números enteros muy grandes, mayores de lo + que puede manejar el tipo number. + Los valores de tipo bigint se crean añadiendo una n al final de un número + entero o usando el constructor BigInt(). +*/ + let bigNumber: bigint = 9007199254740n; // Usando 'n' + let anotherBigNumber: bigint = BigInt(9007199254740); // Usando el constructor + + + // ------------------------- IMPRIMIR POR CONSOLA ------------------------- // +let language = 'TypeScript'; +console.log(`Hola ${language}`); \ No newline at end of file From 549b8aeeeb8f59f1d9fcf2aa3321cf901cf47007 Mon Sep 17 00:00:00 2001 From: JesusWay69 HP elitebook Date: Sun, 15 Sep 2024 12:02:43 +0200 Subject: [PATCH 259/539] #36 - Python --- .../python/JesusWay69.py | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/JesusWay69.py diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/JesusWay69.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/JesusWay69.py new file mode 100644 index 0000000000..c4462f966f --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/JesusWay69.py @@ -0,0 +1,122 @@ +import os, platform, random + +if (platform.platform().startswith("macOS") or platform.platform().startswith("Linux")): + os.system('clear') +else: + os.system('cls') + + +""" * EJERCICIO: + * Cada 1 de septiembre, el Hogwarts Express parte hacia la escuela + * de programación de Hogwarts para magos y brujas del código. + * En ella, su famoso sombrero seleccionador ayuda a los programadores + * a encontrar su camino... + * Desarrolla un programa que simule el comportamiento del sombrero. + * Requisitos: + * 1. El sombrero realizará 10 preguntas para determinar la casa del alumno. + * 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data. + * (Puedes elegir las que quieras) + * Acciones: + * 1. Crea un programa que solicite el nombre del alumno y realice 10 + * preguntas, con cuatro posibles respuestas cada una. + * 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección). + * 3. Una vez finalizado, el sombrero indica el nombre del alumno + * y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria, + * pero indicándole al alumno que la decisión ha sido complicada).""" + + +houses_score = [0,0,0,0] +houses_dict = {"Frontend":0, "Backend":0, "Mobile":0 , "Data":0} + +points_distribution = [{1:[1,4,2,6],2:[1,6,2,4],3:[1,4,6,2],4:[6,1,4,2]}, + {1:[2,4,6,1],2:[6,1,4,2],3:[1,4,2,6],4:[2,6,1,4]}, + {1:[1,2,4,6],2:[6,1,4,2],3:[1,6,2,4],4:[1,2,6,4]}, + {1:[1,4,6,2],2:[1,4,2,6],3:[1,6,4,2],4:[6,1,4,2]}, + {1:[1,6,2,4],2:[2,1,6,4],3:[6,2,4,1],4:[2,1,4,6]}, + {1:[1,6,2,4],2:[6,1,4,2],3:[1,4,2,6],4:[4,1,6,2]}, + {1:[1,6,2,4],2:[6,2,4,1],3:[1,4,2,6],4:[4,1,6,2]}, + {1:[1,6,4,2],2:[2,4,1,6],3:[4,2,6,1],4:[6,2,4,1]}, + {1:[6,2,1,4],2:[4,2,1,6],3:[4,6,1,2],4:[1,4,6,2]}, + {1:[6,1,4,2],2:[2,6,4,1],3:[4,2,6,1],4:[2,1,4,6]}] + +questions = {"\nPregunta 1: ¿Cual de estas definiciones se ajusta más a tu personalidad?": + ["1 - Analítico, me gusta tener todo perféctamente calculado", + "2 - Introvertido, me gusta tener perfil bajo y trabajar en la sombra", + "3 - Nómada digital, me gusta viajar pero estar siempre conectado", + "4 - Creativo, me gusta enseñar mis obras y disfruto con el estilo"], + + "\nPregunta 2: ¿Cual de estas tecnologías te gusta más?": + ["1 - Kotlin", "2 - CSS", "3 - MySQL", "4 - Python"], + + "\nPregunta 3: ¿Cual de estos dispositivos portátiles preferirías como regalo?": + ["1 - Un Chromebook", "2 - Un iPad con apple pencil", "3 - Un laptop con Arch Linux", "4 - Un smartphone de gama alta"], + + "\nPregunta 4: ¿Cual de estas asignaturas te gusta o te gustó más estudiar?": + ["1 - Telecomunicaciones", "2 - Matemáticas", "3 - Robótica", "4 - Dibujo artístico"], + + "\nPregunta 5: ¿Cual de 4 películas según tu personalidad crees que más se adapte a ti por temática?, (si no la has visto busca la sinopsis)": + ["1 - El indomable will Hunting--back", "2 - Her--mobile", "3 - Ghost in the shell--front", "4 - Moneyball--data"], + + "\nPregunta 6: ¿Cual de estos coches crees que va mejor contigo?":["1 - Cualquier utilitario barato, funcional y discreto", + "2 - Uno con estilo tipo Fiat 500 o Mini Cooper", "3 - El que mejor relación específica tenga entre CV/Cilindrada/Consumo", + "4 - Un Tesla o similar, que sea eléctrico y con conectividad de todo tipo con mi smartphone a bordo y en remoto"], + + "\nPregunta 7: ¿Cual de estas carreras hubieses elegido de no haber sido la de informática?":["1 - Cualquier otra ingeniería", + "2 - Bellas artes", "3 - Sin duda administración de empresas", "4 - Si existe, alguna que estudie nanotecnología"], + + "\nPregunta 8: Otra de tecnologías , ¿Cual de estas te gusta más?":["1 - Java", "2 - MongoDB", "3 - Swift", "4 - Tailwind"], + + "\nPregunta 9: ¿Qué programa/aplicación de estas te gusta o usas más?":["1 - Google Chrome", "2 - PowerBI", "3 - VScode", "4 - Android Studio"], + + "\nPregunta 10: ¿Cual de estas características de la marca Apple crees que es más importante en su éxito?": + ["1 - Su interfaz visual , el diseño de sus dispositivos, su enfoque hacia el mundo creativo y visual y su framework gráfico SwiftUI", + "2 - Su lenguaje propio Swift y lo buenos y productivos que son sus ordenadores para trabajo con cualquier lenguaje de programación en general" + "3 - Sus dispositivos y los sistemas operativos iOS, IpadOS, watchOS, tvOS y sobre todo la joya de la corona, el iPhone", + "4 - Su capacidad de innovación y de mantenerse siempre en los ranking de ventas, 9 de cada 10 personas en el mundo conocen a Apple"] + } + + +name = input("introduzca su nombre: ").title() + +def points_management(answer:int, round:int): + distribution_question:dict = points_distribution[round-1] + distribution_answer:list = distribution_question[answer] + for points in range (0,len(houses_score),1): + + houses_score[points] = houses_score[points] + distribution_answer[points] + +def quest_printer(questions:dict): + round = 0 + for question in list(questions.keys()): + print(question) + for answers in questions[question]: + print(answers) + answer = input("Elija una de las 4 opciones--> ") + while not answer.isdigit() or int(answer) < 1 or int(answer) > 4: + print("Sólo se pueden introducir números del 1 al 4, pruebe de nuevo") + answer = input("Elija una de las 4 opciones--> ") + + round += 1 + points_management(int(answer), round) + +quest_printer(questions) + +tie = False +for result in houses_score: + while houses_score.count(result) > 1: + my_bool = random.randint(0, 1) + bool(my_bool) + if bool: + result -= 1 + tie = True + +houses_dict["Frontend"] = houses_score[0] +houses_dict["Backend"] = houses_score[1] +houses_dict["Mobile"] = houses_score[2] +houses_dict["Data"] = houses_score[3] +win = max(houses_dict.items(), key=lambda x: x[1])[0] + +print(f"Por las respuestas que has dado {name} parece que el sector de programación que más se adapta a ti es el de {win}") +if tie: + print("Pero la decisión ha sido difícil") + From ab48e752e73d860b105a102d158baa8702ec55c0 Mon Sep 17 00:00:00 2001 From: Jesus Estrada Date: Sun, 15 Sep 2024 05:30:53 -0600 Subject: [PATCH 260/539] #31 - JavaScript --- .../javascript/JesusEs1312.js" | 218 ++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 "Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/javascript/JesusEs1312.js" diff --git "a/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/javascript/JesusEs1312.js" "b/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/javascript/JesusEs1312.js" new file mode 100644 index 0000000000..f406f7bd6f --- /dev/null +++ "b/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/javascript/JesusEs1312.js" @@ -0,0 +1,218 @@ + const readline = require('readline'); + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + class Participant { + constructor(nombre, pais, evento){ + this.nombre = nombre; + this.pais = pais; + this.evento = evento; + this.medal = ""; + } + } + + class OlympicsGames { + + constructor(){ + this.participants = []; + this.events = []; + this.countries = []; + } + + registrationEvents(){ + rl.question("|* Nombre del evento: ", (newNameEvent) => { + let nameEvent = {nombre: newNameEvent, winners: []}; + this.events.push(nameEvent); + console.log(`|== Se ha registrado el evento ${newNameEvent} correctamente`); + console.log("|== Estos son todos tus eventos actuales: "); + this.events.forEach((e, i) => console.log(`|${i + 1}.- ${e.nombre}`)); + this.showMessage(); + }); + } + + registrationParticipants(){ + if(this.events.length >= 1){ + let nombre = ""; + let pais = ""; + let evento = ""; + rl.question("|* Nombre del participante: ", (nombreParticipant) => { + nombre = nombreParticipant; + rl.question("|* País del participante: ", (paisParticipant) => { + pais = paisParticipant; + rl.question("|* Nombre del evento: ", (nombreEvento) => { + this.events.forEach(e => evento = e.nombre === nombreEvento ? nombreEvento : ""); + if(evento !== ""){ + let participant = new Participant(nombre, pais, evento); + this.participants.push(participant); + this.countries.push(paisParticipant); + console.log(`|== Se ha registrado al participante ${nombre} correctamente`); + this.participants.forEach((p, i) => console.log(`|${i + 1}.- ${p.nombre}`)); + this.showMessage(); + } else { + console.log("|== No se encontro el evento, intentalo de nuevo"); + this.registrationParticipants(); + } + }); + }); + }); + + } else { + console.log("=== No existe un evento para registrar al participante, intente de nuevo ==="); + this.showMessage(); + } + } + + simulateEvents(){ + if(this.events.length <= 0){ + console.log("|== No existen eventos disponibles para simular"); + } else { + console.log("|== Eventos que puedes simular"); + this.events.forEach((e, i) => console.log(`|${i + 1}.- ${e.nombre}`)); + rl.question("|* Selecciona una de las opciones: ", (accion) => { + let count = 0; + this.participants.forEach((participant) => { + if(participant.evento == this.events[accion - 1].nombre){ + count++; + } + }); + if(count >= 3){ + console.log("|== Simulando..."); + setTimeout(() => { + let position1 = parseInt(Math.random() * this.participants.length); + let position2 = parseInt(Math.random() * this.participants.length); + let position3 = parseInt(Math.random() * this.participants.length); + while(position1 === position2 || position1 == position3 || position2 == position3){ + position1 = parseInt(Math.random() * this.participants.length); + position2 = parseInt(Math.random() * this.participants.length); + position3 = parseInt(Math.random() * this.participants.length); + } + + console.log(`----- Tabla de ganadores del evento ${this.events[accion - 1].nombre} -----`); + console.log(`|1. ${this.participants[position1].nombre} (Oro)`); + console.log(`|2. ${this.participants[position2].nombre} (Plata)`); + console.log(`|3. ${this.participants[position3].nombre} (Bronce)`); + this.participants[position1].medal = "oro"; + this.participants[position2].medal = "plata"; + this.participants[position3].medal = "bronce"; + this.events.find(index => index.nombre == this.events[accion - 1].nombre).winners.push(this.participants[position1]); + this.events.find(index => index.nombre == this.events[accion - 1].nombre).winners.push(this.participants[position2]); + this.events.find(index => index.nombre == this.events[accion - 1].nombre).winners.push(this.participants[position3]); + this.showMessage(); + }, "1000"); + + } else { + console.log("|== ¡ERROR! El evento no tiene minimo 3 participantes o no existe"); + this.showMessage(); + } + }); + } + } + + createData(){ + console.log("|----- Creación de informes -----"); + console.log("|1. Ganadores por evento"); + console.log("|2. Ranking de paises"); + rl.question("|* Selecciona una opcion: ", (op) =>{ + switch(op){ + case '1': + this.rankingEvent(); + break; + case '2': + this.rankingCountry(); + break; + default: + console.log("|== Acción no permitida, intentelo de nuevo"); + this.createData(); + } + }); + } + + rankingCountry(){ + let countriesAndMelds = []; + this.participants.forEach(participant => { + let medalla = participant.medal; + let score = 0; + let oro = 0; + let plata = 0; + let bronce = 0; + if(medalla == "oro"){ + score = 3; + oro++; + } else if(medalla == "plata"){ + score = 2; + plata++; + } else if(medalla == "bronce"){ + score = 1; + bronce++; + } + + if(countriesAndMelds.includes(countriesAndMelds.find(index => index.nombre == participant.pais))){ + countriesAndMelds.find(index => index.nombre == participant.pais).score += score; + countriesAndMelds.find(index => index.nombre == participant.pais).oro += oro; + countriesAndMelds.find(index => index.nombre == participant.pais).plata += plata; + countriesAndMelds.find(index => index.nombre == participant.pais).bronce += bronce; + } else { + countriesAndMelds.push({nombre: participant.pais, score: score, oro: oro, plata: plata, bronce: bronce}); + } + }); + + countriesAndMelds.sort((a,b) => { + if(a.score > b.score){ + return -1; + } else if(a.score < b.score){ + return 1; + } else { + return 0; + } + }); + + console.log("|----- Ranking por país -----"); + countriesAndMelds.forEach((countryAndMedal, index) => { + console.log(`|${index + 1}. ${countryAndMedal.nombre} Oro: ${countryAndMedal.oro}, Plata: ${countryAndMedal.plata}, Bronce: ${countryAndMedal.bronce}`); + }); + this.showMessage(); + } + + rankingEvent(){ + console.log("|----- Ranking por Evento -----"); + this.events.forEach(e => { + console.log(`|${e.nombre}`); + e.winners.forEach((winner, index) => console.log(`|${index + 1}. ${winner.nombre}`)) + }); + this.showMessage(); + } + + showMessage(){ + let message = "|Acciones que puedes realizar:\n|1. Registro de eventos\n|2. Registro de participantes\n|3. Simulación de eventos\n|4. Creación de informes\n|5. Salir del programa"; + console.log("|-----------------------------------------------------"); + console.log(message.trim()); + rl.question("|Selecciona una de las opciones: ", (accion) => { + switch(accion){ + case '1': + this.registrationEvents(); + break; + case '2': + this.registrationParticipants(); + break; + case '3': + this.simulateEvents(); + break; + case '4': + this.createData(); + break; + case '5': + console.log("|Cerrando programa..."); + rl.close(); + break; + default: + console.log("|Acción no permitida, intentelo de nuevo"); + this.showMessage(); + } + }); + } + } + + olympic = new OlympicsGames(); + olympic.showMessage(); From 9630ad34d70e11c835978550ec2c41557379467e Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Sun, 15 Sep 2024 15:52:36 +0200 Subject: [PATCH 261/539] #08 - TypeScript --- Roadmap/08 - CLASES/typescript/qv1ko.ts | 67 +++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Roadmap/08 - CLASES/typescript/qv1ko.ts diff --git a/Roadmap/08 - CLASES/typescript/qv1ko.ts b/Roadmap/08 - CLASES/typescript/qv1ko.ts new file mode 100644 index 0000000000..1256cb1007 --- /dev/null +++ b/Roadmap/08 - CLASES/typescript/qv1ko.ts @@ -0,0 +1,67 @@ +class C1 { + + c1String: string; + + constructor(c1String: string) { + this.c1String = c1String; + } + + getC1String() { + return this.c1String; + } + + setC1String(c1String: string) { + this.c1String = c1String; + } + + toString() { + return this.c1String; + } + + print() { + console.log(this.c1String); + } + +} + +class C2 { + + c2String: string; + + constructor(c2String: string) { + this.c2String = c2String; + } + + getC2String() { + return this.c2String; + } + + setC2String(c2String: string) { + this.c2String = c2String; + } + + toString() { + return this.c2String; + } + + print() { + console.log(this.c2String); + } + +} + +function main() { + + let example1: C1 = new C1("example"); + example1.print(); + example1.setC1String("Example 1"); + console.log(example1.toString()); + + let example2: C2 = new C2("example"); + example2.print(); + example2.setC2String("Example 2"); + console.log(example2.toString()); + +} + +main(); From ba9048f4c380743e88e57d6ba3ae86a90c638163 Mon Sep 17 00:00:00 2001 From: 7R0N1X Date: Sun, 15 Sep 2024 12:38:10 -0500 Subject: [PATCH 262/539] #12 - JavaScript --- Roadmap/12 - JSON Y XML/javascript/7R0N1X.js | 85 ++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 Roadmap/12 - JSON Y XML/javascript/7R0N1X.js diff --git a/Roadmap/12 - JSON Y XML/javascript/7R0N1X.js b/Roadmap/12 - JSON Y XML/javascript/7R0N1X.js new file mode 100644 index 0000000000..395e8bdf07 --- /dev/null +++ b/Roadmap/12 - JSON Y XML/javascript/7R0N1X.js @@ -0,0 +1,85 @@ +const fs = require('fs'); +const xml2js = require('xml2js'); + +const datos = { + nombre: 'Eduardo Molina', + edad: 25, + fechaNacimiento: '30-08-1999', + lenguajes: ['JavaScript', 'Python', 'Java'] +}; + +const crearJSON = () => { + fs.writeFileSync('datos.json', JSON.stringify(datos, null, 2), 'utf-8'); + console.log('Archivo JSON creado:\n', fs.readFileSync('datos.json', 'utf-8')); +}; + +const crearXML = () => { + const builder = new xml2js.Builder({ headless: true, rootName: 'persona' }); + const xml = builder.buildObject({ + nombre: datos.nombre, + edad: datos.edad, + fechaNacimiento: datos.fechaNacimiento, + lenguajes: { lenguaje: datos.lenguajes } + }); + fs.writeFileSync('datos.xml', xml, 'utf-8'); + console.log('Archivo XML creado:\n', fs.readFileSync('datos.xml', 'utf-8')); +}; + + +class Persona { + + constructor(nombre, edad, fechaNacimiento, lenguajes) { + this.nombre = nombre; + this.edad = edad; + this.fechaNacimiento = fechaNacimiento; + this.lenguajes = lenguajes; + } + + mostrarDatos() { + console.log(`Nombre: ${this.nombre}`); + console.log(`Edad: ${this.edad}`); + console.log(`Fecha de Nacimiento: ${this.fechaNacimiento}`); + console.log(`Lenguajes: ${this.lenguajes.join(', ')}`); + } +} + +const leerYTransformarJSON = () => { + const dataJSON = fs.readFileSync('datos.json', 'utf-8'); + const datosJSON = JSON.parse(dataJSON); + const personaJSON = new Persona( + datosJSON.nombre, + datosJSON.edad, + datosJSON.fechaNacimiento, + datosJSON.lenguajes + ); + console.log('\nDatos leídos del archivo JSON:'); + personaJSON.mostrarDatos(); +}; + +const leerYTransformarXML = () => { + const dataXML = fs.readFileSync('datos.xml', 'utf-8'); + xml2js.parseString(dataXML, (err, result) => { + if (err) throw err; + const datosXML = result.persona; + const personaXML = new Persona( + datosXML.nombre[0], + datosXML.edad[0], + datosXML.fechaNacimiento[0], + datosXML.lenguajes[0].lenguaje + ); + console.log('\nDatos leídos del archivo XML:'); + personaXML.mostrarDatos(); + }); +}; + +const borrarArchivos = () => { + fs.unlinkSync('datos.json'); + fs.unlinkSync('datos.xml'); + console.log('\nArchivos borrados.'); +}; + +crearJSON(); +crearXML(); +leerYTransformarJSON(); +leerYTransformarXML(); +borrarArchivos(); \ No newline at end of file From 32aa36c06636f9c1efd9162d64ac72137cfbb282 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Sun, 15 Sep 2024 12:40:29 -0500 Subject: [PATCH 263/539] #05 - Java --- .../java/martinbohorquez.java | 154 ++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 Roadmap/05 - VALOR Y REFERENCIA/java/martinbohorquez.java diff --git a/Roadmap/05 - VALOR Y REFERENCIA/java/martinbohorquez.java b/Roadmap/05 - VALOR Y REFERENCIA/java/martinbohorquez.java new file mode 100644 index 0000000000..94b5dd1222 --- /dev/null +++ b/Roadmap/05 - VALOR Y REFERENCIA/java/martinbohorquez.java @@ -0,0 +1,154 @@ +/** + * #05 VALOR Y REFERENCIA + * + * @author martinbohorquez + */ + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class martinbohorquez { + + private static int num1; + private static int num2; + private static int[] array1; + private static int[] array2; + private static List list1; + private static List list2; + + private static int num3; + private static int num4; + private static int[] array3; + private static int[] array4; + private static List list3; + private static List list4; + private static List list5; + private static List list6; + + private static int numA; + private static int numB; + private static int[] arrayC; + private static int[] arrayD; + private static int[] arrayE; + private static int[] arrayF; + private static List listG; + private static List listH; + private static List listI; + private static List listJ; + + public static void main(String[] args) { + /* + * Asignación de variable "por valor" + */ + num1 = 10; + num2 = num1; + num2 = 20; + System.out.printf("num1: %d y num2: %d%n", num1, num2); + + /* + * Asignación de variable "por referencia" + */ + //Array + array1 = new int[]{10, 20}; + array2 = array1; + array2[0] = 30; + array2[1] = 40; + System.out.printf("array1: %s y array2: %s%n", + Arrays.toString(array1), Arrays.toString(array2)); + + //List + list1 = new ArrayList<>(Arrays.asList(10, 20)); + list2 = list1; + list2.add(30); + System.out.printf("list1: %s y list2: %s%n", + list1.toString(), list2.toString()); + + /* + * Funciones con asignación de variable "por valor" + */ + num3 = 100; + getValue(num3); + System.out.printf("num3: %d%n", num3); + + /* + * Funciones con asignación de variable "por referencia" + */ + array3 = new int[]{100, 200}; + getValue(array3); + System.out.printf("array3: %s%n", Arrays.toString(array3)); + + list3 = new ArrayList<>(Arrays.asList(100, 200)); + getReference(list3); + System.out.printf("list3: %s%n", list3.toString()); + + list5 = new ArrayList<>(Arrays.asList(100, 200)); + getValue(list5); + System.out.printf("list5: %s%n", list5.toString()); + + /** + * DIFICULTAD EXTRA + * Crea dos programas que reciban dos parámetros (cada uno) + * definidos como variables anteriormente. + */ + // valor + arrayC = new int[]{1000, 2000}; + arrayD = reverseValue(arrayC); + System.out.printf("arrayC: %s%n", Arrays.toString(arrayC)); + System.out.printf("arrayD: %s%n", Arrays.toString(arrayD)); + + arrayE = new int[]{3000, 4000}; + arrayF = reverseValue(arrayE.clone()); //crea una nueva instancia + System.out.printf("arrayE: %s%n", Arrays.toString(arrayE)); + System.out.printf("arrayF: %s%n", Arrays.toString(arrayF)); + + listG = new ArrayList<>(Arrays.asList(5000, 6000)); + listH = new ArrayList<>(Arrays.asList(7000, 8000)); + List[] listas = reverseReference(listG, listH); // + listI = listas[0]; + listJ = listas[1]; + System.out.printf("listG: %s, listH: %s%n", listG.toString(), listH.toString()); + System.out.printf("listI: %s, listJ: %s%n", listI.toString(), listJ.toString()); + + } + + private static void getValue(int num) { + num = 200; + System.out.printf("num: %d%n", num); + } + + private static void getValue(int[] array) { + array = new int[]{300, 400}; //crea un nuevo objeto + System.out.printf("array: %s%n", Arrays.toString(array)); + } + + private static void getReference(List list) { + list.add(300); //usando la misma referencia (objeto en memoria) + list4 = list; + list4.add(400); + System.out.printf("list: %s%n", list.toString()); + System.out.printf("list4: %s%n", list4.toString()); + } + + private static void getValue(List list) { + list.add(300); //usando la misma referencia (objeto en memoria) + list6 = new ArrayList<>(list); //se crea un nuevo objeto + list6.add(400); + System.out.printf("list: %s%n", list.toString()); + System.out.printf("list6: %s%n", list6.toString()); + } + + private static int[] reverseValue(int[] array) { + int temp = array[0]; + array[0] = array[1]; + array[1] = temp; + return array; + } + + private static List[] reverseReference(List list1, List list2) { + List temp = list1; + list1 = list2; + list2 = temp; + return new List[]{list1, list2}; + } +} From ed1eac22be6085ee8c580b98b195452c4ad75e0d Mon Sep 17 00:00:00 2001 From: maxiRica Date: Sun, 15 Sep 2024 20:35:28 +0200 Subject: [PATCH 264/539] Create maxiRica --- .../python/maxiRica | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/maxiRica diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/maxiRica b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/maxiRica new file mode 100644 index 0000000000..336f1e6683 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/maxiRica @@ -0,0 +1,33 @@ +# ejercicio realizado por Maxi Rica +''' +el ejercicio lo voy a realizar sobre + PYTHON +''' +""" +https://www.python.org/ +""" + +# como antes he dibujado tienes la opción de realizar un comentario en una línea con esta opción +""" o tienes la opción de usar tres comillas o comillas dobles para poder realizar comentarios +de varias líneas. Abres con las comillas, y finalizas el escrito con las comillas otra vez. +""" + +""" +En Python las variables no son tipadas en la declaración, y no hay constantes. Aún así, por consenso, las variables que sean constantes se escriben en mayúscula +para que se entienda que ese identificador no ha de ser usada como una variable +""" + +variable = true +CONSTANTE = 10 + +# tipos de datos primitivos + +boolean = true # es el tipo bool +entero = 1 # es el tipo int +flotante = 0.1 # es el tipo float +texto = "tipo string" # es el tipo str +null = none # es el tipo NoneType, en otros lenguajes en null + +# imprimir por pantalla "hola mundo" + +print("¡hola Python!") From 80b2d1f23990a38f35508cc650822d0d636b7f53 Mon Sep 17 00:00:00 2001 From: maxiRica Date: Sun, 15 Sep 2024 20:40:40 +0200 Subject: [PATCH 265/539] Rename maxiRica to maxiRica,py --- .../python/{maxiRica => maxiRica,py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/{maxiRica => maxiRica,py} (100%) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/maxiRica b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/maxiRica,py similarity index 100% rename from Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/maxiRica rename to Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/maxiRica,py From 7ec9b964c888d1e6ec45dbc1201d4df2bbfb9659 Mon Sep 17 00:00:00 2001 From: Miquel Roset Date: Sun, 15 Sep 2024 21:54:12 +0200 Subject: [PATCH 266/539] Add Reto 01 (TS): Operadores y estructuras de control (+ ejercicio bonus) --- .../typescript/mikelroset.ts | 490 ++++++++++++++++++ 1 file changed, 490 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/mikelroset.ts diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/mikelroset.ts b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/mikelroset.ts new file mode 100644 index 0000000000..6cb06ea16c --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/mikelroset.ts @@ -0,0 +1,490 @@ +// ------------------------- OPERADORES ARITMÉTICOS ------------------------- // + +// Suma +let sum: number = 5 + 2 // 7 + +// Resta +let rest: number = 5 - 2 // 3 + +// Multiplicación +let mult: number = 5 * 2 // 10 + +// División +let div: number = 5 / 2 // 2.5 + +// Módulo (resto) +let mod: number = 5 % 2 // 1 + +// Exponenciación +let exp: number = 5 ** 2 // 25 + +// Incremento +let x: number = 5; +x++ // x es 6 + +// Decremento +let y: number = 5; +y-- // y es 4 + + +// ------------------------ OPERADORES DE ASIGNACIÓN ------------------------ // + +// Asignación +let z: number = 5; + +// Asignación de suma +z += 5 // z = z + 5 + +// Asignación de resta +z -= 5 // z = z - 5 + +// Asignación de multiplicación +z *= 5 // z = z * 5 + +// Asignación de división +z /= 5 // z = z / 5 + +// Asignación de módulo +z %= 5 // z = z % 5 + +// Asignación de exponenciación +z **= 5 // z = z ** 5 + + +// ------------------------- OPERADORES DE COMPARACIÓN ---------------------- // + +// == Igual a +let val1: number = 5; +let val2: string = '5'; +val1 == val2 // true + +// === Estrictamente igual a +val1 === val2 // false + +// != No igual a +val1 != val2 // false + +// !== Estrictamente no igual a +val1 !== val2 // true + +// > Mayor que +5 > 2 // true + +// < Menor que +5 < 2 // false + +// >= Mayor o igual que +5 >= 5 // true + +// <= Menor o igual que +5 <= 5 // true + + +// -------------------------- OPERADORES LÓGICOS ---------------------------- // + +// AND +let a: boolean = true; +let b: boolean = false; +let c: boolean = a && b; // false + +// OR +let d: boolean = true; +let e: boolean = false; +let f: boolean = d || e; // true + +// NOT +let g: boolean = true; +let h: boolean = !g; // false + + +// -------------------------- OPERADORES DE BITS ---------------------------- // + +// AND +let i: number = 5; // 0101 +let j: number = 3; // 0011 +let k: number = i & j; // 0001 + +// OR +let l: number = 5; // 0101 +let m: number = 3; // 0011 +let n: number = l | m; // 0111 + +// XOR +let o: number = 5; // 0101 +let p: number = 3; // 0011 +let q: number = o ^ p; // 0110 + +// Complemento +let r: number = 5; // 0101 +let s: number = ~r; // 1010 + +// Desplazamiento a la izquierda +let t: number = 5; // 0101 +let u: number = t << 1; // 1010 + +// Desplazamiento a la derecha +let v: number = 5; // 0101 +let w: number = v >> 1; // 0010 + +// Desplazamiento a la derecha sin signo +let x2: number = 5; // 0101 +let y2: number = x2 >>> 1; // 0100 + + +// ------------------------- OPERADORES DE CADENAS -------------------------- // + +// Concatenación de cadenas +let a3: string = "Hello"; +let b3: string = "World"; +let c3: string = a3 + b3; // HelloWorld + +// Concatenación y asignación +let d3: string = a3; +d3 += b3; // HelloWorld + + +// -------------------------- OPERADORES TERNARIOS -------------------------- // + +// Condicional +let z2: boolean = true; +let a2: number = z2 ? 5 : 10; // 5 + +// Condicional con ternario +let b2: number = z2 ? 5 : 10; // 5 + + +// -------------------- OPERADORES DE DESESTRUCTURACIÓN --------------------- // + +// ... Spread o Rest +let [a4, b4]: [number, number] = [1, 2]; +let otherObj: object = { name: "John", age: 25 }; +let obj: object = { ...otherObj }; + + +// ------------------------ OPERADORES DE TIPO TYPEOF ----------------------- // + +// typeof +typeof 5 // number + + +// ------------------------ OPERADORES DE ELIMINACIÓN ----------------------- // + +// delete +type Person = { + name?: string; + age: number; +}; +let obj2: Person = { name: "John", age: 25 }; +delete obj2.name; // Elimina el nombre de la variable 'obj' + + +// ----------------------- OPERADORES DE INSTANCIA -------------------------- // + +// instanceof +class Person2 { + name: string; + age: number; +} +obj2 instanceof Person2 // true + + +// ----------------------- OPERADORES DE INCLUSIÓN -------------------------- // + +// in +let a5: object = { message: "Hello World" }; +"message" in a5; // true + + +// --------------- OPERADORES DE ENCADENAMIENTO OPCIONAL -------------------- // + +// ?. +type Person3 = { + personalInfo?: { + name: string; + age: number; + }; +}; +let obj3: Person3 = { personalInfo: { name: "John", age: 25 } }; +obj3?.personalInfo?.name // undefined si obj3 o personalInfo no existen + + +// ------------------ OPERADORES DE COALESCENCIA NULA ----------------------- // + +// ?? (Devuelve el valor de la derecha si el valor izquierdo es null) +null ?? "John" // John + + +// ------------------------ OPERADORES SATISFIES ---------------------------- // + +// satisfies +type Config = { + url: string; + port: number; +}; +// config sigue teniendo la prop. "protocol", aunque satisface el tipo "Config" +const config = { + url: "https://example.com", + port: 8080, + protocol: "https", +} satisfies Config; + + +// ------------------ OPERADORES DE ASIGNACIÓN LÓGICA ----------------------- // + +// &&= +let a6: boolean = true; +let b6: boolean = false; +a6 &&= b6; // false + +// ||= +let c6: boolean = true; +let d6: = false; +c6 ||= d6; // true + +// ??= +let e6: string | null = null; +let f6 = "John"; +e6 ??= f6; // "John" + + +// ----------------------------- OPERADOR VOID ------------------------------ // + +// void +function someFunction(): void { + console.log("Hello World"); +} +void someFunction(); // Ejecuta la función pero ignora su valor de retorno + + +// --------------------- OPERADOR DE MÓDULOS DINÁMICOS ---------------------- // + +/* + * import + * Se utiliza para importar módulos de forma dinámica. Aunque no es un operador + * estándar, actúa como tal para cargar módulos bajo demanda +*/ +import { add } from "./math"; +add(5, 5); // 10 + + +// ----------------------------- OPERADOR NEW ------------------------------- // + +// new +let date = new Date(); // Crea una nueva instancia del objeto Date + + +// ---------------------------- OPERADOR SUPER ----------------------------- -// + +// super +class Animal { + constructor(public name: string) {} +} + +class Dog extends Animal { + constructor(name: string) { + super(name); // Llama al constructor de la clase padre + } +} + + +// --------------------------- OPERADOR THIS -------------------------------- // + +// this +class MyClass { + constructor(public name: string) {} + + sayHello() { + console.log(`Hello, ${this.name}`); + } +} + +let obj5 = new MyClass('TypeScript'); +obj5.sayHello(); // "Hello, TypeScript" + + +// ---------------------- ESTRUCTURAS CONDICIONALES ------------------------- // + +// if, else if, else +const age: number = 25; + +if (age < 18) { + console.log("You are a child"); +} else if (age >= 18 && age < 65) { + console.log("You are an adult"); +} else { + console.log("You are a senior citizen"); +} + +// switch +const fruit: string = "banana"; + +switch (fruit) { + case "apple": + console.log("Es una manzana"); + break; + case "banana": + console.log("Es un plátano"); + break; + default: + console.log("Fruta desconocida"); +} + + +// ---------------------- ESTRUCTURAS ITERACIONES --------------------------- // + +// for +for (let i: number = 0; i < 5; i++) { + console.log(i); +} + +// for...of +for (const fruit of ["apple", "banana", "orange"]) { + console.log(fruit); +} + +// for...in +let obj6: object = { name: "John", age: 25 }; +for (const key in obj6) { + console.log(`${key}: ${obj6[key]}`); +} + +// while +let j: number = 0; +while (j < 5) { + console.log(j); + j++; +} + +// do...while +let k: number = 0; +do { + console.log(k); + k++; +} while (k < 5); + + +// ----------------- ESTRUCTURAS DE CONTROL DE ITERACIÓN -------------------- // + +// break +for (let i: number = 0; i < 5; i++) { + if (i === 3) { + break; + } + console.log(i); +} + +// continue +for (let i: number = 0; i < 5; i++) { + if (i === 2) { + continue; + } + console.log(i); +} + +// return +function add(a: number, b: number): number { + return a + b; +} + +add(5, 5); // 10 + + +// ------------------ ESTRUCTURAS DE CONTROL DE EXCEPCIONES ---------------- // + +// try...catch...finally +try { + throw new Error("Something went wrong"); +} catch (error) { + console.log(error.message); +} finally { + console.log("Finally block"); +} + +// throw +function throwError(): never { + throw new Error("Something went wrong"); +} + + +// ---------------------- ESTRUCTURAS DE CONTROL DE ASYNC ------------------- // + +// async await +async function fetchData() { + try { + const response = await fetch("https://api.example.com/data"); + const data = await response.json(); + console.log(data); + } catch (error) { + console.error("Error al obtener los datos:", error); + } +} + +fetchData(); + +// Promise.then().catch().finally() +fetch("https://api.example.com/data") + .then(response => response.json()) + .then(data => console.log(data)) + .catch(error => console.error("Error:", error)) + .finally(() => console.log("Proceso terminado")); + + +// -------------------------- BONUS EJERCICIO ------------------------------- // + +/* + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3 +*/ +const conf = { + MULTIPLE_OF_X: 3, + EXCLUDED_NUMBER: 16, + MIN: 10, + MAX: 55 +}; + +/** + * Verifica si un número es par + * @param num - Número a verificar + * @returns true si el número es par + */ +function isEven(num: number): boolean { + return num % 2 === 0; +} + +/** + * Verifica si un número no es el número excluido (conf.EXCLUDED_NUMBER) + * @param num - Número a verificar + * @returns true si el número no es conf.EXCLUDED_NUMBER + */ +function isNotExcludedNumber(num: number): boolean { + return num !== conf.EXCLUDED_NUMBER; +} + +/** + * Verifica si un número no es múltiplo de un valor dado + * @param num - Número a verificar + * @param divisor - Valor divisor + * @returns true si el número no es múltiplo del divisor + */ +function isNotMultipleOf(num: number, divisor: number): boolean { + return num % divisor !== 0; +} + +/** + * Verifica si un número es par, no es conf.EXCLUDED_NUMBER y no es múltiplo de + * conf.MULTIPLE_OF_X + * @param num - Número a verificar + * @returns true si el número cumple todas las condiciones + */ +function isEvenAndValid(num: number): boolean { + return isEven(num) + && isNotExcludedNumber(num) + && isNotMultipleOf(num, conf.MULTIPLE_OF_X); +} + +// Recorremos el rango y mostramos solo los números que cumplen las condiciones +for (let i = conf.MIN; i <= conf.MAX; i++) { + if (isEvenAndValid(i)) { + console.log(i); + } +} From c4983bd9fd8754ceaaa1b0046da34dad1039c5e1 Mon Sep 17 00:00:00 2001 From: raulG91 <=> Date: Sun, 15 Sep 2024 22:31:46 +0200 Subject: [PATCH 267/539] #37 - Python --- .../python/raulG91.py | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/raulG91.py diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/raulG91.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/raulG91.py new file mode 100644 index 0000000000..52ac63dbd2 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/raulG91.py @@ -0,0 +1,106 @@ +import requests +import json +def getToken()->str: + token_url = "https://accounts.spotify.com/api/token" + data = { + 'grant_type':'client_credentials', + 'client_id': "YOUR CLIENT ID", + 'client_secret': "YOUR SECRET" + + } + result = requests.post(token_url,data=data) + return json.loads(result.text)['access_token'] + +def getGroupDetails(groupId:str,name:str): + + artist_info = { + 'name':name, + 'popularity': 0, + 'followers': 0, + 'songs_popularity':0, + 'total_albums':0 + } + api_url = "https://api.spotify.com/v1/" + bearer_token = getToken() + headers = { + "Authorization": f'Bearer {bearer_token}' + } + + #Get popularity and followers from artists API + url = f'{api_url}artists/{groupId}' + result = requests.get(url=url,headers=headers) + + if result.status_code >= 200 and result.status_code < 300: + artist_dict = json.loads(result.text) + artist_info['popularity'] = artist_dict['popularity'] + artist_info['followers'] = artist_dict['followers']['total'] + else: + print("Connection error") + + #Get averrage top-tracks popularity + url = f'{api_url}artists/{groupId}/top-tracks?market=ES' + result = requests.get(url=url,headers=headers) + averrage_popularity = 0 + + if result.status_code >= 200 and result.status_code < 300: + tracks = json.loads(result.text)['tracks'] + sum = 0 + for track in tracks: + sum += track['popularity'] + averrage_popularity = sum / len(tracks) + artist_info['songs_popularity']=averrage_popularity + else: + print("Connection error") + + #Get albums + url = f'{api_url}artists/{groupId}/albums' + + result = requests.get(url=url,headers=headers) + if result.status_code >= 200 and result.status_code < 300: + items = json.loads(result.text)['items'] + artist_info['total_albums'] = len(items) + + else: + print("Connection error") + + return artist_info + +def choose_band(band1:dict,band2:dict)->str: + band1_count = 0 + band2_count = 0 + if band1['popularity'] > band2['popularity']: + band1_count += 1 + elif band1['popularity'] < band2['popularity']: + band2_count += 1 + + if band1['followers'] > band2['followers']: + band1_count += 1 + elif band1['followers'] < band2['followers']: + band2_count +=1 + + if band1['songs_popularity'] > band2['songs_popularity']: + band1_count += 1 + elif band1['songs_popularity'] < band2['songs_popularity']: + band2_count += 1 + + if band1['total_albums'] > band2['total_albums'] : + band1_count += 1 + elif band1['total_albums'] < band2['total_albums']: + band2_count += 1 + + if band1_count > band2_count: + return band1['name'] + else: + return band2['name'] + + + +oasis_id = "2DaxqgrOhkeH0fpeiQq2f4" +linkin_park_id = "6XyY86QOPPrYVGvF9ch6wz" + +oasis_details = getGroupDetails(oasis_id,"Oasis") +print('Details for Oasis',oasis_details) +linkin_park = getGroupDetails(linkin_park_id,"Linkin Park") +print("Linkin Park details", linkin_park) + +print("Bast band is: ", choose_band(oasis_details,linkin_park)) \ No newline at end of file From 7567096a843d76c70d2d330960ac2b8075dadd56 Mon Sep 17 00:00:00 2001 From: SooHav Date: Sun, 15 Sep 2024 19:09:33 -0300 Subject: [PATCH 268/539] #36 - python --- .../python/SooHav.py | 93 ++++++++++++ .../python/SooHav.py | 143 ++++++++++++++++++ 2 files changed, 236 insertions(+) create mode 100644 Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/SooHav.py create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/SooHav.py diff --git a/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/SooHav.py b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/SooHav.py new file mode 100644 index 0000000000..f879a4c714 --- /dev/null +++ b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/SooHav.py @@ -0,0 +1,93 @@ +# 35 REPARTIENDO LOS ANILLOS DE PODER +import random +from sympy import isprime +from abc import ABC, abstractmethod + + +class Anillos(ABC): + @abstractmethod + def calcular(self, numero_anillos): + pass + + +class AnillosElfos(Anillos): + def calcular(self, cantidad_anillos): + # Los elfos reciben un número impar de anillos + if cantidad_anillos < 1: + raise ValueError( + "No hay suficientes anillos para asignar a los Elfos.") + while True: + elfos = random.randint(1, cantidad_anillos-2) + if elfos % 2 == 1: + return elfos + + +class AnillosEnanos(Anillos): + def calcular(self, cantidad_anillos): + # Los enanos reciben un número primo de anillos + while True: + primo = random.randint(2, cantidad_anillos-3) + if isprime(primo): + return primo + + +class AnillosHombres(Anillos): + def calcular(self, cantidad_anillos): + # Los hombres reciben un número par de anillos + if cantidad_anillos < 2: + raise ValueError( + "No hay suficientes anillos para asignar a los hombres.") + while True: + hombres = random.randint(2, cantidad_anillos) + if hombres % 2 == 0: + return hombres + + +class RepartoAnillos: + def __init__(self, numero_anillos): + self.sauron = 1 + self.elfos = None + self.enanos = None + self.hombres = None + self.numero_anillos = numero_anillos + self.intentos = 0 + + def repartir_anillos(self): + while True: + self.intentos += 1 + calculador_elfos = AnillosElfos() + calculador_enanos = AnillosEnanos() + calculador_hombres = AnillosHombres() + + self.enanos = calculador_enanos.calcular( + self.numero_anillos - self.sauron) + self.elfos = calculador_elfos.calcular( + self.numero_anillos - self.sauron - self.enanos) + self.hombres = calculador_hombres.calcular( + self.numero_anillos - self.sauron - self.enanos - self.elfos) + + if self.calcular_suma_total() == self.numero_anillos: + print(f"Solución encontrada en {self.intentos} intentos") + break + + if self.intentos > 2000: + print("No se encontró solución después de 2000 intentos") + break + + def calcular_suma_total(self): + return self.sauron + self.elfos + self.enanos + self.hombres + + def __str__(self): + if self.intentos > 2000: + return (f"\nReparto de anillos:\nSauron: \nElfos: \n" + f"Enanos: \nHombres: ") + else: + return (f"\nReparto de anillos:\nSauron: {self.sauron}\nElfos: {self.elfos}\n" + f"Enanos: {self.enanos}\nHombres: {self.hombres}") + + +# Ejecutar el reparto de anillos +numero_anillos = int(input("Ingrese el número total de anillos: ")) +anillos_del_poder = RepartoAnillos(numero_anillos) +anillos_del_poder.repartir_anillos() +print(anillos_del_poder) diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/SooHav.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/SooHav.py new file mode 100644 index 0000000000..752bc19b6e --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/SooHav.py @@ -0,0 +1,143 @@ +# 36 EL SOMBRERO SELECCIONADOR + +def menu(): + while True: + print("\nMenú:") + print("1. Responder preguntas del sombrero") + print("2. Calcular puntos") + print("3. Asignar casa") + print("4. Salir") + opcion = input("Ingrese una opción: ") + try: + return int(opcion) + except ValueError: + print("Opción inválida. Por favor, ingrese un número entero.") + + +lista_preguntas = { + "1. ¿Qué es una base de datos NoSQL y cuándo es preferible utilizarla en lugar de una base de datos relacional?": { + "a": {"respuesta": "Una base de datos NoSQL es un sistema de gestión de bases de datos que no se basa en el modelo relacional tradicional de tablas, filas y columnas.", "puntaje": 10, "habilidad": "Data"}, + "b": {"respuesta": "Las bases de datos NoSQL son ideales para aplicaciones que requieren almacenar grandes cantidades de datos con alta disponibilidad y baja latencia.", "puntaje": 10, "habilidad": "Backend"}, + "c": {"respuesta": "Las bases de datos NoSQL ofrecen una variedad de modelos de datos, como documentos, clave-valor, gráficos y columnas, lo que permite elegir el modelo más adecuado para cada tipo de aplicación.", "puntaje": 10, "habilidad": "Data"}, + "d": {"respuesta": "Las bases de datos NoSQL son más lentas y menos eficientes que las bases de datos relacionales.", "puntaje": -5, "habilidad": None} + }, + "2. ¿Por qué es importante utilizar un sistema de control de versiones como Git?": { + "a": {"respuesta": "Git permite realizar un seguimiento de los cambios en el código a lo largo del tiempo.", "puntaje": 5, "habilidad": "Backend"}, + "b": {"respuesta": "Git facilita la colaboración entre desarrolladores y permite revertir cambios si es necesario.", "puntaje": 10, "habilidad": "Backend"}, + "c": {"respuesta": "Git solo se utiliza para almacenar código fuente.", "puntaje": -5, "habilidad": None}, + "d": {"respuesta": "Git permite resolver conflictos de manera eficiente cuando varios desarrolladores modifican el mismo archivo al mismo tiempo.", "puntaje": 10, "habilidad": "Backend"} + }, + "3. ¿Qué herramientas y plataformas se utilizan para el despliegue de aplicaciones web y móviles?": { + "a": {"respuesta": "Docker, Kubernetes.", "puntaje": 10, "habilidad": "Backend"}, + "b": {"respuesta": "AWS, Azure, GCP.", "puntaje": 10, "habilidad": "Backend"}, + "c": {"respuesta": "Flutter, React Native.", "puntaje": 10, "habilidad": "Mobile"}, + "d": {"respuesta": "VSCode.", "puntaje": -25, "habilidad": None} + }, + "4. ¿Cuáles son las operaciones más frecuentes que se realizan con Git?": { + "a": {"respuesta": "Clonar.", "puntaje": 5, "habilidad": "Backend"}, + "b": {"respuesta": "Commit.", "puntaje": 5, "habilidad": "Backend"}, + "c": {"respuesta": "Push y Pull.", "puntaje": 10, "habilidad": "Backend"}, + "d": {"respuesta": "Rebase.", "puntaje": -5, "habilidad": None} + }, + "5. ¿Cuáles son las ventajas de utilizar la nube?": { + "a": {"respuesta": "Escalabilidad.", "puntaje": 10, "habilidad": "Data"}, + "b": {"respuesta": "Flexibilidad.", "puntaje": 10, "habilidad": "Backend"}, + "c": {"respuesta": "Reducción de costos.", "puntaje": 10, "habilidad": "Data"}, + "d": {"respuesta": "Menor seguridad.", "puntaje": -15, "habilidad": None} + }, + "6. ¿Cuáles son los diferentes tipos de pruebas que se pueden realizar en un software?": { + "a": {"respuesta": "Las pruebas unitarias verifican el funcionamiento correcto de unidades individuales de código.", "puntaje": 10, "habilidad": "Backend"}, + "b": {"respuesta": "Las pruebas de integración aseguran que los diferentes componentes de la aplicación interactúen correctamente.", "puntaje": 10, "habilidad": "Backend"}, + "c": {"respuesta": "Las pruebas de aceptación validan que el software cumpla con los requisitos del usuario.", "puntaje": 10, "habilidad": "Frontend"}, + "d": {"respuesta": "Las pruebas manuales permiten detectar errores que las pruebas automatizadas no pueden encontrar.", "puntaje": -5, "habilidad": None} + }, + "7. ¿Cuáles son las principales diferencias entre HTML, CSS y JavaScript?": { + "a": {"respuesta": "HTML estructura el contenido de una página web, CSS define su estilo y apariencia, y JavaScript agrega interactividad y dinamismo.", "puntaje": 10, "habilidad": "Frontend"}, + "b": {"respuesta": "HTML, CSS y JavaScript son sinónimos y se utilizan indistintamente para crear páginas web.", "puntaje": -5, "habilidad": None}, + "c": {"respuesta": "HTML es el esqueleto, CSS la piel y JavaScript el cerebro de una página web.", "puntaje": 10, "habilidad": "Frontend"}, + "d": {"respuesta": "JavaScript puede modificar el DOM (Document Object Model) creado por HTML y CSS para cambiar el contenido y el estilo de una página en tiempo real.", "puntaje": 10, "habilidad": "Frontend"} + }, + "8. ¿Qué es un API y cuál es su función en una aplicación?": { + "a": {"respuesta": "Un API (Interfaz de Programación de Aplicaciones) es un conjunto de reglas y especificaciones que permiten que diferentes aplicaciones se comuniquen entre sí.", "puntaje": 10, "habilidad": "Backend"}, + "b": {"respuesta": "En una aplicación web, el frontend utiliza un API para solicitar datos al backend y mostrarlos al usuario.", "puntaje": 10, "habilidad": "Frontend"}, + "c": {"respuesta": "Un API es un lenguaje de programación utilizado para crear aplicaciones web.", "puntaje": -15, "habilidad": None}, + "d": {"respuesta": "Las APIs permiten que diferentes aplicaciones se integren y compartan datos.", "puntaje": 10, "habilidad": "Backend"} + }, + "9. ¿Cuáles son los principales métodos HTTP?": { + "a": {"respuesta": "GET se utiliza para obtener datos.", "puntaje": 10, "habilidad": "Frontend"}, + "b": {"respuesta": "POST para crear nuevos recursos.", "puntaje": 10, "habilidad": "Backend"}, + "c": {"respuesta": "PUT para actualizar recursos existentes.", "puntaje": 10, "habilidad": "Backend"}, + "d": {"respuesta": "DELETE para eliminar recursos.", "puntaje": 10, "habilidad": "Backend"} + }, + "10. ¿Cuál de las siguientes afirmaciones sobre el DOM (Document Object Model) es CORRECTA?": { + "a": {"respuesta": "El DOM es una estructura jerárquica que representa los elementos de una página web como objetos.", "puntaje": 10, "habilidad": "Frontend"}, + "b": {"respuesta": "JavaScript es el lenguaje principal para manipular el DOM y crear interfaces interactivas.", "puntaje": 10, "habilidad": "Frontend"}, + "c": {"respuesta": "El DOM es estatico y no se actualiza constantemente.", "puntaje": -10, "habilidad": None}, + "d": {"respuesta": "JavaScript puede crear, modificar y eliminar elementos del DOM.", "puntaje": 10, "habilidad": "Frontend"} + } +} + +resultados = [] +puntaje_total = 0 +alumno = "" + +while True: + opcion = menu() + + if opcion == 1: + if not alumno: + alumno = input( + "Si quieres saber tu casa, ingresa tu nombre: ").lower() + print(f"Soy el sombrero seleccionador! { + alumno}, necesito que respondas algunas preguntas!\n") + + # Mostrar preguntas + if not resultados: + for pregunta, respuestas in lista_preguntas.items(): + print(pregunta) + for letra, detalles in respuestas.items(): + print(f"{letra}) {detalles['respuesta']}") + print() + + puntos = input(f"Ingrese su respuesta para '{ + pregunta}' (a, b, c o d): ") + print() + if puntos in respuestas: + puntaje = respuestas[puntos]["puntaje"] + resultados.append(puntaje) + else: + print("Respuesta no válida, intenta nuevamente.") + + else: + print("Ya has respondido las preguntas. Pasa a la opción 2 para calcular tus puntos o la opción 3 para asignar casa.\n") + + elif opcion == 2: + if resultados: + puntaje_total = sum(resultados) + print(f"¡Excelente, {alumno}! Tu puntaje total es: { + puntaje_total}") + else: + print("Primero responde las preguntas en la opción 1.\n") + + elif opcion == 3: + if puntaje_total: + if puntaje_total > 90: + print(f"{alumno}, te he asignado a la casa Mobile.") + elif 70 < puntaje_total <= 90: + print(f"{alumno}, te he asignado a la casa Backend.") + elif 60 < puntaje_total <= 70: + print(f"{alumno}, te he asignado a la casa Frontend.") + else: + print(f"{alumno}, te he asignado a la casa Data.") + else: + print("Primero calcula tu puntaje en la opción 2.\n") + + if puntaje_total: + if 85 < puntaje_total < 95 or 65 < puntaje_total < 75 or 55 < puntaje_total < 65: + print(f"La decisión fue muy difición de tomar!") + + elif opcion == 4: + print("¡Hasta el próximo año!") + break + else: + print("Opción no válida. Intenta nuevamente.") From b478b4e04e137ee92b3ee87bcc0cec24d1070c62 Mon Sep 17 00:00:00 2001 From: adra-dev Date: Sun, 15 Sep 2024 17:25:37 -0600 Subject: [PATCH 269/539] #30 - Python --- Roadmap/30 - SOLID DIP/python/adra-dev.py | 150 ++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 Roadmap/30 - SOLID DIP/python/adra-dev.py diff --git a/Roadmap/30 - SOLID DIP/python/adra-dev.py b/Roadmap/30 - SOLID DIP/python/adra-dev.py new file mode 100644 index 0000000000..552dd7c563 --- /dev/null +++ b/Roadmap/30 - SOLID DIP/python/adra-dev.py @@ -0,0 +1,150 @@ +""" +EJERCICIO: +Explora el "Principio SOLID de Inversión de Dependencias (Dependency +Inversion Principle, DIP)" y crea un ejemplo simple donde se muestre +su funcionamiento de forma correcta e incorrecta. + +DIFICULTAD EXTRA(opcional): +Crea un sistema de notificaciones. + +Requisitos: +1. El sistema puede enviar Email, PUSH y SMS (implementaciones +específicas). +2. El sistema de notificaciones no puede depender de las +implementaciones específicas. +Instrucciones: +1. Crea la interfaz o clase abstracta. +2. Desarrolla las implementaciones específicas. +3. Crea el sistema de notificaciones usando el DIP. +4. Desarrolla un código que compruebe que se cumple el principio. + +by adra-dev +""" + +""" +Dependency Inversion Principle (DIP): +El principio de inversión de dependencias (DIP) es el último +principio del conjunto SOLID. Este principio establece que: + + "Las abstracciones no deben depender de detalles. Los detalles + deben depender de las abstracciones." + +documentacion:"https://realpython.com/solid-principles-python/" + +Considera el siguiente ejemplo: +Supongamos que está creando una aplicación y tiene una clase FrontEnd +para mostrar datos a los usuarios de una manera amigable. Actualmente, +la aplicación obtiene sus datos de una base de datos, por lo que +termina con el siguiente código +""" + +# app_dip.py + +class FrontEnd: + def __init__(self, back_end): + self.back_end = back_end + + def display_data(self): + data = self.back_end.get_data_from_database() + print("Display data:", data) + +class BackEnd: + def get_data_from_database(self): + return "Data from the database" + +""" +En este ejemplo, la clase FrontEnd depende de la clase BackEnd y de +su implementación concreta. Se puede decir que ambas clases están +estrechamente acopladas. + +Este acoplamiento puede dar lugar a problemas de escalabilidad. Por +ejemplo, supongamos que tu aplicación está creciendo rápidamente y +quieres que pueda leer datos de una API de REST. ¿Cómo lo harías? + +Puede pensar en agregar un nuevo método al backend para recuperar los +datos de la API REST. Sin embargo, eso también requerirá que +modifique el FrontEnd, que debe estar cerrado a la modificación, de +acuerdo con el principio de abierto-cerrado. + +Para solucionar el problema, puede aplicar el principio de inversión +de dependencias y hacer que sus clases dependan de abstracciones en +lugar de implementaciones concretas como BackEnd. En este ejemplo +específico, puede introducir una clase DataSource que proporcione la +interfaz que se usará en sus clases concretas: +""" + +# app_dip.py + +from abc import ABC, abstractmethod + +class FrontEnd: + def __init__(self, data_source): + self.data_source = data_source + + def display_data(self): + data = self.data_source.get_data() + print("Display data:", data) + +class DataSource(ABC): + @abstractmethod + def get_data(self): + pass + +class Database(DataSource): + def get_data(self): + return "Data from the database" + +class API(DataSource): + def get_data(self): + return "Data from the API" + + +""" +En este rediseño de las clases, se ha agregado una clase DataSource +como una abstracción que proporciona la interfaz necesaria, o el +método .get_data(). Observe cómo FrontEnd ahora depende de la +interfaz proporcionada por DataSource, que es una abstracción. +""" + +db_front_end = FrontEnd(Database()) +db_front_end.display_data() + +api_front_end = FrontEnd(API()) +api_front_end.display_data() + + +""" +Extra +""" +class NotificationInterface(ABC): + @abstractmethod + def get_notification(self): + pass + +class Email(NotificationInterface): + def get_notification(self): + return "Email notification" + +class PUSH(NotificationInterface): + def get_notification(self): + return "PUSH notification" + +class SMS(NotificationInterface): + def get_notification(self): + return "SMS notification" + + +class NotificationSystem(ABC): + def __init__(self, notification_type): + self.notification_type = notification_type + + def display_notification(self): + notification = self.notification_type.get_notification() + print("Display data:", notification) + +notifiatcion_email = NotificationSystem(Email()) +notifiatcion_email.display_notification() +notifiatcion_push = NotificationSystem(PUSH()) +notifiatcion_push.display_notification() +notifiatcion_sms = NotificationSystem(SMS()) +notifiatcion_sms.display_notification() \ No newline at end of file From d6056250f4556e872f25ff7be9ce0b2cdc937683 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Sun, 15 Sep 2024 18:40:17 -0500 Subject: [PATCH 270/539] #06 - Java --- .../java/martinbohorquez.java | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 Roadmap/06 - RECURSIVIDAD/java/martinbohorquez.java diff --git a/Roadmap/06 - RECURSIVIDAD/java/martinbohorquez.java b/Roadmap/06 - RECURSIVIDAD/java/martinbohorquez.java new file mode 100644 index 0000000000..a0a5267bd2 --- /dev/null +++ b/Roadmap/06 - RECURSIVIDAD/java/martinbohorquez.java @@ -0,0 +1,77 @@ +/** + * #06 RECURSIVIDAD + * + * @author martinbohorquez + */ +public class martinbohorquez { + private static int num; + private static int counter; + + private static void recursividadDesc(int inf, int sup) { + if (inf <= sup) { + System.out.printf("%d. %d%n", ++counter, sup--); + recursividadDesc(inf, sup); + } + } + + private static void imprimirRecursividadDesc(int inf, int sup) { + System.out.printf("Inicio de iteración recursividad de números del %d al %d:%n", inf, sup); + recursividadDesc(inf, sup); + System.out.printf("Fin de iteración recursividad de números del %d al %d!%n", inf, sup); + counter = 0; + } + + private static Long factorial(int num) { + if (num == 0) return 1L; + return num * factorial(--num); + } + + private static void imprimirFactorial(int num) { + if (num < 0) System.out.printf("El número %d es negativo. Debe ingresar números enteros positivos!%n", num); + else System.out.printf("El factorial de %d es: %d%n", num, factorial(num)); + } + + private static Long fibonacci(int num) { + if (num == 1) return 0L; + else if (num == 2) return 1L; + return fibonacci(--num) + fibonacci(--num); + } + + private static void imprimirFibonacci(int num) { + if (num <= 0) System.out.printf("El número %d debe ser entero positivo!%n", num); + else System.out.printf("El valor del elemento %d° en la serie de Fibonacci es: %d%n", num, fibonacci(num)); + } + + private static int solveHanoi(int n, char source, char auxiliary, char destination) { + if (n == 1) { + System.out.println("Move disk 1 from " + source + " to " + destination); + return ++counter; + } + solveHanoi(n - 1, source, destination, auxiliary); + System.out.println("Move disk " + n + " from " + source + " to " + destination); + solveHanoi(n - 1, auxiliary, source, destination); + return ++counter; + } + + public static void main(String[] args) { + System.out.println("IMPRIMIR RECURSIVIDAD:"); + imprimirRecursividadDesc(-30, -20); + imprimirRecursividadDesc(30, 60); + /* + * DIFICULTAD EXTRA + */ + // Factorial + System.out.println("CALCULAR FACTORIAL:"); + imprimirFactorial(-20); + imprimirFactorial(0); + imprimirFactorial(20); + // Fibonacci + System.out.println("CALCULAR FIBONACCI:"); + imprimirFibonacci(-5); + imprimirFibonacci(0); + imprimirFibonacci(5); + imprimirFibonacci(10); + System.out.printf("La cantidad de movimientos necesarios fue: %d%n", + solveHanoi(5, 'A', 'B', 'C')); + } +} From 2817bfe0373b22eddc9c2b75ba10a3b885aa09f9 Mon Sep 17 00:00:00 2001 From: mouredev Date: Mon, 16 Sep 2024 00:16:02 +0000 Subject: [PATCH 271/539] Update stats --- Roadmap/stats.json | 1382 ++++++++++++++++++++++---------------------- 1 file changed, 697 insertions(+), 685 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index b008ef6b0e..0234cb1734 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,18 +1,18 @@ { "challenges_total": 38, "languages_total": 48, - "files_total": 7017, - "users_total": 1176, + "files_total": 7031, + "users_total": 1178, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1281 + "count": 1282 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 778 + "count": 781 }, { "order": 3, @@ -22,7 +22,7 @@ { "order": 4, "name": "03 - ESTRUCTURAS DE DATOS", - "count": 401 + "count": 402 }, { "order": 5, @@ -47,7 +47,7 @@ { "order": 9, "name": "08 - CLASES", - "count": 225 + "count": 227 }, { "order": 10, @@ -97,7 +97,7 @@ { "order": 19, "name": "18 - CONJUNTOS", - "count": 113 + "count": 115 }, { "order": 20, @@ -107,7 +107,7 @@ { "order": 21, "name": "20 - PETICIONES HTTP", - "count": 98 + "count": 99 }, { "order": 22, @@ -192,51 +192,51 @@ { "order": 38, "name": "37 - OASIS VS LINKIN PARK", - "count": 9 + "count": 13 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 3021, - "percentage": 43.05 + "count": 3029, + "percentage": 43.08 }, { "order": 2, "name": "javascript", - "count": 1389, - "percentage": 19.79 + "count": 1390, + "percentage": 19.77 }, { "order": 3, "name": "java", - "count": 638, + "count": 639, "percentage": 9.09 }, { "order": 4, "name": "typescript", "count": 312, - "percentage": 4.45 + "percentage": 4.44 }, { "order": 5, "name": "c#", "count": 254, - "percentage": 3.62 + "percentage": 3.61 }, { "order": 6, "name": "kotlin", "count": 220, - "percentage": 3.14 + "percentage": 3.13 }, { "order": 7, "name": "go", - "count": 215, - "percentage": 3.06 + "count": 216, + "percentage": 3.07 }, { "order": 8, @@ -247,14 +247,14 @@ { "order": 9, "name": "php", - "count": 155, - "percentage": 2.21 + "count": 156, + "percentage": 2.22 }, { "order": 10, "name": "c++", - "count": 116, - "percentage": 1.65 + "count": 117, + "percentage": 1.66 }, { "order": 11, @@ -283,8 +283,8 @@ { "order": 15, "name": "vb.net", - "count": 37, - "percentage": 0.53 + "count": 38, + "percentage": 0.54 }, { "order": 16, @@ -302,7 +302,7 @@ "order": 18, "name": "pascal", "count": 20, - "percentage": 0.29 + "percentage": 0.28 }, { "order": 19, @@ -495,7 +495,7 @@ { "order": 2, "name": "kenysdev", - "count": 150, + "count": 151, "languages": 4 }, { @@ -710,46 +710,46 @@ }, { "order": 38, + "name": "qv1ko", + "count": 35, + "languages": 4 + }, + { + "order": 39, + "name": "raynerpv2022", + "count": 35, + "languages": 2 + }, + { + "order": 40, "name": "soohav", "count": 35, "languages": 1 }, { - "order": 39, + "order": 41, "name": "oriaj3", "count": 35, "languages": 1 }, { - "order": 40, + "order": 42, "name": "angelsanchezt", "count": 34, "languages": 12 }, { - "order": 41, + "order": 43, "name": "rikmij", "count": 34, "languages": 2 }, { - "order": 42, + "order": 44, "name": "fborjalv", "count": 34, "languages": 1 }, - { - "order": 43, - "name": "qv1ko", - "count": 33, - "languages": 4 - }, - { - "order": 44, - "name": "raynerpv2022", - "count": 33, - "languages": 2 - }, { "order": 45, "name": "worlion", @@ -842,33 +842,33 @@ }, { "order": 60, - "name": "nightblockchain30", + "name": "isaacus98", "count": 26, - "languages": 2 + "languages": 4 }, { "order": 61, - "name": "caverobrandon", + "name": "nightblockchain30", "count": 26, - "languages": 1 + "languages": 2 }, { "order": 62, - "name": "ggilperez", + "name": "caverobrandon", "count": 26, "languages": 1 }, { "order": 63, - "name": "simonguzman", + "name": "ggilperez", "count": 26, "languages": 1 }, { "order": 64, - "name": "isaacus98", - "count": 25, - "languages": 4 + "name": "simonguzman", + "count": 26, + "languages": 1 }, { "order": 65, @@ -981,7 +981,7 @@ { "order": 83, "name": "gordo-master", - "count": 20, + "count": 21, "languages": 1 }, { @@ -1886,415 +1886,415 @@ }, { "order": 234, - "name": "danilo0203", + "name": "martinbohorquez", "count": 6, "languages": 2 }, { "order": 235, - "name": "isaias-alt", + "name": "danilo0203", "count": 6, "languages": 2 }, { "order": 236, - "name": "luterfloyd", + "name": "isaias-alt", "count": 6, "languages": 2 }, { "order": 237, - "name": "kronstadt-lambda", + "name": "luterfloyd", "count": 6, "languages": 2 }, { "order": 238, - "name": "troleomotor10", + "name": "kronstadt-lambda", "count": 6, "languages": 2 }, { "order": 239, - "name": "oixild", + "name": "troleomotor10", "count": 6, "languages": 2 }, { "order": 240, - "name": "luisk0706", + "name": "oixild", "count": 6, "languages": 2 }, { "order": 241, - "name": "rserradev", + "name": "luisk0706", "count": 6, "languages": 2 }, { "order": 242, - "name": "roswer13", + "name": "rserradev", "count": 6, "languages": 2 }, { "order": 243, - "name": "glossypath", + "name": "roswer13", "count": 6, - "languages": 1 + "languages": 2 }, { "order": 244, - "name": "guillemduno", + "name": "glossypath", "count": 6, "languages": 1 }, { "order": 245, - "name": "mxtrar23", + "name": "guillemduno", "count": 6, "languages": 1 }, { "order": 246, - "name": "dannymarperone", + "name": "mxtrar23", "count": 6, "languages": 1 }, { "order": 247, - "name": "facundo-muoio", + "name": "dannymarperone", "count": 6, "languages": 1 }, { "order": 248, - "name": "lazar171717ech", + "name": "facundo-muoio", "count": 6, "languages": 1 }, { "order": 249, - "name": "eduhumanes91", + "name": "lazar171717ech", "count": 6, "languages": 1 }, { "order": 250, - "name": "abascal92", + "name": "eduhumanes91", "count": 6, "languages": 1 }, { "order": 251, - "name": "blancowilson", + "name": "abascal92", "count": 6, "languages": 1 }, { "order": 252, - "name": "eamartin96", + "name": "blancowilson", "count": 6, "languages": 1 }, { "order": 253, - "name": "dafi02", + "name": "eamartin96", "count": 6, "languages": 1 }, { "order": 254, - "name": "gliadev", + "name": "dafi02", "count": 6, "languages": 1 }, { "order": 255, - "name": "wolffcode", + "name": "gliadev", "count": 6, "languages": 1 }, { "order": 256, - "name": "yeisonagm", + "name": "wolffcode", "count": 6, "languages": 1 }, { "order": 257, - "name": "bryan112094", - "count": 5, - "languages": 3 + "name": "yeisonagm", + "count": 6, + "languages": 1 }, { "order": 258, - "name": "alabacw74", - "count": 5, - "languages": 3 + "name": "d1d4cum", + "count": 6, + "languages": 1 }, { "order": 259, - "name": "jalivur", + "name": "bryan112094", "count": 5, - "languages": 2 + "languages": 3 }, { "order": 260, - "name": "icedrek", + "name": "alabacw74", "count": 5, - "languages": 2 + "languages": 3 }, { "order": 261, - "name": "vmatmarco", + "name": "jalivur", "count": 5, "languages": 2 }, { "order": 262, - "name": "alejandrodave", + "name": "icedrek", "count": 5, "languages": 2 }, { "order": 263, - "name": "espinoleandroo", + "name": "vmatmarco", "count": 5, "languages": 2 }, { "order": 264, - "name": "andresmendozaf", + "name": "alejandrodave", "count": 5, "languages": 2 }, { "order": 265, - "name": "martinbohorquez", + "name": "espinoleandroo", "count": 5, "languages": 2 }, { "order": 266, - "name": "eloychavezdev", + "name": "andresmendozaf", "count": 5, - "languages": 1 + "languages": 2 }, { "order": 267, - "name": "drvito1977", + "name": "eloychavezdev", "count": 5, "languages": 1 }, { "order": 268, - "name": "vasilealexandru02", + "name": "drvito1977", "count": 5, "languages": 1 }, { "order": 269, - "name": "esaens12", + "name": "vasilealexandru02", "count": 5, "languages": 1 }, { "order": 270, - "name": "victormugo", + "name": "esaens12", "count": 5, "languages": 1 }, { "order": 271, - "name": "adridoce", + "name": "victormugo", "count": 5, "languages": 1 }, { "order": 272, - "name": "vixito", + "name": "adridoce", "count": 5, "languages": 1 }, { "order": 273, - "name": "danielbustos342", + "name": "vixito", "count": 5, "languages": 1 }, { "order": 274, - "name": "douglasdiazr", + "name": "danielbustos342", "count": 5, "languages": 1 }, { "order": 275, - "name": "n1sek", + "name": "douglasdiazr", "count": 5, "languages": 1 }, { "order": 276, - "name": "robmxz", + "name": "n1sek", "count": 5, "languages": 1 }, { "order": 277, - "name": "d4-n1", + "name": "robmxz", "count": 5, "languages": 1 }, { "order": 278, - "name": "lauracastrillonmp", + "name": "d4-n1", "count": 5, "languages": 1 }, { "order": 279, - "name": "joanfv-git", + "name": "lauracastrillonmp", "count": 5, "languages": 1 }, { "order": 280, - "name": "yharyarias", + "name": "joanfv-git", "count": 5, "languages": 1 }, { "order": 281, - "name": "jorgeadamowicz", + "name": "yharyarias", "count": 5, "languages": 1 }, { "order": 282, - "name": "franz-arzapalo", + "name": "jorgeadamowicz", "count": 5, "languages": 1 }, { "order": 283, - "name": "d0ubt0", + "name": "franz-arzapalo", "count": 5, "languages": 1 }, { "order": 284, - "name": "gmbarrios", + "name": "d0ubt0", "count": 5, "languages": 1 }, { "order": 285, - "name": "santiago434c", + "name": "gmbarrios", "count": 5, "languages": 1 }, { "order": 286, - "name": "augustdev2003", + "name": "santiago434c", "count": 5, "languages": 1 }, { "order": 287, - "name": "alberba", + "name": "augustdev2003", "count": 5, "languages": 1 }, { "order": 288, - "name": "gabrielramos02", + "name": "alberba", "count": 5, "languages": 1 }, { "order": 289, - "name": "thezhizn", + "name": "gabrielramos02", "count": 5, "languages": 1 }, { "order": 290, - "name": "jose-luis-lanza", + "name": "thezhizn", "count": 5, "languages": 1 }, { "order": 291, - "name": "nomellamodante", + "name": "jose-luis-lanza", "count": 5, "languages": 1 }, { "order": 292, - "name": "karolle", + "name": "nomellamodante", "count": 5, "languages": 1 }, { "order": 293, - "name": "jcrodmir", + "name": "karolle", "count": 5, "languages": 1 }, { "order": 294, - "name": "alvarofernandezavalos", + "name": "jcrodmir", "count": 5, "languages": 1 }, { "order": 295, - "name": "lucasag01", + "name": "alvarofernandezavalos", "count": 5, "languages": 1 }, { "order": 296, - "name": "thaishdz", + "name": "lucasag01", "count": 5, "languages": 1 }, { "order": 297, - "name": "bastianalq", + "name": "thaishdz", "count": 5, "languages": 1 }, { "order": 298, - "name": "w00k", + "name": "bastianalq", "count": 5, "languages": 1 }, { "order": 299, - "name": "mohamedelderkaoui", + "name": "w00k", "count": 5, "languages": 1 }, { "order": 300, - "name": "boterop", + "name": "mohamedelderkaoui", "count": 5, "languages": 1 }, { "order": 301, - "name": "rafacv23", + "name": "boterop", "count": 5, "languages": 1 }, { "order": 302, - "name": "d1d4cum", + "name": "rafacv23", "count": 5, "languages": 1 }, @@ -4226,3318 +4226,3330 @@ }, { "order": 624, - "name": "porto1090", + "name": "whiterunjarl", "count": 2, "languages": 1 }, { "order": 625, - "name": "johannhsdev", + "name": "porto1090", "count": 2, "languages": 1 }, { "order": 626, - "name": "jago86", + "name": "johannhsdev", "count": 2, "languages": 1 }, { "order": 627, - "name": "diegokarabin", + "name": "jago86", "count": 2, "languages": 1 }, { "order": 628, - "name": "gugliio", + "name": "diegokarabin", "count": 2, "languages": 1 }, { "order": 629, - "name": "kcx46", + "name": "gugliio", "count": 2, "languages": 1 }, { "order": 630, - "name": "nachodev7", + "name": "kcx46", "count": 2, "languages": 1 }, { "order": 631, - "name": "fernandoatello", + "name": "nachodev7", "count": 2, "languages": 1 }, { "order": 632, - "name": "pablosalme", + "name": "fernandoatello", "count": 2, "languages": 1 }, { "order": 633, - "name": "jsacristanbeltri", + "name": "pablosalme", "count": 2, "languages": 1 }, { "order": 634, - "name": "baauus", + "name": "jsacristanbeltri", "count": 2, "languages": 1 }, { "order": 635, - "name": "s384", + "name": "baauus", "count": 2, "languages": 1 }, { "order": 636, - "name": "lauradiazm29", + "name": "s384", "count": 2, "languages": 1 }, { "order": 637, - "name": "pakomor", + "name": "javitron100", "count": 2, "languages": 1 }, { "order": 638, - "name": "adogdev", + "name": "lauradiazm29", "count": 2, "languages": 1 }, { "order": 639, - "name": "eriickm", + "name": "pakomor", "count": 2, "languages": 1 }, { "order": 640, - "name": "christiancoc", + "name": "adogdev", "count": 2, "languages": 1 }, { "order": 641, - "name": "rojasricoo", + "name": "eriickm", "count": 2, "languages": 1 }, { "order": 642, - "name": "inf015", + "name": "christiancoc", "count": 2, "languages": 1 }, { "order": 643, - "name": "csaraugusto2", + "name": "josegago27", "count": 2, "languages": 1 }, { "order": 644, - "name": "zalazarmartin", + "name": "rojasricoo", "count": 2, "languages": 1 }, { "order": 645, - "name": "ziellucio01", + "name": "inf015", "count": 2, "languages": 1 }, { "order": 646, - "name": "dota43ver", + "name": "csaraugusto2", "count": 2, "languages": 1 }, { "order": 647, - "name": "fjsubero", + "name": "zalazarmartin", "count": 2, "languages": 1 }, { "order": 648, - "name": "julind0", + "name": "ziellucio01", "count": 2, "languages": 1 }, { "order": 649, - "name": "jmontoyac", + "name": "dota43ver", "count": 2, "languages": 1 }, { "order": 650, - "name": "dariangl", + "name": "fjsubero", "count": 2, "languages": 1 }, { "order": 651, - "name": "soydaviddev", + "name": "julind0", "count": 2, "languages": 1 }, { "order": 652, - "name": "sofia-d-p", + "name": "jmontoyac", "count": 2, "languages": 1 }, { "order": 653, - "name": "e-techgod", + "name": "dariangl", "count": 2, "languages": 1 }, { "order": 654, - "name": "aboredllama", + "name": "soydaviddev", "count": 2, "languages": 1 }, { "order": 655, - "name": "nevaito", + "name": "sofia-d-p", "count": 2, "languages": 1 }, { "order": 656, - "name": "josue-py", + "name": "e-techgod", "count": 2, "languages": 1 }, { "order": 657, - "name": "nach012", + "name": "aboredllama", "count": 2, "languages": 1 }, { "order": 658, - "name": "dans182", + "name": "nevaito", "count": 2, "languages": 1 }, { "order": 659, - "name": "freyfonseca", + "name": "josue-py", "count": 2, "languages": 1 }, { "order": 660, - "name": "aegpgrafologo", + "name": "nach012", "count": 2, "languages": 1 }, { "order": 661, - "name": "alejandrovelasquezr", + "name": "dans182", "count": 2, "languages": 1 }, { "order": 662, - "name": "fabianpa505", + "name": "freyfonseca", "count": 2, "languages": 1 }, { "order": 663, - "name": "carlosmarte23", + "name": "aegpgrafologo", "count": 2, "languages": 1 }, { "order": 664, - "name": "anblackter", + "name": "alejandrovelasquezr", "count": 2, "languages": 1 }, { "order": 665, - "name": "steven9708m", + "name": "fabianpa505", "count": 2, "languages": 1 }, { "order": 666, - "name": "tic4", + "name": "carlosmarte23", "count": 2, "languages": 1 }, { "order": 667, - "name": "josephfaster", + "name": "anblackter", "count": 2, "languages": 1 }, { "order": 668, - "name": "gregfc95", + "name": "steven9708m", "count": 2, "languages": 1 }, { "order": 669, - "name": "victore16", + "name": "tic4", "count": 2, "languages": 1 }, { "order": 670, - "name": "dokeys28", + "name": "josephfaster", "count": 2, "languages": 1 }, { "order": 671, - "name": "noaregui", + "name": "gregfc95", "count": 2, "languages": 1 }, { "order": 672, - "name": "alejandro-mantilla", + "name": "victore16", "count": 2, "languages": 1 }, { "order": 673, - "name": "gmigues", + "name": "dokeys28", "count": 2, "languages": 1 }, { "order": 674, - "name": "juanseevn", + "name": "noaregui", "count": 2, "languages": 1 }, { "order": 675, - "name": "vesubius", + "name": "alejandro-mantilla", "count": 2, "languages": 1 }, { "order": 676, - "name": "zeti1231", + "name": "gmigues", "count": 2, "languages": 1 }, { "order": 677, - "name": "cipollalucas", + "name": "juanseevn", "count": 2, "languages": 1 }, { "order": 678, - "name": "miguelberrio0810", + "name": "vesubius", "count": 2, "languages": 1 }, { "order": 679, - "name": "santiagodc8", + "name": "zeti1231", "count": 2, "languages": 1 }, { "order": 680, - "name": "pedrojog", + "name": "cipollalucas", "count": 2, "languages": 1 }, { "order": 681, - "name": "culebropalido", + "name": "miguelberrio0810", "count": 2, "languages": 1 }, { "order": 682, - "name": "marioyellowy", + "name": "santiagodc8", "count": 2, "languages": 1 }, { "order": 683, - "name": "jcknot", + "name": "pedrojog", "count": 2, "languages": 1 }, { "order": 684, - "name": "peeanoot", + "name": "culebropalido", "count": 2, "languages": 1 }, { "order": 685, - "name": "coronelsam", + "name": "marioyellowy", "count": 2, "languages": 1 }, { "order": 686, - "name": "arhl2023", + "name": "jcknot", "count": 2, "languages": 1 }, { "order": 687, - "name": "isidrojng", + "name": "peeanoot", "count": 2, "languages": 1 }, { "order": 688, - "name": "anaroncero", + "name": "coronelsam", "count": 2, "languages": 1 }, { "order": 689, - "name": "hersac", + "name": "arhl2023", "count": 2, "languages": 1 }, { "order": 690, - "name": "vecinacoo", + "name": "isidrojng", "count": 2, "languages": 1 }, { "order": 691, - "name": "juanmjimenezs", + "name": "anaroncero", "count": 2, "languages": 1 }, { "order": 692, - "name": "armentaangel", + "name": "hersac", "count": 2, "languages": 1 }, { "order": 693, - "name": "lordzzz777", + "name": "vecinacoo", "count": 2, "languages": 1 }, { "order": 694, - "name": "sdm29gh", + "name": "juanmjimenezs", "count": 2, "languages": 1 }, { "order": 695, - "name": "zonnen69", + "name": "armentaangel", "count": 2, "languages": 1 }, { "order": 696, - "name": "jmichael39", + "name": "lordzzz777", "count": 2, "languages": 1 }, { "order": 697, - "name": "davidvilem", + "name": "sdm29gh", "count": 2, "languages": 1 }, { "order": 698, - "name": "torvicv", - "count": 1, + "name": "zonnen69", + "count": 2, "languages": 1 }, { "order": 699, - "name": "dgquintero", - "count": 1, + "name": "jmichael39", + "count": 2, "languages": 1 }, { "order": 700, - "name": "c-blskv", - "count": 1, + "name": "davidvilem", + "count": 2, "languages": 1 }, { "order": 701, - "name": "emaerniquez", + "name": "torvicv", "count": 1, "languages": 1 }, { "order": 702, - "name": "carolhs92", + "name": "dgquintero", "count": 1, "languages": 1 }, { "order": 703, - "name": "leonardo-henao", + "name": "c-blskv", "count": 1, "languages": 1 }, { "order": 704, - "name": "juancamilofvx", + "name": "emaerniquez", "count": 1, "languages": 1 }, { "order": 705, - "name": "vikernes27666", + "name": "carolhs92", "count": 1, "languages": 1 }, { "order": 706, - "name": "cub-tor", + "name": "leonardo-henao", "count": 1, "languages": 1 }, { "order": 707, - "name": "nightmare79", + "name": "juancamilofvx", "count": 1, "languages": 1 }, { "order": 708, - "name": "carlosmperezm", + "name": "vikernes27666", "count": 1, "languages": 1 }, { "order": 709, - "name": "gonzalinuz18", + "name": "cub-tor", "count": 1, "languages": 1 }, { "order": 710, - "name": "qwik-zghieb", + "name": "nightmare79", "count": 1, "languages": 1 }, { "order": 711, - "name": "miquelrr", + "name": "carlosmperezm", "count": 1, "languages": 1 }, { "order": 712, - "name": "miguel2rar", + "name": "gonzalinuz18", "count": 1, "languages": 1 }, { "order": 713, - "name": "eamartin", + "name": "qwik-zghieb", "count": 1, "languages": 1 }, { "order": 714, - "name": "gabriel-dangelo", + "name": "miquelrr", "count": 1, "languages": 1 }, { "order": 715, - "name": "agustinfccll", + "name": "miguel2rar", "count": 1, "languages": 1 }, { "order": 716, - "name": "anitandil", + "name": "eamartin", "count": 1, "languages": 1 }, { "order": 717, - "name": "evilpodato04", + "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { "order": 718, - "name": "francomyburg", + "name": "agustinfccll", "count": 1, "languages": 1 }, { "order": 719, - "name": "neicervb", + "name": "anitandil", "count": 1, "languages": 1 }, { "order": 720, - "name": "josephinoo", + "name": "evilpodato04", "count": 1, "languages": 1 }, { "order": 721, - "name": "arathhh8", + "name": "francomyburg", "count": 1, "languages": 1 }, { "order": 722, - "name": "paluzz", + "name": "neicervb", "count": 1, "languages": 1 }, { "order": 723, - "name": "theposi", + "name": "josephinoo", "count": 1, "languages": 1 }, { "order": 724, - "name": "vinyoles", + "name": "arathhh8", "count": 1, "languages": 1 }, { "order": 725, - "name": "omarroman29", + "name": "paluzz", "count": 1, "languages": 1 }, { "order": 726, - "name": "1cel4nc3", + "name": "theposi", "count": 1, "languages": 1 }, { "order": 727, - "name": "sergio-strazzacappa", + "name": "vinyoles", "count": 1, "languages": 1 }, { "order": 728, - "name": "corvo-99", + "name": "omarroman29", "count": 1, "languages": 1 }, { "order": 729, - "name": "danielcastillo1112", + "name": "1cel4nc3", "count": 1, "languages": 1 }, { "order": 730, - "name": "malkarmah", + "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { "order": 731, - "name": "devm0nk3y", + "name": "corvo-99", "count": 1, "languages": 1 }, { "order": 732, - "name": "sirvega83", + "name": "danielcastillo1112", "count": 1, "languages": 1 }, { "order": 733, - "name": "franpua", + "name": "malkarmah", "count": 1, "languages": 1 }, { "order": 734, - "name": "van-02", + "name": "devm0nk3y", "count": 1, "languages": 1 }, { "order": 735, - "name": "x3mboy", + "name": "sirvega83", "count": 1, "languages": 1 }, { "order": 736, - "name": "mickysoft", + "name": "franpua", "count": 1, "languages": 1 }, { "order": 737, - "name": "deimoshall", + "name": "van-02", "count": 1, "languages": 1 }, { "order": 738, - "name": "palons29", + "name": "x3mboy", "count": 1, "languages": 1 }, { "order": 739, - "name": "serg032", + "name": "mickysoft", "count": 1, "languages": 1 }, { "order": 740, - "name": "seigigim", + "name": "deimoshall", "count": 1, "languages": 1 }, { "order": 741, - "name": "cibacoa", + "name": "palons29", "count": 1, "languages": 1 }, { "order": 742, - "name": "axelwestman", + "name": "serg032", "count": 1, "languages": 1 }, { "order": 743, - "name": "javodevon", + "name": "seigigim", "count": 1, "languages": 1 }, { "order": 744, - "name": "mauricioyair", + "name": "cibacoa", "count": 1, "languages": 1 }, { "order": 745, - "name": "manuhssj", + "name": "axelwestman", "count": 1, "languages": 1 }, { "order": 746, - "name": "coletonosh", + "name": "javodevon", "count": 1, "languages": 1 }, { "order": 747, - "name": "manugonzalito", + "name": "mauricioyair", "count": 1, "languages": 1 }, { "order": 748, - "name": "gizelads", + "name": "manuhssj", "count": 1, "languages": 1 }, { "order": 749, - "name": "lucc4sz", + "name": "coletonosh", "count": 1, "languages": 1 }, { "order": 750, - "name": "feliaguirre7", + "name": "manugonzalito", "count": 1, "languages": 1 }, { "order": 751, - "name": "rulo77", + "name": "gizelads", "count": 1, "languages": 1 }, { "order": 752, - "name": "is2095", + "name": "lucc4sz", "count": 1, "languages": 1 }, { "order": 753, - "name": "jancalos", + "name": "feliaguirre7", "count": 1, "languages": 1 }, { "order": 754, - "name": "marcosapodaca", + "name": "rulo77", "count": 1, "languages": 1 }, { "order": 755, - "name": "angelcruzg23", + "name": "is2095", "count": 1, "languages": 1 }, { "order": 756, - "name": "ca2puntosv", + "name": "jancalos", "count": 1, "languages": 1 }, { "order": 757, - "name": "armm77", + "name": "marcosapodaca", "count": 1, "languages": 1 }, { "order": 758, - "name": "afacorroloscos", + "name": "angelcruzg23", "count": 1, "languages": 1 }, { "order": 759, - "name": "rocadev2714", + "name": "ca2puntosv", "count": 1, "languages": 1 }, { "order": 760, - "name": "chrisfelixgil", + "name": "armm77", "count": 1, "languages": 1 }, { "order": 761, - "name": "sandrarg85", + "name": "afacorroloscos", "count": 1, "languages": 1 }, { "order": 762, - "name": "rootqui", + "name": "rocadev2714", "count": 1, "languages": 1 }, { "order": 763, - "name": "ishimaku", + "name": "chrisfelixgil", "count": 1, "languages": 1 }, { "order": 764, - "name": "pkmaventura", + "name": "sandrarg85", "count": 1, "languages": 1 }, { "order": 765, - "name": "miguelgargallo", + "name": "rootqui", "count": 1, "languages": 1 }, { "order": 766, - "name": "astriebeck", + "name": "ishimaku", "count": 1, "languages": 1 }, { "order": 767, - "name": "lobogeekmx", + "name": "pkmaventura", "count": 1, "languages": 1 }, { "order": 768, - "name": "marvinagui", + "name": "miguelgargallo", "count": 1, "languages": 1 }, { "order": 769, - "name": "marqitos", + "name": "astriebeck", "count": 1, "languages": 1 }, { "order": 770, - "name": "nunezlagos", + "name": "lobogeekmx", "count": 1, "languages": 1 }, { "order": 771, - "name": "jcrobles99", + "name": "marvinagui", "count": 1, "languages": 1 }, { "order": 772, - "name": "ledyam", + "name": "marqitos", "count": 1, "languages": 1 }, { "order": 773, - "name": "jatomas", + "name": "nunezlagos", "count": 1, "languages": 1 }, { "order": 774, - "name": "jaennova", + "name": "jcrobles99", "count": 1, "languages": 1 }, { "order": 775, - "name": "luisalberto22", + "name": "ledyam", "count": 1, "languages": 1 }, { "order": 776, - "name": "francisleble", + "name": "jatomas", "count": 1, "languages": 1 }, { "order": 777, - "name": "deiiviitdev", + "name": "jaennova", "count": 1, "languages": 1 }, { "order": 778, - "name": "braiso-22", + "name": "luisalberto22", "count": 1, "languages": 1 }, { "order": 779, - "name": "daniel-cas", + "name": "francisleble", "count": 1, "languages": 1 }, { "order": 780, - "name": "acirdevelper", + "name": "deiiviitdev", "count": 1, "languages": 1 }, { "order": 781, - "name": "borjadelgadodev", + "name": "braiso-22", "count": 1, "languages": 1 }, { "order": 782, - "name": "elpeque29", + "name": "daniel-cas", "count": 1, "languages": 1 }, { "order": 783, - "name": "jhordanluyo", + "name": "acirdevelper", "count": 1, "languages": 1 }, { "order": 784, - "name": "davidcv-dev", + "name": "borjadelgadodev", "count": 1, "languages": 1 }, { "order": 785, - "name": "mbmaeso", + "name": "elpeque29", "count": 1, "languages": 1 }, { "order": 786, - "name": "alvarominarro", + "name": "jhordanluyo", "count": 1, "languages": 1 }, { "order": 787, - "name": "bjchavez", + "name": "davidcv-dev", "count": 1, "languages": 1 }, { "order": 788, - "name": "madelefonb", + "name": "mbmaeso", "count": 1, "languages": 1 }, { "order": 789, - "name": "lfwzk", + "name": "alvarominarro", "count": 1, "languages": 1 }, { "order": 790, - "name": "ercky1980", + "name": "bjchavez", "count": 1, "languages": 1 }, { "order": 791, - "name": "jsruedatorres", + "name": "madelefonb", "count": 1, "languages": 1 }, { "order": 792, - "name": "jacobrwx", + "name": "lfwzk", "count": 1, "languages": 1 }, { "order": 793, - "name": "abengl", + "name": "ercky1980", "count": 1, "languages": 1 }, { "order": 794, - "name": "jd-gm", + "name": "jsruedatorres", "count": 1, "languages": 1 }, { "order": 795, - "name": "lucianogriffa", + "name": "jacobrwx", "count": 1, "languages": 1 }, { "order": 796, - "name": "quirogapau", + "name": "abengl", "count": 1, "languages": 1 }, { "order": 797, - "name": "joseperesini", + "name": "jd-gm", "count": 1, "languages": 1 }, { "order": 798, - "name": "mhrosariom", + "name": "lucianogriffa", "count": 1, "languages": 1 }, { "order": 799, - "name": "sergioab7", + "name": "quirogapau", "count": 1, "languages": 1 }, { "order": 800, - "name": "santaravena", + "name": "joseperesini", "count": 1, "languages": 1 }, { "order": 801, - "name": "datrujillog", + "name": "mhrosariom", "count": 1, "languages": 1 }, { "order": 802, - "name": "johnniew81", + "name": "sergioab7", "count": 1, "languages": 1 }, { "order": 803, - "name": "chriszaldana", + "name": "santaravena", "count": 1, "languages": 1 }, { "order": 804, - "name": "antonioverdugo", + "name": "datrujillog", "count": 1, "languages": 1 }, { "order": 805, - "name": "kronomio", + "name": "johnniew81", "count": 1, "languages": 1 }, { "order": 806, - "name": "kevinramirez28", + "name": "chriszaldana", "count": 1, "languages": 1 }, { "order": 807, - "name": "juanpablo-a", + "name": "antonioverdugo", "count": 1, "languages": 1 }, { "order": 808, - "name": "gerespinosa", + "name": "kronomio", "count": 1, "languages": 1 }, { "order": 809, - "name": "1978acb", + "name": "kevinramirez28", "count": 1, "languages": 1 }, { "order": 810, - "name": "alexxawada", + "name": "juanpablo-a", "count": 1, "languages": 1 }, { "order": 811, - "name": "ricarsur", + "name": "gerespinosa", "count": 1, "languages": 1 }, { "order": 812, - "name": "alemar16", + "name": "1978acb", "count": 1, "languages": 1 }, { "order": 813, - "name": "pointfs", + "name": "alexxawada", "count": 1, "languages": 1 }, { "order": 814, - "name": "edperez07", + "name": "ricarsur", "count": 1, "languages": 1 }, { "order": 815, - "name": "dacronik", + "name": "alemar16", "count": 1, "languages": 1 }, { "order": 816, - "name": "abraham9804", + "name": "pointfs", "count": 1, "languages": 1 }, { "order": 817, - "name": "afl0r3s", + "name": "edperez07", "count": 1, "languages": 1 }, { "order": 818, - "name": "dianelis1", + "name": "dacronik", "count": 1, "languages": 1 }, { "order": 819, - "name": "fernandofl", + "name": "abraham9804", "count": 1, "languages": 1 }, { "order": 820, - "name": "conrado85", + "name": "afl0r3s", "count": 1, "languages": 1 }, { "order": 821, - "name": "agus-ig", + "name": "dianelis1", "count": 1, "languages": 1 }, { "order": 822, - "name": "alvarommedia", + "name": "fernandofl", "count": 1, "languages": 1 }, { "order": 823, - "name": "maximotoro", + "name": "conrado85", "count": 1, "languages": 1 }, { "order": 824, - "name": "m4xisil", + "name": "agus-ig", "count": 1, "languages": 1 }, { "order": 825, - "name": "francomoreira", + "name": "alvarommedia", "count": 1, "languages": 1 }, { "order": 826, - "name": "aleclto7", + "name": "maximotoro", "count": 1, "languages": 1 }, { "order": 827, - "name": "nnunezmedina", + "name": "m4xisil", "count": 1, "languages": 1 }, { "order": 828, - "name": "codejoss", + "name": "francomoreira", "count": 1, "languages": 1 }, { "order": 829, - "name": "yaojema", + "name": "aleclto7", "count": 1, "languages": 1 }, { "order": 830, - "name": "romanocoder", + "name": "nnunezmedina", "count": 1, "languages": 1 }, { "order": 831, - "name": "sixtodev", + "name": "codejoss", "count": 1, "languages": 1 }, { "order": 832, - "name": "cgomezadolfo", + "name": "yaojema", "count": 1, "languages": 1 }, { "order": 833, - "name": "rojasvargas", + "name": "romanocoder", "count": 1, "languages": 1 }, { "order": 834, - "name": "carlosdiaz-dev", + "name": "sixtodev", "count": 1, "languages": 1 }, { "order": 835, - "name": "l3v1xx", + "name": "cgomezadolfo", "count": 1, "languages": 1 }, { "order": 836, - "name": "patricioguerra30", + "name": "rojasvargas", "count": 1, "languages": 1 }, { "order": 837, - "name": "lytsar", + "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { "order": 838, - "name": "siuldev", + "name": "l3v1xx", "count": 1, "languages": 1 }, { "order": 839, - "name": "brayancordova1", + "name": "patricioguerra30", "count": 1, "languages": 1 }, { "order": 840, - "name": "ronnieruuz", + "name": "lytsar", "count": 1, "languages": 1 }, { "order": 841, - "name": "yessikamichelle", + "name": "siuldev", "count": 1, "languages": 1 }, { "order": 842, - "name": "vainsito1", + "name": "brayancordova1", "count": 1, "languages": 1 }, { "order": 843, - "name": "oscarletelier", + "name": "ronnieruuz", "count": 1, "languages": 1 }, { "order": 844, - "name": "kocho03", + "name": "yessikamichelle", "count": 1, "languages": 1 }, { "order": 845, - "name": "aidicoop", + "name": "vainsito1", "count": 1, "languages": 1 }, { "order": 846, - "name": "albabp", + "name": "oscarletelier", "count": 1, "languages": 1 }, { "order": 847, - "name": "nozodev", + "name": "kocho03", "count": 1, "languages": 1 }, { "order": 848, - "name": "mvillegas18", + "name": "aidicoop", "count": 1, "languages": 1 }, { "order": 849, - "name": "augustbs", + "name": "albabp", "count": 1, "languages": 1 }, { "order": 850, - "name": "mekanicas", + "name": "nozodev", "count": 1, "languages": 1 }, { "order": 851, - "name": "luchof5", + "name": "mvillegas18", "count": 1, "languages": 1 }, { "order": 852, - "name": "fullstackarlo", + "name": "augustbs", "count": 1, "languages": 1 }, { "order": 853, - "name": "mdemena", + "name": "mekanicas", "count": 1, "languages": 1 }, { "order": 854, - "name": "cliverjimny123", + "name": "luchof5", "count": 1, "languages": 1 }, { "order": 855, - "name": "rodmiggithub", + "name": "fullstackarlo", "count": 1, "languages": 1 }, { "order": 856, - "name": "s9code", + "name": "mdemena", "count": 1, "languages": 1 }, { "order": 857, - "name": "javieradev", + "name": "cliverjimny123", "count": 1, "languages": 1 }, { "order": 858, - "name": "xnomada", + "name": "rodmiggithub", "count": 1, "languages": 1 }, { "order": 859, - "name": "miguelsarm", + "name": "s9code", "count": 1, "languages": 1 }, { "order": 860, - "name": "royhuamanavila", + "name": "javieradev", "count": 1, "languages": 1 }, { "order": 861, - "name": "imista", + "name": "xnomada", "count": 1, "languages": 1 }, { "order": 862, - "name": "denisortega", + "name": "miguelsarm", "count": 1, "languages": 1 }, { "order": 863, - "name": "kouski", + "name": "royhuamanavila", "count": 1, "languages": 1 }, { "order": 864, - "name": "leydimadrid", + "name": "imista", "count": 1, "languages": 1 }, { "order": 865, - "name": "frannm29", + "name": "denisortega", "count": 1, "languages": 1 }, { "order": 866, - "name": "saintsluis", + "name": "kouski", "count": 1, "languages": 1 }, { "order": 867, - "name": "gc796", + "name": "leydimadrid", "count": 1, "languages": 1 }, { "order": 868, - "name": "pierre-ol", + "name": "frannm29", "count": 1, "languages": 1 }, { "order": 869, - "name": "francescoalterio", + "name": "saintsluis", "count": 1, "languages": 1 }, { "order": 870, - "name": "gustavoguerrero", + "name": "gc796", "count": 1, "languages": 1 }, { "order": 871, - "name": "diegoxxd", + "name": "pierre-ol", "count": 1, "languages": 1 }, { "order": 872, - "name": "fzcarlitos", + "name": "francescoalterio", "count": 1, "languages": 1 }, { "order": 873, - "name": "walkerlyna", + "name": "gustavoguerrero", "count": 1, "languages": 1 }, { "order": 874, - "name": "sejotaz", + "name": "diegoxxd", "count": 1, "languages": 1 }, { "order": 875, - "name": "frcan89", + "name": "fzcarlitos", "count": 1, "languages": 1 }, { "order": 876, - "name": "nicorey89", + "name": "walkerlyna", "count": 1, "languages": 1 }, { "order": 877, - "name": "alexis0717", + "name": "sejotaz", "count": 1, "languages": 1 }, { "order": 878, - "name": "edgonzz", + "name": "frcan89", "count": 1, "languages": 1 }, { "order": 879, - "name": "vmga09", + "name": "nicorey89", "count": 1, "languages": 1 }, { "order": 880, - "name": "lfam200", + "name": "alexis0717", "count": 1, "languages": 1 }, { "order": 881, - "name": "kenzambrano", + "name": "edgonzz", "count": 1, "languages": 1 }, { "order": 882, - "name": "dmhenaopa", + "name": "vmga09", "count": 1, "languages": 1 }, { "order": 883, - "name": "jpiacaruso", + "name": "lfam200", "count": 1, "languages": 1 }, { "order": 884, - "name": "isnatthy", + "name": "kenzambrano", "count": 1, "languages": 1 }, { "order": 885, - "name": "diego-santana23", + "name": "dmhenaopa", "count": 1, "languages": 1 }, { "order": 886, - "name": "peticas", + "name": "jpiacaruso", "count": 1, "languages": 1 }, { "order": 887, - "name": "flarien", + "name": "isnatthy", "count": 1, "languages": 1 }, { "order": 888, - "name": "franciscokarriere", + "name": "diego-santana23", "count": 1, "languages": 1 }, { "order": 889, - "name": "pipeyz21", + "name": "peticas", "count": 1, "languages": 1 }, { "order": 890, - "name": "luisgarm", + "name": "flarien", "count": 1, "languages": 1 }, { "order": 891, - "name": "tetotille", + "name": "franciscokarriere", "count": 1, "languages": 1 }, { "order": 892, - "name": "vorosdev", + "name": "pipeyz21", "count": 1, "languages": 1 }, { "order": 893, - "name": "santiagomac", + "name": "luisgarm", "count": 1, "languages": 1 }, { "order": 894, - "name": "implevacui", + "name": "tetotille", "count": 1, "languages": 1 }, { "order": 895, - "name": "fede6299", + "name": "vorosdev", "count": 1, "languages": 1 }, { "order": 896, - "name": "kevin05m", + "name": "santiagomac", "count": 1, "languages": 1 }, { "order": 897, - "name": "diegomm27", + "name": "implevacui", "count": 1, "languages": 1 }, { "order": 898, - "name": "whiterunjarl", + "name": "fede6299", "count": 1, "languages": 1 }, { "order": 899, - "name": "pablo-lnx", + "name": "kevin05m", "count": 1, "languages": 1 }, { "order": 900, - "name": "darkohokage", + "name": "diegomm27", "count": 1, "languages": 1 }, { "order": 901, - "name": "jhonnfl", + "name": "pablo-lnx", "count": 1, "languages": 1 }, { "order": 902, - "name": "jarzatedev", + "name": "darkohokage", "count": 1, "languages": 1 }, { "order": 903, - "name": "brunom-93", + "name": "jhonnfl", "count": 1, "languages": 1 }, { "order": 904, - "name": "alejandroruiz23", + "name": "jarzatedev", "count": 1, "languages": 1 }, { "order": 905, - "name": "trollface77", + "name": "brunom-93", "count": 1, "languages": 1 }, { "order": 906, - "name": "jaimesoftdev", + "name": "alejandroruiz23", "count": 1, "languages": 1 }, { "order": 907, - "name": "edm1ya", + "name": "trollface77", "count": 1, "languages": 1 }, { "order": 908, - "name": "tartabullroberto", + "name": "jaimesoftdev", "count": 1, "languages": 1 }, { "order": 909, - "name": "serg-pq", + "name": "edm1ya", "count": 1, "languages": 1 }, { "order": 910, - "name": "lara-vel-dev", + "name": "tartabullroberto", "count": 1, "languages": 1 }, { "order": 911, - "name": "alexisbarradev", + "name": "serg-pq", "count": 1, "languages": 1 }, { "order": 912, - "name": "kelvincb", + "name": "lara-vel-dev", "count": 1, "languages": 1 }, { "order": 913, - "name": "carlostoledoe", + "name": "alexisbarradev", "count": 1, "languages": 1 }, { "order": 914, - "name": "gilbertho502", + "name": "kelvincb", "count": 1, "languages": 1 }, { "order": 915, - "name": "v0l0v", + "name": "carlostoledoe", "count": 1, "languages": 1 }, { "order": 916, - "name": "johao23", + "name": "gilbertho502", "count": 1, "languages": 1 }, { "order": 917, - "name": "geridage", + "name": "v0l0v", "count": 1, "languages": 1 }, { "order": 918, - "name": "vmarialuzm", + "name": "johao23", "count": 1, "languages": 1 }, { "order": 919, - "name": "snowcardenas", + "name": "geridage", "count": 1, "languages": 1 }, { "order": 920, - "name": "and-y21", + "name": "vmarialuzm", "count": 1, "languages": 1 }, { "order": 921, - "name": "arturodlapaz17", + "name": "snowcardenas", "count": 1, "languages": 1 }, { "order": 922, - "name": "manuu42", + "name": "and-y21", "count": 1, "languages": 1 }, { "order": 923, - "name": "howlett9999", + "name": "arturodlapaz17", "count": 1, "languages": 1 }, { "order": 924, - "name": "dkp-dev", + "name": "manuu42", "count": 1, "languages": 1 }, { "order": 925, - "name": "hnaranjog", + "name": "howlett9999", "count": 1, "languages": 1 }, { "order": 926, - "name": "wallsified", + "name": "dkp-dev", "count": 1, "languages": 1 }, { "order": 927, - "name": "javitron100", + "name": "hnaranjog", "count": 1, "languages": 1 }, { "order": 928, - "name": "lluistech", + "name": "wallsified", "count": 1, "languages": 1 }, { "order": 929, - "name": "mamartinez14", + "name": "lluistech", "count": 1, "languages": 1 }, { "order": 930, - "name": "ambrociojrdelacruz", + "name": "mamartinez14", "count": 1, "languages": 1 }, { "order": 931, - "name": "bassalex27", + "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { "order": 932, - "name": "yetlanezils", + "name": "bassalex27", "count": 1, "languages": 1 }, { "order": 933, - "name": "ndepaul82", + "name": "yetlanezils", "count": 1, "languages": 1 }, { "order": 934, - "name": "amitchellg", + "name": "ndepaul82", "count": 1, "languages": 1 }, { "order": 935, - "name": "turudev1979", + "name": "amitchellg", "count": 1, "languages": 1 }, { "order": 936, - "name": "deivimiller", + "name": "turudev1979", "count": 1, "languages": 1 }, { "order": 937, - "name": "haroldalb", + "name": "deivimiller", "count": 1, "languages": 1 }, { "order": 938, - "name": "dakkaj", + "name": "haroldalb", "count": 1, "languages": 1 }, { "order": 939, - "name": "jheisonquiroga", + "name": "dakkaj", "count": 1, "languages": 1 }, { "order": 940, - "name": "juli-m4", + "name": "jheisonquiroga", "count": 1, "languages": 1 }, { "order": 941, - "name": "sergiomhernandez", + "name": "juli-m4", "count": 1, "languages": 1 }, { "order": 942, - "name": "masenace", + "name": "sergiomhernandez", "count": 1, "languages": 1 }, { "order": 943, - "name": "e-xtian", + "name": "masenace", "count": 1, "languages": 1 }, { "order": 944, - "name": "vickalck", + "name": "e-xtian", "count": 1, "languages": 1 }, { "order": 945, - "name": "gmedinat911", + "name": "vickalck", "count": 1, "languages": 1 }, { "order": 946, - "name": "eljavi0", + "name": "gmedinat911", "count": 1, "languages": 1 }, { "order": 947, - "name": "yeisongil", + "name": "eljavi0", "count": 1, "languages": 1 }, { "order": 948, - "name": "julioorozco05", + "name": "yeisongil", "count": 1, "languages": 1 }, { "order": 949, - "name": "fergz1988", + "name": "julioorozco05", "count": 1, "languages": 1 }, { "order": 950, - "name": "marcos0803", + "name": "fergz1988", "count": 1, "languages": 1 }, { "order": 951, - "name": "xcortes", + "name": "marcos0803", "count": 1, "languages": 1 }, { "order": 952, - "name": "facundorsabia", + "name": "xcortes", "count": 1, "languages": 1 }, { "order": 953, - "name": "nico70012", + "name": "facundorsabia", "count": 1, "languages": 1 }, { "order": 954, - "name": "charly024", + "name": "nico70012", "count": 1, "languages": 1 }, { "order": 955, - "name": "devjerez", + "name": "charly024", "count": 1, "languages": 1 }, { "order": 956, - "name": "copamire", + "name": "devjerez", "count": 1, "languages": 1 }, { "order": 957, - "name": "gersonoroz", + "name": "copamire", "count": 1, "languages": 1 }, { "order": 958, - "name": "jafuma0320", + "name": "gersonoroz", "count": 1, "languages": 1 }, { "order": 959, - "name": "g4nd4lf", + "name": "jafuma0320", "count": 1, "languages": 1 }, { "order": 960, - "name": "obed-tc", + "name": "g4nd4lf", "count": 1, "languages": 1 }, { "order": 961, - "name": "devkenn", + "name": "obed-tc", "count": 1, "languages": 1 }, { "order": 962, - "name": "xalejandrow", + "name": "devkenn", "count": 1, "languages": 1 }, { "order": 963, - "name": "henrydavidprimera", + "name": "xalejandrow", "count": 1, "languages": 1 }, { "order": 964, - "name": "luceldasilva", + "name": "henrydavidprimera", "count": 1, "languages": 1 }, { "order": 965, - "name": "mjordanaam", + "name": "luceldasilva", "count": 1, "languages": 1 }, { "order": 966, - "name": "betulioo", + "name": "mjordanaam", "count": 1, "languages": 1 }, { "order": 967, - "name": "judithernandez", + "name": "betulioo", "count": 1, "languages": 1 }, { "order": 968, - "name": "dimanu-py", + "name": "judithernandez", "count": 1, "languages": 1 }, { "order": 969, - "name": "snowale", + "name": "dimanu-py", "count": 1, "languages": 1 }, { "order": 970, - "name": "cd1974", + "name": "snowale", "count": 1, "languages": 1 }, { "order": 971, - "name": "acobo3", + "name": "cd1974", "count": 1, "languages": 1 }, { "order": 972, - "name": "isaacdci", + "name": "acobo3", "count": 1, "languages": 1 }, { "order": 973, - "name": "manueldenisdev", + "name": "isaacdci", "count": 1, "languages": 1 }, { "order": 974, - "name": "anexo01", + "name": "manueldenisdev", "count": 1, "languages": 1 }, { "order": 975, - "name": "yamiyugi25", + "name": "anexo01", "count": 1, "languages": 1 }, { "order": 976, - "name": "gl-informatica", + "name": "yamiyugi25", "count": 1, "languages": 1 }, { "order": 977, - "name": "miguelmancebo", + "name": "gl-informatica", "count": 1, "languages": 1 }, { "order": 978, - "name": "neusier101", + "name": "miguelmancebo", "count": 1, "languages": 1 }, { "order": 979, - "name": "emmanuelmmontesinos ", + "name": "neusier101", "count": 1, "languages": 1 }, { "order": 980, - "name": "xhinto", + "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { "order": 981, - "name": "dacaldev", + "name": "xhinto", "count": 1, "languages": 1 }, { "order": 982, - "name": "juan-cruz01", + "name": "dacaldev", "count": 1, "languages": 1 }, { "order": 983, - "name": "juanalbornoz32", + "name": "juan-cruz01", "count": 1, "languages": 1 }, { "order": 984, - "name": "cisneros2404", + "name": "juanalbornoz32", "count": 1, "languages": 1 }, { "order": 985, - "name": "neftalyr", + "name": "cisneros2404", "count": 1, "languages": 1 }, { "order": 986, - "name": "latorredev", + "name": "neftalyr", "count": 1, "languages": 1 }, { "order": 987, - "name": "osneidert", + "name": "latorredev", "count": 1, "languages": 1 }, { "order": 988, - "name": "jrgranadosb", + "name": "osneidert", "count": 1, "languages": 1 }, { "order": 989, - "name": "vicvilla30", + "name": "jrgranadosb", "count": 1, "languages": 1 }, { "order": 990, - "name": "carlosbb70", + "name": "vicvilla30", "count": 1, "languages": 1 }, { "order": 991, - "name": "pablom-2015", + "name": "carlosbb70", "count": 1, "languages": 1 }, { "order": 992, - "name": "xtinarita", + "name": "pablom-2015", "count": 1, "languages": 1 }, { "order": 993, - "name": "wilsonbarrera", + "name": "xtinarita", "count": 1, "languages": 1 }, { "order": 994, - "name": "jereaguilar", + "name": "wilsonbarrera", "count": 1, "languages": 1 }, { "order": 995, - "name": "giovanni-schmaily", + "name": "jereaguilar", "count": 1, "languages": 1 }, { "order": 996, - "name": "danidan1214", + "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { "order": 997, - "name": "demegorash", + "name": "danidan1214", "count": 1, "languages": 1 }, { "order": 998, - "name": "cris10026", + "name": "demegorash", "count": 1, "languages": 1 }, { "order": 999, - "name": "davidgramiro", + "name": "cris10026", "count": 1, "languages": 1 }, { "order": 1000, - "name": "jgarteag", + "name": "davidgramiro", "count": 1, "languages": 1 }, { "order": 1001, - "name": "adcarret", + "name": "jgarteag", "count": 1, "languages": 1 }, { "order": 1002, - "name": "natanaelzubiri", + "name": "adcarret", "count": 1, "languages": 1 }, { "order": 1003, - "name": "diegogomezcor4", + "name": "natanaelzubiri", "count": 1, "languages": 1 }, { "order": 1004, - "name": "perla-zg", + "name": "diegogomezcor4", "count": 1, "languages": 1 }, { "order": 1005, - "name": "neshurtado", + "name": "perla-zg", "count": 1, "languages": 1 }, { "order": 1006, - "name": "marcelinoarias369", + "name": "neshurtado", "count": 1, "languages": 1 }, { "order": 1007, - "name": "pushodev", + "name": "marcelinoarias369", "count": 1, "languages": 1 }, { "order": 1008, - "name": "sherkla12e", + "name": "pushodev", "count": 1, "languages": 1 }, { "order": 1009, - "name": "luisangeles20", + "name": "sherkla12e", "count": 1, "languages": 1 }, { "order": 1010, - "name": "johannmanrique", + "name": "luisangeles20", "count": 1, "languages": 1 }, { "order": 1011, - "name": "omar8102", + "name": "johannmanrique", "count": 1, "languages": 1 }, { "order": 1012, - "name": "eatsangels", + "name": "omar8102", "count": 1, "languages": 1 }, { "order": 1013, - "name": "alejarandro", + "name": "eatsangels", "count": 1, "languages": 1 }, { "order": 1014, - "name": "tashidian", + "name": "alejarandro", "count": 1, "languages": 1 }, { "order": 1015, - "name": "alejandro000", + "name": "tashidian", "count": 1, "languages": 1 }, { "order": 1016, - "name": "francgci", + "name": "alejandro000", "count": 1, "languages": 1 }, { "order": 1017, - "name": "krisipo", + "name": "francgci", "count": 1, "languages": 1 }, { "order": 1018, - "name": "jalonso76", + "name": "krisipo", "count": 1, "languages": 1 }, { "order": 1019, - "name": "leo18q", + "name": "jalonso76", "count": 1, "languages": 1 }, { "order": 1020, - "name": "sofiamfernandez", + "name": "leo18q", "count": 1, "languages": 1 }, { "order": 1021, - "name": "jgregoris", + "name": "sofiamfernandez", "count": 1, "languages": 1 }, { "order": 1022, - "name": "josuelopez5", + "name": "jgregoris", "count": 1, "languages": 1 }, { "order": 1023, - "name": "mrf1989", + "name": "josuelopez5", "count": 1, "languages": 1 }, { "order": 1024, - "name": "zeraven09", + "name": "mrf1989", "count": 1, "languages": 1 }, { "order": 1025, - "name": "pr1de-23", + "name": "zeraven09", "count": 1, "languages": 1 }, { "order": 1026, - "name": "kronoscba", + "name": "pr1de-23", "count": 1, "languages": 1 }, { "order": 1027, - "name": "erickcis", + "name": "kronoscba", "count": 1, "languages": 1 }, { "order": 1028, - "name": "experthacker444", + "name": "erickcis", "count": 1, "languages": 1 }, { "order": 1029, - "name": "javirr4", + "name": "experthacker444", "count": 1, "languages": 1 }, { "order": 1030, - "name": "ignacioskm", + "name": "javirr4", "count": 1, "languages": 1 }, { "order": 1031, - "name": "jchernandez87", + "name": "ignacioskm", "count": 1, "languages": 1 }, { "order": 1032, - "name": "ferngpv", + "name": "jchernandez87", "count": 1, "languages": 1 }, { "order": 1033, - "name": "kshields51", + "name": "ferngpv", "count": 1, "languages": 1 }, { "order": 1034, - "name": "salas89", + "name": "kshields51", "count": 1, "languages": 1 }, { "order": 1035, - "name": "90dread", + "name": "salas89", "count": 1, "languages": 1 }, { "order": 1036, - "name": "chema-dw", + "name": "90dread", "count": 1, "languages": 1 }, { "order": 1037, - "name": "sbngl", + "name": "chema-dw", "count": 1, "languages": 1 }, { "order": 1038, - "name": "m4xxdev", + "name": "sbngl", "count": 1, "languages": 1 }, { "order": 1039, - "name": "cristianvergaraf", + "name": "m4xxdev", "count": 1, "languages": 1 }, { "order": 1040, - "name": "lizzymaken", + "name": "cristianvergaraf", "count": 1, "languages": 1 }, { "order": 1041, - "name": "jandortiz", + "name": "lizzymaken", "count": 1, "languages": 1 }, { "order": 1042, - "name": "claudios1980", + "name": "jandortiz", "count": 1, "languages": 1 }, { "order": 1043, - "name": "sergiovelayos", + "name": "claudios1980", "count": 1, "languages": 1 }, { "order": 1044, - "name": "miguelangel861", + "name": "sergiovelayos", "count": 1, "languages": 1 }, { "order": 1045, - "name": "marcosjarrin", + "name": "miguelangel861", "count": 1, "languages": 1 }, { "order": 1046, - "name": "jandresalvar", + "name": "marcosjarrin", "count": 1, "languages": 1 }, { "order": 1047, - "name": "joferpg", + "name": "jandresalvar", "count": 1, "languages": 1 }, { "order": 1048, - "name": "jlrojano", + "name": "joferpg", "count": 1, "languages": 1 }, { "order": 1049, - "name": "ivanserran", + "name": "jlrojano", "count": 1, "languages": 1 }, { "order": 1050, + "name": "ivanserran", + "count": 1, + "languages": 1 + }, + { + "order": 1051, "name": "dany3gs", "count": 1, "languages": 1 }, { - "order": 1051, + "order": 1052, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1052, + "order": 1053, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1053, + "order": 1054, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1054, + "order": 1055, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1055, + "order": 1056, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1056, + "order": 1057, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1057, + "order": 1058, "name": "bycris13", "count": 1, "languages": 1 }, { - "order": 1058, + "order": 1059, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1059, + "order": 1060, "name": "v1k770r", "count": 1, "languages": 1 }, { - "order": 1060, + "order": 1061, "name": "gianellannie", "count": 1, "languages": 1 }, { - "order": 1061, + "order": 1062, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1062, + "order": 1063, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1063, + "order": 1064, "name": "fredylopez01", "count": 1, "languages": 1 }, { - "order": 1064, + "order": 1065, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1065, + "order": 1066, "name": "lautimorales", "count": 1, "languages": 1 }, { - "order": 1066, + "order": 1067, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1067, + "order": 1068, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1068, + "order": 1069, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1069, + "order": 1070, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1070, + "order": 1071, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1072, "name": "adriansaint07", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1073, "name": "javiir", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1074, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1075, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1076, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1077, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1078, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1079, "name": "jrgim", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1080, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1081, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1082, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1083, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1084, "name": "robermejia", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1085, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1086, "name": "reneguzman7", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1087, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1088, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1089, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1090, "name": "queralesdev", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1091, "name": "dovinhoyos", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1092, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1093, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1094, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1095, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1095, + "order": 1096, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1096, + "order": 1097, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1098, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1099, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1100, "name": "antoniojzp86", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1101, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1102, "name": "zyn7e", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1103, "name": "diegopardomontero", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1104, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1105, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1106, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1107, "name": "clespinosa2024", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1108, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1109, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1110, + "name": "bellodeveloper", + "count": 1, + "languages": 1 + }, + { + "order": 1111, "name": "cdryampi", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1112, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1113, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1114, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1115, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1116, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1117, "name": "rawc1nnamon", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1118, "name": "mvidab", "count": 1, "languages": 1 }, { - "order": 1117, + "order": 1119, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1118, + "order": 1120, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1121, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1122, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1123, "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1124, "name": "orzefox", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1125, "name": "acirdeveloper", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1126, "name": "emiliordev", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1127, "name": "sve-nnn", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1128, "name": "edgarmedranoa", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1129, "name": "rafapg93", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1130, "name": "vickalc", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1131, "name": "riukac", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1132, "name": "rusian69", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1133, "name": "wijimenezz", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1134, "name": "albertovf", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1135, "name": "markayala13", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1136, "name": "rocha30", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1137, "name": "righelch", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1138, "name": "deathbat00", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1139, "name": "nicoloboo02", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1140, "name": "sergiopq", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1141, "name": "angeloro", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1142, "name": "jony-english22", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1143, "name": "tilordqwerty", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1144, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1145, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1144, + "order": 1146, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1145, + "order": 1147, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1148, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1149, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1148, + "order": 1150, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1149, + "order": 1151, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1150, + "order": 1152, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1151, + "order": 1153, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1152, + "order": 1154, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1153, + "order": 1155, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1154, + "order": 1156, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1155, + "order": 1157, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1156, + "order": 1158, "name": "willypaz243", "count": 1, "languages": 1 }, { - "order": 1157, + "order": 1159, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1158, + "order": 1160, "name": "arperezinf", "count": 1, "languages": 1 }, { - "order": 1159, + "order": 1161, "name": "alecraft8", "count": 1, "languages": 1 }, { - "order": 1160, + "order": 1162, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1161, + "order": 1163, "name": "juampaweb", "count": 1, "languages": 1 }, { - "order": 1162, + "order": 1164, "name": "girngoma", "count": 1, "languages": 1 }, { - "order": 1163, + "order": 1165, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1164, + "order": 1166, "name": "ddaniel27", "count": 1, "languages": 1 }, { - "order": 1165, + "order": 1167, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1166, + "order": 1168, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1167, + "order": 1169, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1168, + "order": 1170, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1169, + "order": 1171, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1170, + "order": 1172, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1171, + "order": 1173, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1172, + "order": 1174, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1173, + "order": 1175, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1174, + "order": 1176, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1175, + "order": 1177, "name": "ouendinga", "count": 1, "languages": 1 }, { - "order": 1176, + "order": 1178, "name": "melonconyogurt", "count": 1, "languages": 1 From 6f5c9604130fe66cdafaa02c1bc60868b31da84f Mon Sep 17 00:00:00 2001 From: kenysdev Date: Sun, 15 Sep 2024 20:13:29 -0500 Subject: [PATCH 272/539] 37 - Rust - OASIS VS LINKIN PARK --- .../rust/kenysdev.rs | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/rust/kenysdev.rs diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/rust/kenysdev.rs b/Roadmap/37 - OASIS VS LINKIN PARK/rust/kenysdev.rs new file mode 100644 index 0000000000..79f3305e79 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/rust/kenysdev.rs @@ -0,0 +1,168 @@ +/* +_____________________________________ +https://github.com/kenysdev +2024 - Rust +_____________________________________ +37 OASIS VS LINKIN PARK +------------------------------------ +* ¡Dos de las bandas más grandes de la historia están de vuelta! +* Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? +* Desarrolla un programa que se conecte al API de Spotify y los compare. +* Requisitos: +* 1. Crea una cuenta de desarrollo en https://developer.spotify.com. +* 2. Conéctate al API utilizando tu lenguaje de programación. +* 3. Recupera datos de los endpoint que tú quieras. +* Acciones: +* 1. Accede a las estadísticas de las dos bandas. +* Por ejemplo: número total de seguidores, escuchas mensuales, +* canción con más reproducciones... +* 2. Compara los resultados de, por lo menos, 3 endpoint. +* 3. Muestra todos los resultados por consola para notificar al usuario. +* 4. Desarrolla un criterio para seleccionar qué banda es más popular. + +[dependencies] +tokio = { version = "1.37.0", features = ["full"] } +dotenv = "0.15.0" +rspotify = "0.13.3" +*/ + +use dotenv::dotenv; +use rspotify::{ + model::{ArtistId, FullArtist, SearchType, SearchResult}, + prelude::*, + ClientCredsSpotify, Credentials, +}; + +struct Spotify { + sp: ClientCredsSpotify, +} + +impl Spotify { + async fn new() -> Result> { + dotenv().ok(); + let creds = Credentials::from_env().unwrap(); + let sp = ClientCredsSpotify::new(creds); + sp.request_token().await?; + Ok(Self { sp }) + } + + async fn get_most_popular_artist(&self, name: &str) -> Result> { + let search_result = self.sp.search( + name, + SearchType::Artist, + None, + None, + Some(3), + None, + ).await?; + + match search_result { + SearchResult::Artists(page) => { + page.items.into_iter().max_by_key(|artist| artist.popularity) + .ok_or_else(|| format!("No artists found for '{}'", name).into()) + }, + _ => Err(format!("Unexpected search result for '{}'", name).into()), + } +} + + async fn artist_top_tracks(&self, id_artist: ArtistId<'_>) -> Option> { + self.sp.artist_top_tracks(id_artist, None).await.ok() + } + +} + +struct Versus { + a1: FullArtist, + a2: FullArtist, + sp: Spotify, + a1_score: u32, + a2_score: u32, +} + +impl Versus { + fn new(artist1: FullArtist, artist2: FullArtist, spotify_instance: Spotify) -> Self { + Self { + a1: artist1, + a2: artist2, + sp: spotify_instance, + a1_score: 0, + a2_score: 0, + } + } + + fn popularity(&mut self) { + let a1_pop = self.a1.popularity; + let a2_pop = self.a2.popularity; + + println!("Popularidad: {} vs {}", a1_pop, a2_pop); + if a1_pop > a2_pop { + self.a1_score += 1; + } else if a2_pop > a1_pop { + self.a2_score += 1; + } + } + + fn followers(&mut self) { + let a1_foll = self.a1.followers.total; + let a2_foll = self.a2.followers.total; + + println!("Seguidores: {} vs {}", a1_foll, a2_foll); + if a1_foll > a2_foll { + self.a1_score += 1; + } else if a2_foll > a1_foll { + self.a2_score += 1; + } + } + + async fn top3_tracks(&mut self) -> Result<(), Box> { + let a1_top = self.sp.artist_top_tracks(self.a1.id.clone()).await.unwrap_or_default(); + let a2_top = self.sp.artist_top_tracks(self.a2.id.clone()).await.unwrap_or_default(); + let a1_pop: u32 = a1_top.iter().take(3).map(|track| track.popularity).sum(); + let a2_pop: u32 = a2_top.iter().take(3).map(|track| track.popularity).sum(); + println!("Popularidad Top 3 canciones: {} vs {}", a1_pop, a2_pop); + + if a1_pop > a2_pop { + self.a1_score += 1; + } else if a2_pop > a1_pop { + self.a2_score += 1; + } + Ok(()) + } + + fn final_result(&self) { + println!("\nRESULTADO FINAL:"); + println!("{}: {} puntos", self.a1.name, self.a1_score); + println!("{}: {} puntos", self.a2.name, self.a2_score); + + if self.a1_score > self.a2_score { + println!("\n¡'{}' gana el versus!", self.a1.name); + } else if self.a2_score > self.a1_score { + println!("\n¡'{}' gana el versus!", self.a2.name); + } else { + println!("\n¡Es un empate!"); + } + } + + async fn start(&mut self) -> Result<(), Box> { + println!("{} vs {}", self.a1.name, self.a2.name); + self.popularity(); + self.followers(); + self.top3_tracks().await?; + self.final_result(); + Ok(()) + } +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + println!("VERSUS"); + let sp = Spotify::new().await?; + + let artist1 = sp.get_most_popular_artist("Oasis").await?; + let artist2 = sp.get_most_popular_artist("Linkin Park").await?; + + let mut vs = Versus::new(artist1, artist2, sp); + vs.start().await?; + + Ok(()) +} From 680dbdf387af40c8d995dadbce1187b7f7966685 Mon Sep 17 00:00:00 2001 From: David Villate <36652821+DavidVilem@users.noreply.github.com> Date: Sun, 15 Sep 2024 21:17:51 -0500 Subject: [PATCH 273/539] #37 - Python Reto Programacion 37 --- .../python/DavidVilem.py | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/DavidVilem.py diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/DavidVilem.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/DavidVilem.py new file mode 100644 index 0000000000..c15fa0b210 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/DavidVilem.py @@ -0,0 +1,139 @@ +import spotipy +from spotipy.oauth2 import SpotifyClientCredentials + +# Reemplaza con tus credenciales +client_id = '****' +client_secret = '****' + +# Autenticación +auth_manager = SpotifyClientCredentials(client_id=client_id, client_secret=client_secret) +sp = spotipy.Spotify(auth_manager=auth_manager) + +# Funciones definidas +def obtener_id_artista(sp, nombre_artista): + resultado = sp.search(q=f'artist:"{nombre_artista}"', type='artist') + if resultado['artists']['items']: + return resultado['artists']['items'][0]['id'] + else: + print(f"No se encontró el artista: {nombre_artista}") + return None + +def obtener_info_artista(sp, artista_id): + return sp.artist(artista_id) + +def obtener_cancion_mas_popular(sp, artista_id, pais='US'): + top_tracks = sp.artist_top_tracks(artista_id, country=pais) + if top_tracks['tracks']: + return top_tracks['tracks'][0] + else: + print("No se encontraron canciones top para este artista.") + return None + +def obtener_numero_albumes(sp, artista_id): + albums = sp.artist_albums(artista_id, album_type='album') + return len(albums['items']) + +def comparar_metricas(artistas, metrica): + artista1, artista2 = list(artistas.keys()) + puntos = {artista1: 0, artista2: 0} + + valor1 = artistas[artista1][metrica] + valor2 = artistas[artista2][metrica] + + if valor1 > valor2: + puntos[artista1] = 1 + print(f"{artista1} gana en {metrica.replace('_', ' ')}.") + elif valor2 > valor1: + puntos[artista2] = 1 + print(f"{artista2} gana en {metrica.replace('_', ' ')}.") + else: + print(f"Empate en {metrica.replace('_', ' ')}.") + + return puntos + +def comparar_popularidad_cancion(artistas): + artista1, artista2 = list(artistas.keys()) + puntos = {artista1: 0, artista2: 0} + + valor1 = artistas[artista1]['cancion_popular']['popularidad'] + valor2 = artistas[artista2]['cancion_popular']['popularidad'] + + if valor1 > valor2: + puntos[artista1] = 1 + print(f"{artista1} tiene la canción más popular.") + elif valor2 > valor1: + puntos[artista2] = 1 + print(f"{artista2} tiene la canción más popular.") + else: + print("Empate en popularidad de la canción más popular.") + + return puntos + +# Lista de artistas a comparar +artistas = { + 'Oasis': {}, + 'Linkin Park': {} +} + +# Obtener datos de cada artista +for nombre_artista in artistas.keys(): + artista_id = obtener_id_artista(sp, nombre_artista) + if artista_id: + info = obtener_info_artista(sp, artista_id) + cancion_popular = obtener_cancion_mas_popular(sp, artista_id) + numero_albumes = obtener_numero_albumes(sp, artista_id) + + artistas[nombre_artista]['id'] = artista_id + artistas[nombre_artista]['seguidores'] = info['followers']['total'] + artistas[nombre_artista]['popularidad'] = info['popularity'] + artistas[nombre_artista]['cancion_popular'] = { + 'nombre': cancion_popular['name'], + 'popularidad': cancion_popular['popularity'] + } + artistas[nombre_artista]['numero_albumes'] = numero_albumes + else: + print(f"No se pudieron obtener datos para {nombre_artista}.") + +# Mostrar la información recopilada +for nombre_artista, datos in artistas.items(): + print(f"\n{nombre_artista} tiene {datos['seguidores']} seguidores y una popularidad de {datos['popularidad']}.") + print(f"La canción más popular de {nombre_artista} es '{datos['cancion_popular']['nombre']}' con una popularidad de {datos['cancion_popular']['popularidad']}.") + print(f"{nombre_artista} tiene {datos['numero_albumes']} álbumes.") + +# Comparación y asignación de puntos +metricas = ['seguidores', 'popularidad', 'numero_albumes'] +puntos_totales = {artista: 0 for artista in artistas.keys()} + +# Comparación de seguidores +puntos = comparar_metricas(artistas, 'seguidores') +for artista in puntos_totales: + puntos_totales[artista] += puntos[artista] + +# Comparación de popularidad general +puntos = comparar_metricas(artistas, 'popularidad') +for artista in puntos_totales: + puntos_totales[artista] += puntos[artista] + +# Comparación de popularidad de la canción más popular +puntos = comparar_popularidad_cancion(artistas) +for artista in puntos_totales: + puntos_totales[artista] += puntos[artista] + +# Comparación de número de álbumes +puntos = comparar_metricas(artistas, 'numero_albumes') +for artista in puntos_totales: + puntos_totales[artista] += puntos[artista] + +# Mostrar la puntuación final y el ganador +print(f"\nPuntuación final:") +for artista, puntos in puntos_totales.items(): + print(f"{artista}: {puntos} puntos") + +# Determinar el ganador +artista1, artista2 = list(artistas.keys()) +if puntos_totales[artista1] > puntos_totales[artista2]: + print(f"\n¡{artista1} es la banda más popular!") +elif puntos_totales[artista2] > puntos_totales[artista1]: + print(f"\n¡{artista2} es la banda más popular!") +else: + print("\nAmbas bandas son igual de populares") From dfc9a8fe717fceda2211fc225116e691b503f299 Mon Sep 17 00:00:00 2001 From: Dkp-Dev Date: Sun, 15 Sep 2024 23:47:33 -0600 Subject: [PATCH 274/539] #01 - Python --- .../python/Dkp-Dev.py | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/Dkp-Dev.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/Dkp-Dev.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/Dkp-Dev.py new file mode 100644 index 0000000000..38c2cf234d --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/Dkp-Dev.py @@ -0,0 +1,136 @@ +""" +EJERCICIO: + * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: + * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) + * - Utilizando las operaciones con operadores que tú quieras, crea ejemplos + * que representen todos los tipos de estructuras de control que existan + * en tu lenguaje: + * Condicionales, iterativas, excepciones... + * - Debes hacer print por consola del resultado de todos los ejemplos. + """ + +# Operadores Aritmeticos +print(f"Suma 37 + 13 = {37 + 13}") +print(f"Resta 76 - 14 = {76 - 14}") +print(f"Multiplica 14 * 14 = {14 * 14}") +print(f"Divide 255 / 4 = {255 / 4}") +print(f"Modulo 23 % 3 = {23 % 3}") # Nota personal: Modulo es el residuo de una division, en el ejemplo 23/3 es 7 y 7*3 es 21 quedando 2 como resultado del Modulo. +print(f"Exponente 14 ** 3 = {14 ** 3}") +print(f"Division entera 255 // 4 = {255 // 4}") + +# Operadores de Comparacion +print(f"Igualdad: 14 == 14 es {14 == 14}") +print(f"Desigualdad: 14 == 27 es {14 != 27}") +print(f"Mayor que: 12 > 13 es {12 > 13}") +print(f"Menor que: 7 < 13 es {7 < 13}") +print(f"Mayor o igual que: 14 >= 13 es {14 >= 13}") +print(f"Menor o igual que: 10 <= 13 es {10 <= 13}") + +# Operadores Logicos +print(f"AND &&: 14 + 14 == 28 and 7 + 3 == 10 es {14 + 14 == 28 and 7 + 3 == 10}") +print(f"OR ||: 76 - 40 == 36 or 12 / 4 == 3 es {76 - 40 == 36 or 12 / 4 == 3}") +print(f"NOT !: not 14 - 7 == 6 es {not 14 - 7 == 6}") + +# Operadores de Asignacion +# Nota personal: Son operadores que pueden funcionar para asignar valores a variables. +numero = 14 +print(numero) +numero += 14 +print("+ 14 =", numero) +numero -= 4 +print("- 4 =", numero) +numero *= 2 +print("* 2 =", numero) +numero /= 2 +print("/ 4 =", numero) +numero %= 5 +print("% 5 =", numero) +numero **= 2 +print("** 2 =", numero) +numero //= 3 +print("// 3 =", numero) + +# Operadores de Identidad +# Nota personal: Aqui veremos que una identidad es distinto de un valor, las variables valen 5.0, pero no son iguales. +nuevo_numero = 5.0 +print(f"Mi nuevo numero es mi numero es {nuevo_numero is numero}") +print(nuevo_numero, "y", numero) +# Aqui cambiaremos el valor de la variable por el de otra y replicaremos el ejercicio. +nuevo_numero = numero +print(f"Mi nuevo numero es mi numero es {nuevo_numero is numero}") +print(nuevo_numero, "y", numero) +print(f"Mi nuevo numero no es mi numero es {nuevo_numero is not numero}") + +# Operadores de pertenencia +# Nota personal: para comprobar si algo pertenece a algo. +print(f"'D' in 'Dkp' es {'D' in 'Dkp'}") +print(f"'V' in 'Dkp' es {'V' in 'Dkp'}") +print(f"'D' not in 'Dkp' es {'D' not in 'Dkp'}") +print(f"'V' not in 'Dkp' es {'V' not in 'Dkp'}") + +# Operadores de Bit +a = 10 # 1010 # esta es su representacion binaria +b = 3 # 0011 # ocuparemos estos dos para hacer las operaciones manualmente + +print(f"AND: 10 & 3 = {10 & 3}") # 0010 # AND-& va comparar bit a bit y si ambos son 1 dara 1 +print(f"OR: 10 | 3 = {10 | 3}") # 1011 # OR-| va comparar y si un bit es 1 dara 1 +print(f"XOR: 10 ^ 3 = {10 ^ 3}") # 1001 # XOR-^ va comparar y si los bit no son iguales dara 1 +print(f"NOT: ~10 = {~10}") # va negando bit a bit + +print(f"Desplazamiento a la derecha: 10 >> 2 es {10 >> 2}") # >> sirve para mover bits en ceros, 10 es 1010 pasa a 0010 que es 2 +print(f"Desplazamiento a la izquierda: 10 << 2 es {10 << 2}") # << aqui 10 que es 1010 pasa a 101000 que es 40 + +""" +Estructura de control +""" + +# Condicionales + +string = "Condicional 1" + +if string == "Condicional 1": + print("Se imprime primera condicion") +elif string == "Condicional 2": + print("Se imprime segunda condicion") +else: + print("No es la condicion") + +# Iterativas + +for i in range(8): + print(i) +print("Termina el for") + +i = 0 +while i <= 10: + print(i) + i += 1 +print("Termina el while") + +# Manejo de excepciones + +conejo = 10 + +try: + print(conejo / 2) +except: + print("Dio error") +finally: + print("Ha finalizado el sistema de manejo de excepciones") + +""" +DIFICULTAD EXTRA (opcional): + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + * + * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. +""" + +print("Tarea Extra") + +for tortuga in range(10,56): + if tortuga % 2 == 0 and tortuga != 16 and tortuga % 3 != 0: + print(tortuga) + +print("Fin del ejercicio") \ No newline at end of file From 8351ed14c4421eefdf178dcf69263b97c6d8f63e Mon Sep 17 00:00:00 2001 From: Jymtr Date: Mon, 16 Sep 2024 09:10:42 +0200 Subject: [PATCH 275/539] #22 - python --- .../python/JuanDAW37.py | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/python/JuanDAW37.py diff --git a/Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/python/JuanDAW37.py b/Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/python/JuanDAW37.py new file mode 100644 index 0000000000..92aafc68c6 --- /dev/null +++ b/Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/python/JuanDAW37.py @@ -0,0 +1,95 @@ +"""* EJERCICIO: + * Explora el concepto de funciones de orden superior en tu lenguaje + * creando ejemplos simples (a tu elección) que muestren su funcionamiento. + * + * DIFICULTAD EXTRA (opcional): + * Dada una lista de estudiantes (con sus nombres, fecha de nacimiento y + * lista de calificaciones), utiliza funciones de orden superior para + * realizar las siguientes operaciones de procesamiento y análisis: + * - Promedio calificaciones: Obtiene una lista de estudiantes por nombre + * y promedio de sus calificaciones. + * - Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes + * que tienen calificaciones con un 9 o más de promedio. + * - Nacimiento: Obtiene una lista de estudiantes ordenada desde el más joven. + * - Mayor calificación: Obtiene la calificación más alta de entre todas las + * de los alumnos. + * - Una calificación debe estar comprendida entre 0 y 10 (admite decimales).""" + +from functools import reduce +import datetime + +# Pueden recibir funciones como parámetros +def funcSuperior(funcion, param): # Recibe una función y un parámetro + return funcion(param) + +longitud = funcSuperior(len, 'Juan') # Se pasa la función len, propia de Python, y una cadena, para que devuelva la longitud de dicha cadena. +print(f'La longitud del parámetro es -> {longitud}') + +# Pueden devolver funciones como resultado +def aplicarOperacion(operando1, operador): + def operacion(operando2): + if operador == '+': + return operando1 + operando2 + elif operador == '-': + return operando1 - operando2 + elif operador == '*': + return operando1 * operando2 + elif operador == '/': + return operando1 / operando2 + else: + return 'Operador no soportado o incorrecto' + return(operacion) # Devuelve la función operacion + +# Aplicar la operación +resultado = aplicarOperacion(3,'+') # resultado va a contener una función +print(resultado(4)) # A la función retornada, le envío el argumento restante para completar la operación +print(aplicarOperacion(4, '+')(5)) # Otra forma de llamarla + +# Hay funciones de orden superior, propias de Python +# map(): Aplica una función a cada elemento de una lista +letras = ['A', 'B', 'H', 'Y', 'J', 'P', 'R'] +def ordenar(letras): + return sorted(letras) + +ordenacion = map(ordenar, letras) +print(list(ordenacion)) + +# filter(): Aplica una función a cada elemento de una lista y devuelve los elementos que cumplen +def mayorQue5(num): + return num > 5 + +print(list(filter(mayorQue5, [6,4,8,14]))) + +# sorted() Ordena una lista +print(sorted(letras)) +print(sorted(letras, reverse=True)) # Ordena en sentido inverso +print(sorted([6,4,8,14], key=lambda n: -n)) # Aquí se usa una lambda: Funciones anónimas a las que se le envía la lista, en este caso, y se recibe la lista ordenada al revés + +# reduce(): Aplica una función a cada elemento de una lista y devuelve el resultado final. Tenemos que importarla de functools +def sumar(x, y): + return x + y + +print(reduce(sumar, [6,4,8,14])) # Devuelve la suma de los elementos de toda la lista (6 + 4 + 8 +14) = 32 + +# EXTRA +estudiantes = [ + {'nombre': 'Juan', 'fecha_nacimiento':'01-05-1968', 'notas':[7,8,9]}, + {'nombre': 'Mónica', 'fecha_nacimiento':'04-05-1968', 'notas':[8,7,9]}, + {'nombre': 'Luis', 'fecha_nacimiento':'06-07-1999', 'notas':[6,7,8]} + ] +# Promedio calificaciones: Obtiene una lista de estudiantes por nombre y promedio de sus calificaciones. +def media(notas): + return sum(notas) / len(notas) + +print(list(map(lambda estudiante:{'nombre':estudiante['nombre'], + 'media':media(estudiante['notas'])}, estudiantes))) +# Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes que tienen calificaciones con un 9 o más de promedio. + +print(list(map(lambda estudiante: + estudiante['nombre'], filter(lambda estudiante: media(estudiante['notas']) >= 9, estudiantes)))) + +# Nacimiento: Obtiene una lista de estudiantes ordenada desde el más joven. +print(list(sorted(estudiantes, key=lambda estudiante: datetime.datetime.strptime(estudiante['fecha_nacimiento'], '%d-%m-%Y'), reverse = True))) + +# Mayor calificación: Obtiene la calificación más alta de entre todas las de los alumnos. +print(max(map(lambda estudiante: max(estudiante['notas']), estudiantes))) \ No newline at end of file From df3ae9a1458771d6f01fe2dc5fe743d05326dcbc Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Mon, 16 Sep 2024 09:58:31 +0200 Subject: [PATCH 276/539] #05 java --- .../java/eulogioep.java | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Roadmap/05 - VALOR Y REFERENCIA/java/eulogioep.java diff --git a/Roadmap/05 - VALOR Y REFERENCIA/java/eulogioep.java b/Roadmap/05 - VALOR Y REFERENCIA/java/eulogioep.java new file mode 100644 index 0000000000..b51873e61a --- /dev/null +++ b/Roadmap/05 - VALOR Y REFERENCIA/java/eulogioep.java @@ -0,0 +1,70 @@ +public class eulogioep { + public static void main(String[] args) { + // Ejemplos de asignación por valor (tipos primitivos) + int a = 5; + int b = a; // b es una copia del valor de a + b = 10; // Cambiar b no afecta a a + System.out.println("a: " + a + ", b: " + b); // a: 5, b: 10 + + // Ejemplos de asignación por referencia (objetos) + int[] arr1 = {1, 2, 3}; + int[] arr2 = arr1; // arr2 apunta al mismo array que arr1 + arr2[0] = 100; // Cambiar arr2 afecta a arr1 + System.out.println("arr1[0]: " + arr1[0] + ", arr2[0]: " + arr2[0]); // arr1[0]: 100, arr2[0]: 100 + + // Ejemplo de función con parámetro por valor + int x = 5; + modificarValor(x); + System.out.println("x después de modificarValor: " + x); // x no cambia + + // Ejemplo de función con parámetro por referencia + int[] array = {1, 2, 3}; + modificarReferencia(array); + System.out.println("array[0] después de modificarReferencia: " + array[0]); // array[0] cambia + + // DIFICULTAD EXTRA + // Programa 1: Intercambio por valor + int num1 = 10, num2 = 20; + System.out.println("Antes del intercambio por valor: num1 = " + num1 + ", num2 = " + num2); + int[] resultadoValor = intercambioPorValor(num1, num2); + int nuevoNum1 = resultadoValor[0], nuevoNum2 = resultadoValor[1]; + System.out.println("Después del intercambio por valor:"); + System.out.println("Variables originales: num1 = " + num1 + ", num2 = " + num2); + System.out.println("Nuevas variables: nuevoNum1 = " + nuevoNum1 + ", nuevoNum2 = " + nuevoNum2); + + // Programa 2: Intercambio por referencia + Integer ref1 = 30, ref2 = 40; + System.out.println("\nAntes del intercambio por referencia: ref1 = " + ref1 + ", ref2 = " + ref2); + Integer[] resultadoReferencia = intercambioPorReferencia(ref1, ref2); + Integer nuevoRef1 = resultadoReferencia[0], nuevoRef2 = resultadoReferencia[1]; + System.out.println("Después del intercambio por referencia:"); + System.out.println("Variables originales: ref1 = " + ref1 + ", ref2 = " + ref2); + System.out.println("Nuevas variables: nuevoRef1 = " + nuevoRef1 + ", nuevoRef2 = " + nuevoRef2); + } + + // Función que recibe un parámetro por valor + public static void modificarValor(int n) { + n = 100; // Este cambio no afecta a la variable original + } + + // Función que recibe un parámetro por referencia + public static void modificarReferencia(int[] arr) { + arr[0] = 100; // Este cambio afecta al array original + } + + // Función para intercambio por valor + public static int[] intercambioPorValor(int a, int b) { + int temp = a; + a = b; + b = temp; + return new int[]{a, b}; + } + + // Función para intercambio por referencia + public static Integer[] intercambioPorReferencia(Integer a, Integer b) { + Integer temp = new Integer(a); + a = new Integer(b); + b = new Integer(temp); + return new Integer[]{a, b}; + } +} \ No newline at end of file From 565590c446d8c79b2915da504b560ceed091063c Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Mon, 16 Sep 2024 09:59:21 +0200 Subject: [PATCH 277/539] #05 javascript --- .../javascript/eulogioep.js | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Roadmap/05 - VALOR Y REFERENCIA/javascript/eulogioep.js diff --git a/Roadmap/05 - VALOR Y REFERENCIA/javascript/eulogioep.js b/Roadmap/05 - VALOR Y REFERENCIA/javascript/eulogioep.js new file mode 100644 index 0000000000..7b6bcb2ceb --- /dev/null +++ b/Roadmap/05 - VALOR Y REFERENCIA/javascript/eulogioep.js @@ -0,0 +1,69 @@ +// Ejemplos de Valor y Referencia en JavaScript + +// Función para imprimir resultados +function print(message) { + console.log(message); +} + +// Ejemplos de asignación por valor (tipos primitivos) +let a = 5; +let b = a; // b es una copia del valor de a +b = 10; // Cambiar b no afecta a a +print(`Asignación por valor: a: ${a}, b: ${b}`); // a: 5, b: 10 + +// Ejemplos de asignación por referencia (objetos y arrays) +let arr1 = [1, 2, 3]; +let arr2 = arr1; // arr2 apunta al mismo array que arr1 +arr2[0] = 100; // Cambiar arr2 afecta a arr1 +print(`Asignación por referencia: arr1[0]: ${arr1[0]}, arr2[0]: ${arr2[0]}`); // arr1[0]: 100, arr2[0]: 100 + +// Función con parámetro por valor +function modificarValor(n) { + n = 100; // Este cambio no afecta a la variable original +} + +let x = 5; +modificarValor(x); +print(`x después de modificarValor: ${x}`); // x no cambia + +// Función con parámetro por referencia +function modificarReferencia(arr) { + arr[0] = 100; // Este cambio afecta al array original +} + +let array = [1, 2, 3]; +modificarReferencia(array); +print(`array[0] después de modificarReferencia: ${array[0]}`); // array[0] cambia + +// DIFICULTAD EXTRA +// Función para intercambio por valor +function intercambioPorValor(a, b) { + let temp = a; + a = b; + b = temp; + return [a, b]; +} + +// Función para intercambio por referencia +function intercambioPorReferencia(obj) { + let temp = obj.a; + obj.a = obj.b; + obj.b = temp; + return { a: obj.a, b: obj.b }; +} + +// Programa 1: Intercambio por valor +let num1 = 10, num2 = 20; +print(`Antes del intercambio por valor: num1 = ${num1}, num2 = ${num2}`); +let [nuevoNum1, nuevoNum2] = intercambioPorValor(num1, num2); +print("Después del intercambio por valor:"); +print(`Variables originales: num1 = ${num1}, num2 = ${num2}`); +print(`Nuevas variables: nuevoNum1 = ${nuevoNum1}, nuevoNum2 = ${nuevoNum2}`); + +// Programa 2: Intercambio por referencia +let obj = { a: 30, b: 40 }; +print(`\nAntes del intercambio por referencia: obj.a = ${obj.a}, obj.b = ${obj.b}`); +let nuevoObj = intercambioPorReferencia(obj); +print("Después del intercambio por referencia:"); +print(`Objeto original: obj.a = ${obj.a}, obj.b = ${obj.b}`); +print(`Nuevo objeto: nuevoObj.a = ${nuevoObj.a}, nuevoObj.b = ${nuevoObj.b}`); \ No newline at end of file From 06656cd3f5cffdbd357b96d46af3c811854c8490 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Mon, 16 Sep 2024 10:00:12 +0200 Subject: [PATCH 278/539] #05 php --- .../05 - VALOR Y REFERENCIA/php/eulogioep.php | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Roadmap/05 - VALOR Y REFERENCIA/php/eulogioep.php diff --git a/Roadmap/05 - VALOR Y REFERENCIA/php/eulogioep.php b/Roadmap/05 - VALOR Y REFERENCIA/php/eulogioep.php new file mode 100644 index 0000000000..8f972efe05 --- /dev/null +++ b/Roadmap/05 - VALOR Y REFERENCIA/php/eulogioep.php @@ -0,0 +1,71 @@ + \ No newline at end of file From 3cd01cd97d973ba035cd61e2840411785d9ce695 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Mon, 16 Sep 2024 10:01:09 +0200 Subject: [PATCH 279/539] #05 typescript --- .../typescript/eulogioep.ts | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Roadmap/05 - VALOR Y REFERENCIA/typescript/eulogioep.ts diff --git a/Roadmap/05 - VALOR Y REFERENCIA/typescript/eulogioep.ts b/Roadmap/05 - VALOR Y REFERENCIA/typescript/eulogioep.ts new file mode 100644 index 0000000000..9013a91dd5 --- /dev/null +++ b/Roadmap/05 - VALOR Y REFERENCIA/typescript/eulogioep.ts @@ -0,0 +1,73 @@ +// Función para imprimir resultados +function print(message: string): void { + console.log(message); +} + +// Ejemplos de asignación por valor (tipos primitivos) +let a: number = 5; +let b: number = a; // b es una copia del valor de a +b = 10; // Cambiar b no afecta a a +print(`Asignación por valor: a: ${a}, b: ${b}`); // a: 5, b: 10 + +// Ejemplos de asignación por referencia (objetos y arrays) +let arr1: number[] = [1, 2, 3]; +let arr2: number[] = arr1; // arr2 apunta al mismo array que arr1 +arr2[0] = 100; // Cambiar arr2 afecta a arr1 +print(`Asignación por referencia: arr1[0]: ${arr1[0]}, arr2[0]: ${arr2[0]}`); // arr1[0]: 100, arr2[0]: 100 + +// Función con parámetro por valor +function modificarValor(n: number): void { + n = 100; // Este cambio no afecta a la variable original +} + +let x: number = 5; +modificarValor(x); +print(`x después de modificarValor: ${x}`); // x no cambia + +// Función con parámetro por referencia +function modificarReferencia(arr: number[]): void { + arr[0] = 100; // Este cambio afecta al array original +} + +let array: number[] = [1, 2, 3]; +modificarReferencia(array); +print(`array[0] después de modificarReferencia: ${array[0]}`); // array[0] cambia + +// DIFICULTAD EXTRA +// Función para intercambio por valor +function intercambioPorValor(a: number, b: number): [number, number] { + let temp: number = a; + a = b; + b = temp; + return [a, b]; +} + +// Interfaz para el objeto de intercambio por referencia +interface IntercambioObj { + a: number; + b: number; +} + +// Función para intercambio por referencia +function intercambioPorReferencia(obj: IntercambioObj): IntercambioObj { + let temp: number = obj.a; + obj.a = obj.b; + obj.b = temp; + return { a: obj.a, b: obj.b }; +} + +// Programa 1: Intercambio por valor +let num1: number = 10, num2: number = 20; +print(`Antes del intercambio por valor: num1 = ${num1}, num2 = ${num2}`); +let [nuevoNum1, nuevoNum2] = intercambioPorValor(num1, num2); +print("Después del intercambio por valor:"); +print(`Variables originales: num1 = ${num1}, num2 = ${num2}`); +print(`Nuevas variables: nuevoNum1 = ${nuevoNum1}, nuevoNum2 = ${nuevoNum2}`); + +// Programa 2: Intercambio por referencia +let obj: IntercambioObj = { a: 30, b: 40 }; +print(`\nAntes del intercambio por referencia: obj.a = ${obj.a}, obj.b = ${obj.b}`); +let nuevoObj: IntercambioObj = intercambioPorReferencia(obj); +print("Después del intercambio por referencia:"); +print(`Objeto original: obj.a = ${obj.a}, obj.b = ${obj.b}`); +print(`Nuevo objeto: nuevoObj.a = ${nuevoObj.a}, nuevoObj.b = ${nuevoObj.b}`); \ No newline at end of file From f0e0d6dd0b07072222698df344456ff297abca97 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Mon, 16 Sep 2024 10:02:26 +0200 Subject: [PATCH 280/539] #05 sql --- .../05 - VALOR Y REFERENCIA/sql/eulogioep.sql | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Roadmap/05 - VALOR Y REFERENCIA/sql/eulogioep.sql diff --git a/Roadmap/05 - VALOR Y REFERENCIA/sql/eulogioep.sql b/Roadmap/05 - VALOR Y REFERENCIA/sql/eulogioep.sql new file mode 100644 index 0000000000..c825ed2280 --- /dev/null +++ b/Roadmap/05 - VALOR Y REFERENCIA/sql/eulogioep.sql @@ -0,0 +1,83 @@ +-- Creación de tablas +CREATE TABLE Empleados ( + id INT PRIMARY KEY, + nombre VARCHAR(50), + salario DECIMAL(10, 2) +); + +CREATE TABLE Departamentos ( + id INT PRIMARY KEY, + nombre VARCHAR(50), + jefe_id INT, + FOREIGN KEY (jefe_id) REFERENCES Empleados(id) +); + +-- Inserción de datos +INSERT INTO Empleados (id, nombre, salario) VALUES +(1, 'Juan', 50000), +(2, 'María', 60000), +(3, 'Carlos', 55000); + +INSERT INTO Departamentos (id, nombre, jefe_id) VALUES +(1, 'Ventas', 1), +(2, 'Marketing', 2); + +-- Analogía de "paso por valor" +-- Actualizar el salario de un empleado +UPDATE Empleados +SET salario = salario * 1.1 +WHERE id = 1; + +-- Verificar el cambio +SELECT * FROM Empleados WHERE id = 1; + +-- Analogía de "paso por referencia" +-- Cambiar el jefe de un departamento +UPDATE Departamentos +SET jefe_id = 3 +WHERE id = 1; + +-- Verificar el cambio +SELECT d.nombre AS Departamento, e.nombre AS Jefe +FROM Departamentos d +JOIN Empleados e ON d.jefe_id = e.id +WHERE d.id = 1; + +-- Procedimiento almacenado para simular "paso por valor" +DELIMITER // +CREATE PROCEDURE AumentarSalario(IN empleado_id INT, IN aumento DECIMAL(10, 2)) +BEGIN + DECLARE salario_actual DECIMAL(10, 2); + + -- Obtener el salario actual + SELECT salario INTO salario_actual FROM Empleados WHERE id = empleado_id; + + -- Aumentar el salario (solo dentro del procedimiento) + SET salario_actual = salario_actual + aumento; + + -- Mostrar el nuevo salario (que no afecta a la tabla real) + SELECT salario_actual AS NuevoSalario; +END // +DELIMITER ; + +-- Procedimiento almacenado para simular "paso por referencia" +DELIMITER // +CREATE PROCEDURE CambiarJefeDepartamento(IN departamento_id INT, IN nuevo_jefe_id INT) +BEGIN + -- Actualizar el jefe del departamento (afecta a la tabla real) + UPDATE Departamentos SET jefe_id = nuevo_jefe_id WHERE id = departamento_id; + + -- Mostrar el cambio + SELECT d.nombre AS Departamento, e.nombre AS NuevoJefe + FROM Departamentos d + JOIN Empleados e ON d.jefe_id = e.id + WHERE d.id = departamento_id; +END // +DELIMITER ; + +-- Ejemplos de uso de los procedimientos +CALL AumentarSalario(1, 5000); +SELECT * FROM Empleados WHERE id = 1; -- El salario real no cambia + +CALL CambiarJefeDepartamento(2, 3); +SELECT * FROM Departamentos WHERE id = 2; -- El jefe sí cambia en la tabla real \ No newline at end of file From dcf888c9ed2412cd4a9c90fed50784b7d031e236 Mon Sep 17 00:00:00 2001 From: oriaj3 Date: Mon, 16 Sep 2024 11:37:44 +0200 Subject: [PATCH 281/539] Sol #37 - Python --- .../python/oriaj3.py | 234 ++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/oriaj3.py diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/oriaj3.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/oriaj3.py new file mode 100644 index 0000000000..ad298c7e1a --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/oriaj3.py @@ -0,0 +1,234 @@ +""" +/* + * EJERCICIO: + * ¡Dos de las bandas más grandes de la historia están de vuelta! + * Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? + * Desarrolla un programa que se conecte al API de Spotify y los compare. + * Requisitos: + * 1. Crea una cuenta de desarrollo en https://developer.spotify.com. + * 2. Conéctate al API utilizando tu lenguaje de programación. + * 3. Recupera datos de los endpoint que tú quieras. + * Acciones: + * 1. Accede a las estadísticas de las dos bandas. + * Por ejemplo: número total de seguidores, escuchas mensuales, + * canción con más reproducciones... + * 2. Compara los resultados de, por lo menos, 3 endpoint. + * 3. Muestra todos los resultados por consola para notificar al usuario. + * 4. Desarrolla un criterio para seleccionar qué banda es más popular. + */ +""" + +import os +import requests +from dotenv import load_dotenv + +load_dotenv() #Carga las variables del archivo .env + +CLIENT_ID = os.getenv("SPOTIFY_CLIENT_ID") +CLIENT_SECRET = os.getenv("SPOTIFY_CLIENT_SECRET") +X_RAPIDAPI_KEY = os.getenv("X_RAPIDAPI_KEY") + +#TODO: IMPLEMENTAR EXCEPCIONES PARA MANEJAR ERRORES DE CONEXIÓN + +#Función para obtener el token de acceso +def get_access_token(client_id, client_secret): + url = "https://accounts.spotify.com/api/token" + data={"grant_type":"client_credentials" } + auth=(client_id, client_secret) + response = requests.post(url=url, data=data, auth=auth) + #Verificar si la respuesta es correcta + if response.status_code == 200: + token_data = response.json() + return token_data.get("access_token") + else: + #Mostrar error + print(f"Error: Unable to get access token. Status Code {response.status_code}.") + return None + + +#Función para obtener el ID de un artista +def get_artist_ID(artist_name, token): + url = f"https://api.spotify.com/v1/search?q={artist_name}&type=artist" + headers = {"Authorization": f"Bearer {token}"} + response = requests.get(url=url, headers=headers) + + if response.status_code == 200: + response_data = response.json() + items = response_data.get("artists", {}).get("items", []) + + if items: + # Buscar el artista cuyo nombre coincide con el proporcionado + for artist in items: + if artist.get("name").lower() == artist_name.lower(): + artist_id = artist.get("id") + return artist_id + + # Si no se encontró coincidencia exacta, devolver el primer resultado + return items[0].get("id") + else: + print("No se encontraron artistas.") + return None + else: + print(f"Error: Unable to get artist data. Status Code {response.status_code}.") + return None + +#Función para obtener el nombre de un artista, sus generos, seguidores y su popularidad dado un ID +def get_artist_data(artist_id, token): + url = f"https://api.spotify.com/v1/artists/{artist_id}" + headers = {"Authorization": f"Bearer {token}"} + response = requests.get(url=url, headers=headers) + + if response.status_code == 200: + response_data = response.json() + artist_name = response_data.get("name") + artist_genres = response_data.get("genres") + artist_followers = response_data.get("followers").get("total") + artist_popularity = response_data.get("popularity") + + return artist_name, artist_genres, artist_followers, artist_popularity + else: + print(f"Error: Unable to get artist data. Status Code {response.status_code}.") + return None, None, None + +# Función para obtener el número de escuchas mensuales de un artista con el API de RapidAPI +def get_monthly_listeners(artist_id, x_rapidapi_key): + url = "https://spotify-artist-monthly-listeners.p.rapidapi.com/artists/spotify_artist_monthly_listeners" + querystring = {"spotify_artist_id": artist_id} + headers = { + "x-rapidapi-key": x_rapidapi_key, + "x-rapidapi-host": "spotify-artist-monthly-listeners.p.rapidapi.com" + } + + try: + response = requests.get(url, headers=headers, params=querystring) + if response.status_code == 200: + response_data = response.json() + monthly_listeners = response_data.get("monthly_listeners") + return monthly_listeners + else: + print(f"Error: Unable to get monthly listeners. Status Code {response.status_code}.") + print(response.json()) # Imprimir el contenido de la respuesta para más detalles + return None + except Exception as e: + print(f"An error occurred: {e}") + return None + +#Función para obtener las mejores canciones de un artista +def get_artist_top_tracks(artist_id, token): + url = f"https://api.spotify.com/v1/artists/{artist_id}/top-tracks?market=ES" + headers = {"Authorization": f"Bearer {token}"} + response = requests.get(url=url, headers=headers) + if response.status_code == 200: + response_data = response.json() + return response_data + else: + print(f"Error: Unable to get top tracks. Status Code {response.status_code}.") + return None + +#Función para obtener los índices de popularidad de mejores canciones de un artista +def get_top_tracks_popularity(top_tracks): + top_tracks_popularity = [] + for track in top_tracks.get("tracks", []): + track_name = track.get("name") + track_popularity = track.get("popularity") + top_tracks_popularity.append((track_name, track_popularity)) + mean = sum([track[1] for track in top_tracks_popularity]) / len(top_tracks_popularity) + #Obtiene la canción más popular + top_tracks_popularity.sort(key=lambda x: x[1], reverse=True) + return mean, top_tracks_popularity, top_tracks_popularity[0] + +#Función para comparar la popularidad de dos artistas: +def compare_two_artist(artist1_name, artist2_name, token): + id1 = get_artist_ID(artist1_name, token) + id2 = get_artist_ID(artist2_name, token) + + top_tracks1 = get_artist_top_tracks(id1, token) + top_tracks2 = get_artist_top_tracks(id2, token) + + mean1, top_tracks1, top_track1 = get_top_tracks_popularity(top_tracks1) + mean2, top_tracks2, top_track2 = get_top_tracks_popularity(top_tracks2) + + name1, gen1, popularity1, followers1 = get_artist_data(id1, token) + name2, gen2, popularity2, followers2 = get_artist_data(id2, token) + + points1 = 0 + points2 = 0 + #Mostrar los datos de los artistas + print(f"\n*** Comparación de popularidad entre {name1} y {name2}: ***\n") + print(f"[Artista 1]: {name1}") + print(f"Géneros: {gen1}") + print(f"Popularidad: {popularity1}") + print(f"Seguidores: {followers1}") + print(f"Media de popularidad mejores canciones: {mean1}") + print(f"Mejores canciones: {top_tracks1}\n") + + print(f"\n[Artista 2]: {name2}") + print(f"Géneros: {gen2}") + print(f"Popularidad: {popularity2}") + print(f"Seguidores: {followers2}") + print(f"Media de popularidad mejores canciones: {mean2}") + print(f"Mejores canciones: {top_tracks2}\n") + + input("Presiona Enter para continuar...") + #Comparar seguidores + print("\n - Batalla 1: Comparación de seguidores") + if followers1 > followers2: + print(f"{artist1_name} tiene más seguidores.") + points1 += 1 + elif followers1 < followers2: + print(f"{artist2_name} tiene más seguidores.") + points2 += 1 + else: + print(f"{artist1_name} y {artist2_name} tienen el mismo número de seguidores.") + + # Comparar índices de popularidad total + print("\n - Batalla 2: Comparación de popularidad") + if popularity1 > popularity2: + print(f"{artist1_name} tiene un índice de popularidad mayor.") + points1 += 1 + elif popularity1 < popularity2: + print(f"{artist2_name} tiene un índice de popularidad mayor.") + points2 += 1 + else: + print(f"{artist1_name} y {artist2_name} tienen el mismo índice de popularidad.") + + # Comparar popularidad de la mejor canción + print("\n - Batalla 3: Mejor canción") + if top_track1[1] > top_track2[1]: + print(f"La canción más popular de {artist1_name} es más popular") + points1 += 1 + elif top_track1[1] < top_track2[1]: + print(f"La canción más popular de {artist2_name} es más popular") + points2 += 1 + else: + print(f"La canción más popular de {artist1_name} y {artist2_name} tienen la misma popularidad.") + + #Comparar la media de popularidad de las canciones más populares + print("\n - Batalla Final: Mejores canciones") + if mean1 > mean2: + print(f"La media de popularidad de las canciones de {artist1_name} es mayor") + points1 += 1 + elif mean1 < mean2: + print(f"La media de popularidad de las canciones de {artist2_name} es mayor") + points2 += 1 + else: + print(f"La media de popularidad de las canciones de {artist1_name} y {artist2_name} es la misma.") + + #Recuento de puntos + print("\n***El ganador es ... ***") + if points1 > points2: + print(f"{artist1_name}!\n\n") + elif points1 < points2: + print(f"{artist2_name}!\n\n") + else: + print("¡Es un empate!") + input("Presiona Enter para continuar...") + + +#Ejemplos de funcionamiento del programa +#Obtener el token de acceso +TOKEN_LOGIN = get_access_token(CLIENT_ID, CLIENT_SECRET) + +#Comparar dos artistas +compare_two_artist("Natos y Waor", "Ajax y Prok", TOKEN_LOGIN) +compare_two_artist("Oasis", "Linkin Park", TOKEN_LOGIN) From 4e4d1c3940c2b5abe0b3e76905d9c78a8168ed69 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:18:17 -0400 Subject: [PATCH 282/539] 37 - JavaScript --- .../javascript/RicJDev.js | 66 ++++++++++++++----- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js index 94bb7d1b6b..bc0b3644e4 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js @@ -3,7 +3,6 @@ * * @param {string} clientId * @param {string} clientSecret - * @returns {Promise} * * @see https://developer.spotify.com/dashboard */ @@ -36,39 +35,72 @@ Si desea ejecutar este código deberá usar sus propias id's. import { myClientId, myClientSecret } from './RicJDev_client.js' const token = await getToken(myClientId, myClientSecret) +const GET_requestMethod = { + method: 'GET', + headers: { + Authorization: `${token.token_type} ${token.access_token}`, + }, +} /** * Retorna la información sobre un artista utilizando la API de Spotify. * * @param {string} artistId se obtiene de la página del artista en Spotify (https://open.spotify.com/intl-es/artist/ `artistId`). - * @param {object} token token de acceso. Use `getToken()` para obetenerlo. * @returns {Promise} + * + * @see https://developer.spotify.com/dashboard */ -async function getArtistData(artistId, token) { - const artistData = await fetch(`https://api.spotify.com/v1/artists/${artistId}`, { - method: 'GET', - headers: { - Authorization: `${token.token_type} ${token.access_token}`, - }, - }).then((response) => response.json()) +async function getArtistData(artistId) { + const artistData = await fetch( + `https://api.spotify.com/v1/artists/${artistId}`, + GET_requestMethod + ).then((response) => response.json()) + + return artistData +} + +/** + * Retorna la data de los albums de un artista utilizando la API de Spotify. + * + * @param {string} artistId se obtiene de la página del artista en Spotify (https://open.spotify.com/intl-es/artist/ `artistId`). + * + * @see https://developer.spotify.com/dashboard + */ + +async function getArtistAlbumsData(artistId) { + const artistData = await fetch( + `https://api.spotify.com/v1/artists/${artistId}/albums?include_groups=album,single&market=VE&limit=50`, + GET_requestMethod + ).then((response) => response.json()) return artistData } // Almacenamos las id's de Oasis y Linkin Park. -const OasisId = '2DaxqgrOhkeH0fpeiQq2f4' -const LinkinParkId = '6XyY86QOPPrYVGvF9ch6wz' +const Oasis = { + id: '2DaxqgrOhkeH0fpeiQq2f4', + + data: null, -const OasisData = await getArtistData(OasisId, token) -const LinkinParkData = await getArtistData(LinkinParkId, token) + topTracks: null, -console.log('\nDatos de Oasis') -console.log(OasisData) + albums: null, +} + +const LinkinPark = { + id: '6XyY86QOPPrYVGvF9ch6wz', + + data: null, + + topTracks: null, + + albums: null, +} -console.log('\nDatos de Linkin Park') -console.log(LinkinParkData) +Oasis.data = await getArtistData(Oasis.id, token) +LinkinPark.data = await getArtistData(Oasis.id, token) /* TODO: From ef02e3bda7916a26854fad0ef82c1b81e35fecf3 Mon Sep 17 00:00:00 2001 From: Mario Barbero Date: Mon, 16 Sep 2024 15:46:38 +0200 Subject: [PATCH 283/539] Reto #6 Recursividad --- Roadmap/06 - RECURSIVIDAD/python/elbarbero.py | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Roadmap/06 - RECURSIVIDAD/python/elbarbero.py diff --git a/Roadmap/06 - RECURSIVIDAD/python/elbarbero.py b/Roadmap/06 - RECURSIVIDAD/python/elbarbero.py new file mode 100644 index 0000000000..be8da6d1c8 --- /dev/null +++ b/Roadmap/06 - RECURSIVIDAD/python/elbarbero.py @@ -0,0 +1,60 @@ +""" + * EJERCICIO: + * Entiende el concepto de recursividad creando una función recursiva que imprima + * números del 100 al 0. + * + * DIFICULTAD EXTRA (opcional): + * Utiliza el concepto de recursividad para: + * - Calcular el factorial de un número concreto (la función recibe ese número). + * - Calcular el valor de un elemento concreto (según su posición) en la + * sucesión de Fibonacci (la función recibe la posición). + * + """ + +def printNumbers(limit: int, current_number: int): + if current_number < limit: + print(current_number) + current_number += 1 + printNumbers(limit, current_number) + +def recursiveFactorialNumber(n: int, i = 1, factorial = 1): + if i < (n + 1): + factorial *= i + i += 1 + recursiveFactorialNumber(n, i, factorial) + else: + print(f"El factorial de {n} es {factorial}") + +def factorialNumber(n: int): + factorial = 1 + for i in range(1, num + 1): + factorial *= i + print(f"El factorial de {num} es {factorial}") + +def fibonacci(n: int): + num1 = 0 + num2 = 1 + next_number = num2 + count = 1 + + while count <= n: + print(next_number, end=" ") + count += 1 + num1, num2 = num2, next_number + next_number = num1 + num2 + +def recursiveFibonacci(n: int): + if n < 0: + print("Incorrect input") + elif n == 0: + return 0 + elif n == 1 or n == 2: + return 1 + else: + return recursiveFibonacci(n-1) + recursiveFibonacci(n-2) + + +if __name__ == "__main__": + printNumbers(limit = 100, current_number = 0) + recursiveFactorialNumber(6) + print(f"El número fibonacci del número 8 es {recursiveFibonacci(9)}") \ No newline at end of file From 7438d9d47ed36bf0ec117cf6e3b0cd8c4403cb91 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:34:11 -0500 Subject: [PATCH 284/539] #07 - Java --- .../java/matinbohorquez.java | 149 ++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 Roadmap/07 - PILAS Y COLAS/java/matinbohorquez.java diff --git a/Roadmap/07 - PILAS Y COLAS/java/matinbohorquez.java b/Roadmap/07 - PILAS Y COLAS/java/matinbohorquez.java new file mode 100644 index 0000000000..3030431649 --- /dev/null +++ b/Roadmap/07 - PILAS Y COLAS/java/matinbohorquez.java @@ -0,0 +1,149 @@ +import java.util.LinkedList; +import java.util.Queue; +import java.util.Scanner; +import java.util.Stack; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * #07 PILAS Y COLAS + * + * @author martinbohorquez + */ +public class matinbohorquez { + private static final String DOMAIN_REGEX = "^(?:https?:\\/\\/)?(?:www\\.)?((?:[a-zA-Z0-9\\-]+\\.)+[a-zA-Z]{2,})(\\/[^\\s]*)?$"; + private static final Pattern DOMAIN_PATTERN = Pattern.compile(DOMAIN_REGEX); + /** + * Pila / Stack (LIFO) + */ + private static Stack pila = new Stack<>(); + /** + * Cola / Queue (FIFO) + */ + private static Queue cola = new LinkedList<>(); + + private static void webNavigator() { + Stack stack = new Stack<>(); + Stack stackBackup = new Stack<>(); + + outterLoop: + while (true) { + Scanner scanner = new Scanner(System.in); + System.out.print(""" + ----------------------------------------------------------- + Bienvenido al navegador web, ingresar una de las siguientes opciones: + 1. Escribir una URL válida para navegar a una página web. + 2. "adelante" - para regresar a una página posterior. + 3. "atrás" - para regresar a una página anterior. + 4. "salir" - para cerrar el navegador. + ----------------------------------------------------------- + """); + System.out.print("Ingresar su opción: "); + String action = scanner.nextLine(); + + switch (action) { + case "salir" -> { + System.out.println("Saliendo del navegador web!"); + break outterLoop; + } + case "adelante" -> { + if (!stackBackup.isEmpty()) stack.push(stackBackup.pop()); + } + case "atrás" -> { + if (!stack.isEmpty()) stackBackup.push(stack.pop()); + } + default -> { + String formattedURL = formatURL(action); + String lastUrl = stack.isEmpty() ? null : stack.getLast(); + if (formattedURL != null && !formattedURL.equals(lastUrl)) stack.push(formattedURL); + stackBackup = new Stack<>(); + } + } + if (!stack.isEmpty()) System.out.printf("Has navegado a la web: %s%n", stack.getLast()); + else System.out.println("Página de inicio!"); + } + } + + private static String formatURL(String input) { + Matcher matcher = DOMAIN_PATTERN.matcher(input); + StringBuilder result = new StringBuilder(); + + if (matcher.find()) { + // Captura el dominio completo sin el protocolo, 'www.' y el path + String domain = matcher.group(1); + String path = matcher.group(2); + + // Verifica si el protocolo está presente, si no, añádelo + if (!input.startsWith("http://") && !input.startsWith("https://")) result.append("http://"); + + // Verifica si 'www.' está presente, si no, añádelo + if (!"www.".contains(input)) result.append("www."); + + // Añade el dominio capturado + result.append(domain); + if (path != null) result.append(path); + return result.toString(); + } else { + System.out.printf("Formato del URL inválido: '%s'%n", input); + return null; + } + } + + public static void printer() { + Queue cola = new LinkedList<>(); + + outterLoop: + while (true) { + Scanner scanner = new Scanner(System.in); + System.out.print(""" + ----------------------------------------------------------- + Bienvenido a la impresora, ingresar una las siguientes opciones: + 1. Añadir un documento, escribir el nombre del documento. + 2. "imprimir" - para imprimir el documento en cola. + 3. "salir" - para cerrar la impresora. + ----------------------------------------------------------- + """); + System.out.print("Ingresar su opción: "); + String action = scanner.nextLine(); + + switch (action) { + case "imprimir" -> { + if (!cola.isEmpty()) + System.out.printf("Imprimiendo documento: %s%n", cola.poll()); + else System.out.println("No hay documentos para imprimir!"); + } + case "salir" -> { + break outterLoop; + } + default -> cola.offer(action); + } + System.out.println(cola); + } + } + + + public static void main(String[] args) { + //stack + pila.push(1); + pila.push(2); + pila.push(3); + System.out.println("La pila nueva es: " + pila); + System.out.printf("Se elimina el elemento %d de la pila!%n", pila.pop()); + System.out.println("La pila actualizada es: " + pila); + //queue + cola.offer(10); + cola.offer(20); + cola.offer(30); + System.out.println("La cola nueva es: " + cola); + System.out.printf("Se elimina el elemento %d de la cola!%n", cola.poll()); + System.out.println("La pila actualizada es: " + cola); + + /* + * DIFICULTAD EXTRA + */ + webNavigator(); + printer(); + + + } +} From ffc1d2107430e8a0f033f5c6f272724730ea3a48 Mon Sep 17 00:00:00 2001 From: Juan Pablo Patino Lopez Date: Mon, 16 Sep 2024 16:42:29 +0200 Subject: [PATCH 285/539] Juanppdev - Reto # 37 - Python --- .../python/JUANPPDEV.PY | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/JUANPPDEV.PY diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/JUANPPDEV.PY b/Roadmap/37 - OASIS VS LINKIN PARK/python/JUANPPDEV.PY new file mode 100644 index 0000000000..55649a5d6d --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/JUANPPDEV.PY @@ -0,0 +1,76 @@ +""" + * EJERCICIO: + * ¡Dos de las bandas más grandes de la historia están de vuelta! + * Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? + * Desarrolla un programa que se conecte al API de Spotify y los compare. + * Requisitos: + * 1. Crea una cuenta de desarrollo en https://developer.spotify.com. + * 2. Conéctate al API utilizando tu lenguaje de programación. + * 3. Recupera datos de los endpoint que tú quieras. + * Acciones: + * 1. Accede a las estadísticas de las dos bandas. + * Por ejemplo: número total de seguidores, escuchas mensuales, + * canción con más reproducciones... + * 2. Compara los resultados de, por lo menos, 3 endpoint. + * 3. Muestra todos los resultados por consola para notificar al usuario. + * 4. Desarrolla un criterio para seleccionar qué banda es más popular. +""" + +import spotipy +from spotipy.oauth2 import SpotifyClientCredentials + +# Configura tus credenciales +client_id = 'TU_CLIENT_ID' +client_secret = 'TU_CLIENT_SECRET' + +# Autenticación +sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials(client_id=client_id, client_secret=client_secret)) + +# Función para obtener estadísticas de una banda +def obtener_estadisticas(artista): + resultados = sp.search(q='artist:' + artista, type='artist') + artista_info = resultados['artists']['items'][0] + seguidores = artista_info['followers']['total'] + popularidad = artista_info['popularity'] + top_tracks = sp.artist_top_tracks(artista_info['id']) + cancion_mas_popular = top_tracks['tracks'][0]['name'] + reproducciones_cancion_mas_popular = top_tracks['tracks'][0]['popularity'] + + return { + 'seguidores': seguidores, + 'popularidad': popularidad, + 'cancion_mas_popular': cancion_mas_popular, + 'reproducciones_cancion_mas_popular': reproducciones_cancion_mas_popular + } + +# Obtener estadísticas de Oasis y Linkin Park +estadisticas_oasis = obtener_estadisticas('Oasis') +estadisticas_linkin_park = obtener_estadisticas('Linkin Park') + +# Comparar resultados +print("Estadísticas de Oasis:", estadisticas_oasis) +print("Estadísticas de Linkin Park:", estadisticas_linkin_park) + +# Criterio para determinar la banda más popular +if estadisticas_oasis['seguidores'] > estadisticas_linkin_park['seguidores']: + print("Oasis es más popular en términos de seguidores.") +else: + print("Linkin Park es más popular en términos de seguidores.") + +if estadisticas_oasis['popularidad'] > estadisticas_linkin_park['popularidad']: + print("Oasis es más popular en términos de popularidad.") +else: + print("Linkin Park es más popular en términos de popularidad.") + +if estadisticas_oasis['reproducciones_cancion_mas_popular'] > estadisticas_linkin_park['reproducciones_cancion_mas_popular']: + print("Oasis tiene la canción más popular.") +else: + print("Linkin Park tiene la canción más popular.") + + +""" +Explicación +1. Autenticación: Utilizamos SpotifyClientCredentials para autenticar nuestra aplicación. +2. Obtener estadísticas: La función obtener_estadisticas busca al artista, obtiene su número de seguidores, popularidad y la canción más popular. +3. Comparar resultados: Comparamos las estadísticas de Oasis y Linkin Park y mostramos los resultados en la consola. +""" \ No newline at end of file From dd34cf44f5160274890247c7a33b13ed40b54acd Mon Sep 17 00:00:00 2001 From: Bruce <88008233+Roswell468@users.noreply.github.com> Date: Mon, 16 Sep 2024 12:06:14 -0300 Subject: [PATCH 286/539] Rename maxiRica,py to maxiRica.py --- .../python/{maxiRica,py => maxiRica.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/{maxiRica,py => maxiRica.py} (100%) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/maxiRica,py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/maxiRica.py similarity index 100% rename from Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/maxiRica,py rename to Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/maxiRica.py From 04e8826bb4c9b2d90b2c32b2e2191eab75640d11 Mon Sep 17 00:00:00 2001 From: deathwing Date: Mon, 16 Sep 2024 17:18:43 +0200 Subject: [PATCH 287/539] #37 - C# --- .../c#/deathwing696.cs | 187 ++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/c#/deathwing696.cs diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/c#/deathwing696.cs b/Roadmap/37 - OASIS VS LINKIN PARK/c#/deathwing696.cs new file mode 100644 index 0000000000..3c001b1da6 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/c#/deathwing696.cs @@ -0,0 +1,187 @@ +using System; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json.Linq; +using System.Configuration; + +/* + * EJERCICIO: + * ¡Dos de las bandas más grandes de la historia están de vuelta! + * Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? + * Desarrolla un programa que se conecte al API de Spotify y los compare. + * Requisitos: + * 1. Crea una cuenta de desarrollo en https://developer.spotify.com. + * 2. Conéctate al API utilizando tu lenguaje de programación. + * 3. Recupera datos de los endpoint que tú quieras. + * Acciones: + * 1. Accede a las estadísticas de las dos bandas. + * Por ejemplo: número total de seguidores, escuchas mensuales, + * canción con más reproducciones... + * 2. Compara los resultados de, por lo menos, 3 endpoint. + * 3. Muestra todos los resultados por consola para notificar al usuario. + * 4. Desarrolla un criterio para seleccionar qué banda es más popular. + */ + +namespace Reto_37 +{ + internal class deathwing696 + { + public class Spotify + { + private string urlAPI = "https://api.spotify.com/v1/"; + private string urlApiToken = "https://accounts.spotify.com/api/token"; + private static string clientId = ConfigurationManager.AppSettings["SpotifyClientId"]; + private static string clientSecret = ConfigurationManager.AppSettings["SpotifyClientSecret"]; + private string artist1; + private string artist2; + private int artist1Points = 0; + private int artist2Points = 0; + + public Spotify(string artist1, string artist2) + { + this.artist1 = artist1; + this.artist2 = artist2; + } + + internal async Task GetSpotifyAccessToken() + { + using (var client = new HttpClient()) + { + var request = new HttpRequestMessage(HttpMethod.Post, urlApiToken); + var clientCredentials = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{clientId}:{clientSecret}")); + + request.Headers.Authorization = new AuthenticationHeaderValue("Basic", clientCredentials); + request.Content = new StringContent("grant_type=client_credentials", Encoding.UTF8, "application/x-www-form-urlencoded"); + + var response = await client.SendAsync(request); + response.EnsureSuccessStatusCode(); + + var responseBody = await response.Content.ReadAsStringAsync(); + var json = JObject.Parse(responseBody); + + return json["access_token"].ToString(); + } + } + + internal async Task CompareArtists(string token) + { + var artist1Data = await GetArtistData(token, artist1); + var artist2Data = await GetArtistData(token, artist2); + + Console.WriteLine($"Artista: {artist1Data.Name}"); + Console.WriteLine($"Seguidores: {artist1Data.Followers}"); + Console.WriteLine($"Popularidad: {artist1Data.Popularity}"); + Console.WriteLine($"Canción más popular: {artist1Data.TopTrack} con {artist1Data.TopTrackPopularity} de popularidad"); + Console.WriteLine(); + + Console.WriteLine($"Artista: {artist2Data.Name}"); + Console.WriteLine($"Seguidores: {artist2Data.Followers}"); + Console.WriteLine($"Popularidad: {artist2Data.Popularity}"); + Console.WriteLine($"Canción más popular: {artist2Data.TopTrack} con {artist2Data.TopTrackPopularity} de popularidad"); + Console.WriteLine(); + + // Comparación + Console.WriteLine("Comparación:"); + string moreFollowers; + + if (artist1Data.Followers > artist2Data.Followers) + { + moreFollowers = artist1Data.Name; + artist1Points++; + } + else + { + moreFollowers = artist2Data.Name; + artist2Points++; + } + Console.WriteLine($"Artista con más seguidores: {moreFollowers}"); + + string morePopular; + if (artist1Data.Popularity > artist2Data.Popularity) + { + morePopular = artist1Data.Name; + artist1Points++; + } + else + { + morePopular = artist2Data.Name; + artist2Points++; + } + Console.WriteLine($"Artista más popular: {morePopular}"); + + string topTrack, artistTopTrack; + if (artist1Data.TopTrackPopularity > artist2Data.TopTrackPopularity) + { + topTrack = artist1Data.TopTrack; + artistTopTrack = artist1Data.Name; + artist1Points++; + } + else + { + topTrack = artist2Data.TopTrack; + artistTopTrack = artist2Data.Name; + artist2Points++; + } + Console.WriteLine($"Canción con más popularidad: {topTrack} de {artistTopTrack}"); + + Console.WriteLine("PUNTUACIÓN FINAL:"); + + if (artist1Points > artist2Points) + { + Console.WriteLine($"El ganador de este duelo es {artist1Data.Name} con {artist1Points} puntos"); + } + else if (artist2Points > artist1Points) + { + Console.WriteLine($"El ganador de este duelo es {artist2Data.Name} con {artist2Points} puntos"); + } + else + { + Console.WriteLine($"Ha habido un empate en el duelo entre {artist1Data.Name} y {artist2Data.Name} con {artist1Points} puntos"); + } + } + + private async Task<(string Name, int Followers, int Popularity, string TopTrack, int TopTrackPopularity)> GetArtistData(string token, string artistName) + { + using (var client = new HttpClient()) + { + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); + + // Buscar al artista + var searchResponse = await client.GetAsync($"{urlAPI}search?q={Uri.EscapeDataString(artistName)}&type=artist"); + searchResponse.EnsureSuccessStatusCode(); + var searchResult = JObject.Parse(await searchResponse.Content.ReadAsStringAsync()); + + var artist = searchResult["artists"]["items"].First; + string artistId = artist["id"].ToString(); + string name = artist["name"].ToString(); + int followers = (int)artist["followers"]["total"]; + int popularity = (int)artist["popularity"]; + + // Obtener las canciones más populares + var tracksResponse = await client.GetAsync($"{urlAPI}artists/{artistId}/top-tracks?market=US"); + tracksResponse.EnsureSuccessStatusCode(); + var tracksResult = JObject.Parse(await tracksResponse.Content.ReadAsStringAsync()); + + var topTrack = tracksResult["tracks"].First; + string topTrackName = topTrack["name"].ToString(); + int topTrackPopularity = (int)topTrack["popularity"]; + + return (name, followers, popularity, topTrackName, topTrackPopularity); + } + } + } + + static async Task Main(string[] args) + { + Spotify spotify = new Spotify("Oasis", "Linkin Park"); + + string token = await spotify.GetSpotifyAccessToken(); + + await spotify.CompareArtists(token); + + Console.ReadKey(); + } + } +} From edec36295cc6d76b5366a14ad4bd009cd36fe1ed Mon Sep 17 00:00:00 2001 From: josem17-cyber Date: Mon, 16 Sep 2024 17:18:47 +0200 Subject: [PATCH 288/539] 00/josem17-cyber.py added --- .../python/josem17-cyber.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/josem17-cyber.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/josem17-cyber.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/josem17-cyber.py new file mode 100644 index 0000000000..198c32b645 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/josem17-cyber.py @@ -0,0 +1,28 @@ +# https://python.org + +# Comentario en una linea + +''' +Comentario en varias +líneas +''' + +""" +Esto también es un comentario en +varias líneas + +""" + +var = 1 # Crea una variable + + +CONS = "hola" # Crea una constante + +# Variables por tipos de datos + +num = 1 +num_float = 0.5 +str = "hola" +bool = True + +print("Hola, Python!") From 5b5972f650fefdccfd9f602f0adf4575e8157409 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Mon, 16 Sep 2024 11:10:07 -0500 Subject: [PATCH 289/539] #08 - Java --- Roadmap/08 - CLASES/java/martinbohorquez.java | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 Roadmap/08 - CLASES/java/martinbohorquez.java diff --git a/Roadmap/08 - CLASES/java/martinbohorquez.java b/Roadmap/08 - CLASES/java/martinbohorquez.java new file mode 100644 index 0000000000..28721bae63 --- /dev/null +++ b/Roadmap/08 - CLASES/java/martinbohorquez.java @@ -0,0 +1,135 @@ +import java.util.Queue; +import java.util.Stack; +import java.util.*; + +public class martinbohorquez { + + private static Queue cola = new LinkedList<>(); //Cola + + public static void main(String[] args) { + Programador programador = new Programador("MartinDev", 29, + Arrays.asList("Java", "Python", "Typescript")); + programador.setSurname("Bohorquez"); + programador.imprimir(); + programador.languages.add("Kotlin"); + programador.imprimir(); + + /* + * DIFICULTAD EXTRA + */ + //stack + System.out.println("[------- STACK ---------]"); + Pila pila = new Pila(Arrays.asList(10, 20, 30, 40)); + pila.push(50); + pila.count(); + pila.pop(); + pila.count(); + pila.push(60); + pila.count(); + pila.print(); + //queue + System.out.println("[------- QUEUE ---------]"); + Cola cola = new Cola(Arrays.asList(100, 200, 300, 400)); + cola.offer(500); + cola.count(); + cola.poll(); + cola.count(); + cola.offer(600); + cola.count(); + cola.print(); + + } + + private static class Pila { + private Stack pila = new Stack<>(); + + private Pila(List pila) { + this.pila.addAll(pila); + } + + private void push(Integer num) { + printStack(); + System.out.printf("Se añade el elemento %d a la pila: %n", pila.push(num)); + printStack(); + } + + private void pop() { + printStack(); + if (!pila.isEmpty()) { + System.out.printf("Se extrae un elemento %d a la pila: %n", pila.pop()); + printStack(); + } + } + + private void count() { + System.out.printf("La pila cuenta con %d elementos.%n", pila.size()); + } + + private void printStack() { + System.out.printf("La pila contiene los siguientes elementos: %s%n", pila.toString()); + } + + private void print() { + System.out.println("La pila contiene los siguientes elementos:"); + pila.forEach(System.out::println); + } + } + + private static class Cola { + private Queue cola; + + private Cola(List cola) { + this.cola = new LinkedList<>(cola); + } + + private void offer(Integer num) { + printQueue(); + cola.offer(num); + System.out.printf("Se añade el elemento %d a la cola: %n", num); + printQueue(); + } + + private void poll() { + printQueue(); + if (!cola.isEmpty()) { + System.out.printf("Se extrae un elemento %d a la pila: %n", cola.poll()); + printQueue(); + } + } + + private void count() { + System.out.printf("La pila cuenta con %d elementos.%n", cola.size()); + } + + private void printQueue() { + System.out.printf("La cola contiene los siguientes elementos: %s%n", cola.toString()); + } + + private void print() { + System.out.println("La pila contiene los siguientes elementos:"); + cola.forEach(System.out::println); + } + } + + private static class Programador { + private String name; + private String surname; + private int age; + private List languages; + + private Programador(String name, int age, List lenguajes) { + this.name = name; + this.age = age; + this.languages = new ArrayList<>(lenguajes); + } + + private void setSurname(String surname) { + this.surname = surname; + } + + private void imprimir() { + System.out.printf("Nombre: %s | Apellido: %s | Edad: %d | Lenguajes: %s%n", + name, surname, age, languages.toString()); + } + } +} From 9924def23023bcb0f4eb8215b675941cdd5c74ad Mon Sep 17 00:00:00 2001 From: Berta Date: Mon, 16 Sep 2024 18:40:06 +0200 Subject: [PATCH 290/539] =?UTF-8?q?A=C3=B1adir=20mi=20soluci=C3=B3n=20para?= =?UTF-8?q?=20el=20reto=20#37=20-=20OASIS=20VS=20LINKIN=20PARK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/bereverte.py | 144 ++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/bereverte.py diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/bereverte.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/bereverte.py new file mode 100644 index 0000000000..2278a4570f --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/bereverte.py @@ -0,0 +1,144 @@ +import os +import requests +from dotenv import load_dotenv + +load_dotenv() + + +def get_access_token(): + client_id = os.getenv("SPOTIFY_CLIENT_ID") + client_secret = os.getenv("SPOTIFY_CLIENT_SECRET") + + url = "https://accounts.spotify.com/api/token" + headers = { + "Content-Type": "application/x-www-form-urlencoded" + } + data = { + "grant_type": "client_credentials" + } + try: + response = requests.post(url, headers=headers, data=data, auth=(client_id, client_secret)) + token_info = response.json() + return token_info['access_token'] + + except Exception as e: + print(f"Error obteniendo el access token: {e}") + return None + +def get_artist_data(artist_id, access_token): + url = f"https://api.spotify.com/v1/artists/{artist_id}" + headers = {"Authorization": f"Bearer {access_token}"} + + try: + response = requests.get(url, headers=headers) + artist_data = response.json() + + followers = artist_data['followers']['total'] + popularity = artist_data['popularity'] + + return followers, popularity + + except Exception as e: + print(f"Ha ocurrido un error: {e}") + return None, None + +def get_album_data(artist_id, access_token): + url = f"https://api.spotify.com/v1/artists/{artist_id}/albums" + headers = {"Authorization": f"Bearer {access_token}"} + + params = {"include_groups": "album"} + total_albums = [] + + try: + while url: + response = requests.get(url, headers=headers, params=params) + album_data = response.json() + total_albums.extend(album_data['items']) + url = album_data['next'] + + return len(total_albums) + + except Exception as e: + print(f"Ha ocurrido un error: {e}") + return None + +def get_artist_top_tracks(artist_id, access_token): + url = f"https://api.spotify.com/v1/artists/{artist_id}/top-tracks" + headers = {"Authorization": f"Bearer {access_token}"} + + try: + response = requests.get(url, headers=headers) + top_tracks_data = response.json() + + top_track_name = top_tracks_data['tracks'][0]['name'] + top_track_popularity = top_tracks_data['tracks'][0]['popularity'] + + return top_track_name, top_track_popularity + + except Exception as e: + print(f"Ha ocurrido un error: {e}") + return None, None + +def compare(follO, follLP, popO, popLP, albumsO, albumsLP, topSongO, topSongLP): + + try: + if (follO > follLP): + print("Oasis tiene más seguidores.") + elif (follO < follLP): + print("Linkin Park tiene más seguidores.") + else: + print("Ambas bandas tienen el mismo número de seguidores.") + + if (popO > popLP): + print("Oasis tiene una puntuación de popularidad superior.") + elif (popO < popLP): + print("Linkin Park tiene una puntuación de popularidad superior.") + else: + print("Ambas bandas tienen la misma puntuación de popularidad.") + + if (albumsO > albumsLP): + print("Oasis sacó más álbumes.") + elif (albumsO < albumsLP): + print("Linkin Park sacó más álbumes.") + else: + print("Ambas bandas sacaron el mimso número de álbumes.") + + if (topSongO > topSongLP): + print("La canción más popular es de Oasis.") + elif (topSongO < topSongLP): + print("La canción más popular es de Linkin Park.") + else: + print("Ambas bandas tienen la mimsa popularidad en su canción más top.") + + except Exception as e: + print(f"Ha ocurrido un error: {e}") + + +def main(): + + access_token = "BQCTQL7k82YgsiEJWPCUzcQh3KRTr5Vv37bocLQemNTzpV-9iJluHBnEQSPmT9GFOfIXyPG2WfRZN4zZrW7KL6kCwmE4gPJ-4cYA06Cf5FurSiIjI_M" + oasis_id = "2DaxqgrOhkeH0fpeiQq2f4" + linkin_park_id = "6XyY86QOPPrYVGvF9ch6wz" + + print("\nOasis:\n") + followers_Oasis, popularity_Oasis = get_artist_data(oasis_id, access_token) + print(f"Seguidores: {followers_Oasis}, Popularidad de la banda: {popularity_Oasis}/100") + albums_Oasis = get_album_data(oasis_id, access_token) + print(f"Álbumes de estudio totales: {albums_Oasis}") + top_song_Oasis, top_song_popularity_Oasis = get_artist_top_tracks(oasis_id, access_token) + print(f"Canción más popular: {top_song_Oasis}, Popularidad de la canción: {top_song_popularity_Oasis}/100") + + print("\nLinkin Park:\n") + followers_LinkinPark, popularity_LinkinPark = get_artist_data(linkin_park_id, access_token) + print(f"Seguidores: {followers_LinkinPark}, Popularidad de la banda: {popularity_LinkinPark}/100") + albums_LinkinPark = get_album_data(linkin_park_id, access_token) + print(f"Álbumes de estudio totales: {albums_LinkinPark}") + top_song_LinkinPark, top_song_popularity_LinkinPark = get_artist_top_tracks(linkin_park_id, access_token) + print(f"Canción más popular: {top_song_LinkinPark}, Popularidad de la canción: {top_song_popularity_LinkinPark}/100") + + print("\n¿Qué banda es más popular?\n") + compare(followers_Oasis, followers_LinkinPark, popularity_Oasis, popularity_LinkinPark, albums_Oasis, albums_LinkinPark, top_song_popularity_Oasis, top_song_popularity_LinkinPark) + + +if __name__ == '__main__': + main() \ No newline at end of file From 1753e8fded20ec067d3fdfc6a0c405b784495202 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Mon, 16 Sep 2024 11:41:30 -0500 Subject: [PATCH 291/539] #15 - Python --- .../python/juanchernandezdev.py" | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 "Roadmap/15 - ASINCRON\303\215A/python/juanchernandezdev.py" diff --git "a/Roadmap/15 - ASINCRON\303\215A/python/juanchernandezdev.py" "b/Roadmap/15 - ASINCRON\303\215A/python/juanchernandezdev.py" new file mode 100644 index 0000000000..2a4d539696 --- /dev/null +++ "b/Roadmap/15 - ASINCRON\303\215A/python/juanchernandezdev.py" @@ -0,0 +1,47 @@ +### Async Python ### +import asyncio +import time + +async def first_function(name: str, seconds: int): + print(f'{name}, function started, run time will be {seconds}.') + start = time.time() + await asyncio.sleep(seconds) + timelapse = time.time() - start + print(f'execution time: {timelapse:.2f}s') + +async def test(): + await first_function('my test function', 2) + +asyncio.run(test()) + +#! Optional Challenge + +async def function_a(): + start = time.time() + await asyncio.sleep(1) + timelapse = time.time() - start + print(f'Function A execution time: {timelapse:.2f}s') + +async def function_b(): + start = time.time() + await asyncio.sleep(2) + timelapse = time.time() - start + print(f'Function B execution time: {timelapse:.2f}s') + +async def function_c(): + start = time.time() + await asyncio.sleep(3) + timelapse = time.time() - start + print(f'Function C execution time: {timelapse:.2f}s') + +async def function_d(): + start = time.time() + await asyncio.sleep(1) + timelapse = time.time() - start + print(f'Function D execution time: {timelapse:.2f}s') + +async def main(): + await asyncio.gather(function_a(), function_b(), function_c()) + await function_d() + +asyncio.run(main()) From 7834568b545a26bf39dced086e15747df0ef924a Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Mon, 16 Sep 2024 12:28:26 -0500 Subject: [PATCH 292/539] #09 - Java --- .../09 - HERENCIA/java/martinbohorquez.java | 150 ++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 Roadmap/09 - HERENCIA/java/martinbohorquez.java diff --git a/Roadmap/09 - HERENCIA/java/martinbohorquez.java b/Roadmap/09 - HERENCIA/java/martinbohorquez.java new file mode 100644 index 0000000000..e95a4093ec --- /dev/null +++ b/Roadmap/09 - HERENCIA/java/martinbohorquez.java @@ -0,0 +1,150 @@ +/** + * #09 HERENCIA Y POLIMORFISMO + * + * @author martinbohorquez + */ + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class martinbohorquez { + + public static void main(String[] args) { + Animal perro = new Perro("Punky"); + printSound(perro); + Animal gato = new Gato("Smoking"); + printSound(gato); + /* + * DIFICULTAD EXTRA + */ + Manager manager = new Manager(1, "MartinDev"); + ProjectManager projectManager1 = new ProjectManager(2, "Robert", + Arrays.asList("Project 1", "Project 2", "Project 3")); + ProjectManager projectManager2 = new ProjectManager(3, "Kathie", + Arrays.asList("Project 11", "Project 12")); + Programmer programmer1 = new Programmer(4, "Mark", + Arrays.asList("Java", "Typescript")); + Programmer programmer2 = new Programmer(5, "Tim", + Arrays.asList("Python", "JavaScript")); + Programmer programmer3 = new Programmer(6, "Linus", + Arrays.asList("Java", "Python", "JavaScript")); + Programmer programmer4 = new Programmer(7, "Moure", + Arrays.asList("Python", "Typescript")); + + manager.coordinateProjects(); + manager.addEmployee(projectManager1); + manager.addEmployee(projectManager2); + manager.printEmployees(); + projectManager1.coordinateProject(); + projectManager1.addEmployee(programmer1); + projectManager1.addEmployee(programmer3); + projectManager1.printEmployees(); + programmer2.code(); + programmer3.addEmployee(programmer4); + programmer2.printEmployees(); + } + + private static void printSound(Animal animal) { + animal.sonido(); + } + + private static class Animal { + protected String name; + + public Animal(String name) { + this.name = name; + } + + protected void sonido() { + System.out.println("El animal emite un sonido!"); + } + } + + private static class Perro extends Animal { + + public Perro(String name) { + super(name); + } + + @Override + protected void sonido() { + System.out.printf("El perro %s dice guau!%n", name); + } + } + + private static class Gato extends Animal { + + public Gato(String name) { + super(name); + } + + @Override + protected void sonido() { + System.out.printf("El gato %s dice miau!%n", name); + } + } + + private static class Employee { + protected int id; + protected String name; + protected List employees = new ArrayList<>(); + + public Employee(int id, String name) { + this.id = id; + this.name = name; + } + + protected void addEmployee(Employee employee) { + employees.add(employee); + System.out.printf("Se asigna empleado %s a cargo de %s%n", employee.name, name); + } + + protected void printEmployees() { + System.out.printf("Los empleados a cargo de %s:%n", name); + employees.forEach(e -> System.out.println(e.name)); + } + } + + private static class Manager extends Employee { + + public Manager(int id, String name) { + super(id, name); + } + + private void coordinateProjects() { + System.out.printf("%s está coordinando todos los proyectos de la empresa%n", name); + } + } + + private static class ProjectManager extends Employee { + private List projects = new ArrayList<>(); + + public ProjectManager(int id, String name, List projects) { + super(id, name); + this.projects = new ArrayList<>(projects); + } + + private void coordinateProject() { + System.out.printf("%s está coordinando sus proyectos %s%n", name, projects.toString()); + } + } + + private static class Programmer extends Employee { + private List languages = new ArrayList<>(); + + public Programmer(int id, String name, List languages) { + super(id, name); + this.languages = new ArrayList<>(languages); + } + + @Override + protected void addEmployee(Employee employee) { + System.out.printf("Un programador no tiene empleados a su cargo. %s no se añadirá!%n", employee.name); + } + + private void code() { + System.out.printf("%s está programando en %s%n", name, languages.toString()); + } + } +} From b1ee5987d100f4b58779f847ed857fbb591959df Mon Sep 17 00:00:00 2001 From: Johanna Palo Date: Mon, 16 Sep 2024 14:38:45 -0300 Subject: [PATCH 293/539] #00 - javascript --- .../javascript/joapalobael.js | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/joapalobael.js diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/joapalobael.js b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/joapalobael.js new file mode 100644 index 0000000000..20d816a4f8 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/joapalobael.js @@ -0,0 +1,23 @@ +// #1 - Crea un comentario en el código y coloca la URL del sitio web oficial del lenguaje de programación que has seleccionado: +// https://developer.mozilla.org/es/docs/Web/JavaScript + +/* #2 - Representa las diferentes sintaxis que existen de crear comentarios +en el lenguaje (en una línea, varias...).*/ + +//#3 - Crea una variable (y una constante si el lenguaje lo soporta). +let variable1 = "Soy un string"; +const variable2 = 3; + +//#4 Crea variables representando todos los tipos de datos primitivos del lenguaje (cadenas de texto, enteros, booleanos...) +const booleano = true; +const nulo = null; +let indefinida; +const numero= 3; +const randomEntero = BigInt(13); +const cadenaTexto = "String // Cadena de texto"; +const simbolo = Symbol('claveUnica'); + +//#5 - Imprime por terminal el texto: "¡Hola, [y el nombre de tu lenguaje]!" +console.log("¡Hola, JavaScript!"); + + From 3dfcd79fc5c1555278eda9aa1719d1fd54b9088d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Mon, 16 Sep 2024 19:41:06 +0200 Subject: [PATCH 294/539] retos 0, 1, 2 --- .../c/d1d4cdev.c | 18 +++ .../c/d1d4cdev.c | 117 ++++++++++++++++++ Roadmap/02 - FUNCIONES Y ALCANCE/c/d1d4cdev.c | 49 ++++++++ 3 files changed, 184 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cdev.c create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/d1d4cdev.c create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/c/d1d4cdev.c diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cdev.c b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cdev.c new file mode 100644 index 0000000000..f930b0aba3 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cdev.c @@ -0,0 +1,18 @@ +#include + + +// https://www.w3schools.com/c/index.php +// Comentario de una sola línea +/* +Comentario +de varias +líneas +*/ + +int age = 28; +const char letter = 'D'; + +int main() { + printf("¡Hola, C!\n"); + return 0; +} diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/d1d4cdev.c b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/d1d4cdev.c new file mode 100644 index 0000000000..2705cd9d99 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/d1d4cdev.c @@ -0,0 +1,117 @@ +#include +#include + +int main() { + //------------------Operadores + // Aritméticos + int suma = 3 + 3; + int resta = 3 - 3; + int multiplicacion = 3 * 3; + int division = 3 / 3; + int resto = 3 % 3; + int incremento = ++suma; + int decremento = --resta; + printf("%d\n", suma); + printf("%d\n", resta); + printf("%d\n", multiplicacion); + printf("%d\n", division); + printf("%d\n", resto); + printf("%d\n", incremento); + printf("%d\n", decremento); + + // Asignación + suma += 5; + resta -= 5; + multiplicacion *= 5; + division /= 5; + resto %= 5; + int andOperator = 3 & 3; + int orOperator = 3 | 3; + int xorOperator = 3 ^ 3; + int right = 3 >> 3; // desplaza los bits 3 posiciones a la derecha + int left = 3 << 3; // desplaza los bits 3 posiciones a la izquierda + + printf("%d\n", suma); + printf("%d\n", resta); + printf("%d\n", multiplicacion); + printf("%d\n", division); + printf("%d\n", resto); + printf("%d\n", andOperator); + printf("%d\n", orOperator); + printf("%d\n", xorOperator); + printf("%d\n", right); + printf("%d\n", left); + + // Comparación + printf("%d\n", 1 == 1); + printf("%d\n", 1 != 1); + printf("%d\n", 1 > 1); + printf("%d\n", 1 < 1); + printf("%d\n", 1 >= 1); + printf("%d\n", 1 <= 1); + + // Operadores lógicos + int x = 5; + printf("%d\n", x < 5 && x < 10); //AND + printf("%d\n", x < 5 || x < 4); //OR + printf("%d\n", !(x < 5 && x < 10)); //NOT + + //--------------------------- Estructuras de control + // If - else + + if (x == 5) { + printf("X es 5\n"); + } else if (x > 5) { + printf("X es mayor que 5\n"); + } else { + printf("X es menor que 5\n"); + } + + // Switch + switch (x) { + case 5: + printf("X es 5\n"); + break; + case 4: + printf("X es 4\n"); + break; + case 3: + printf("X es 3\n"); + break; + default: + printf("No es nada\n"); + } + + // While + while(x < 7) { + printf("X vale %d\n", x); + x++; + } + + do { + printf("X vale %d\n", x); + x++; + } while(x < 10); + + // For + for(int i = 0; i <= 5; i++) { + if (i == 3){ + continue; + } else if (i == 5) { + break; + } + printf("i vale %d\n", i); + } + + //-------------- Ejercicio + printf("** Ejercicio **\n"); + for (int i = 10; i <= 55; i++) { + if (i % 2 == 0) { + if (i != 16 && i % 3 != 0) { + printf("%d\n", i); + } + } + } + + return 0; +} diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/c/d1d4cdev.c b/Roadmap/02 - FUNCIONES Y ALCANCE/c/d1d4cdev.c new file mode 100644 index 0000000000..5941a6d6c6 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/c/d1d4cdev.c @@ -0,0 +1,49 @@ +#include + + +char language = 'C'; + +void sayHello() { + printf("Hello %c!\n", language); +} + +int suma() { + return 2 + 5; +} + +void saluda(char nombre[]) { + printf("Hola %s\n", nombre); +} + +int sumaADos(int number) { + int dos = 2; + return dos + number; +} + +int exercise(char string1[], char string2[]) { + int times = 0; + + for (int i = 0; i <= 100; i++) { + if((i % 3 == 0) && (i % 5 == 0)) { + printf("%s %s\n", string1, string2); + } else if(i % 5 == 0) { + printf("%s\n", string2); + } else if (i % 3 == 0) { + printf("%s\n", string1); + } else { + printf("%d\n", i); + times++; + } + } + + return times; +} + +int main() { + sayHello(); + printf("%d\n", suma()); + saluda("Diego"); + printf("%d\n", sumaADos(5)); + printf("%d", exercise("Hola", "Mundo")); + return 0; +} From 02dda02f0133397a308e62c517494093e97b1dc6 Mon Sep 17 00:00:00 2001 From: Johanna Palo Date: Mon, 16 Sep 2024 16:38:48 -0300 Subject: [PATCH 295/539] #01 - Javascript --- .../javascript/joapalobael.js | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/joapalobael.js diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/joapalobael.js b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/joapalobael.js new file mode 100644 index 0000000000..d25c635232 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/joapalobael.js @@ -0,0 +1,75 @@ +// Operadores aritmeticos +const suma = (2 + 5); +const resta = (suma - 10); +const multiplicación = (suma * (-resta)); +const divison = multiplicación / suma; +let sobrante = 12 % 5; +const exponente = 3 ** 9; + +let x = 5; +let y = 5; +x++; // aumentador +y--; // disminuidor + + +//Estructuras de control +// If +if (suma === 7) { + console.log(`La suma de 2+5 es igual a ${suma}`); +} + +// If else +if (suma === 5) { + console.log(`La suma de 2+5 es igual a ${suma}`) +} else { + console.log(`5 es el resultado de sumar 2+3`); +} + +// For +for (let index = 0; index < sobrante; index++) { + console.log(`Voy a contar del 0 al 1. ${index}/1`); +} + +//while + +while (sobrante < suma) { + sobrante++; + console.log("Me encuentro dentro de un while", sobrante); +} + +//switch + +const TipoDeFruta = "anana"; +switch (TipoDeFruta) { + case "naranja": + console.log("Las naranjas cuestan $1200 por kg") + break; + case "pera": + console.log("Las peras cuestan $2200 por kg") + break; + case "manzana": + console.log("Las manzanas cuestan $2800 por kg") + break; + default: + console.log(`Disculpa, no tenemos stock de ${TipoDeFruta} en este momento`) + break; +} + + + +/*ABASTRACCIÓN DEL EJERCICIO*/ +/* inicio + Para los numeros entre 10 y 55 { + Si (el resto al dividir por 2 es 0 Y el numero es diferente a 16 Y el numero al dividirlo por 3 es diferente a 0){ + mostrar por pantalla el número + } + } +fin */ + +//Resolución ejercicio extra +console.log("#Resolución ejercicio extra"); +for (let index = 10; index <= 55; index++) { + if(index % 2 === 0 && index !==16 && index%3 !==0) + console.log(`Numero: ${index}`); +} + From d0bbbbc70f103dad343c7ea0b22136c002f39ff2 Mon Sep 17 00:00:00 2001 From: Johanna Palo Date: Mon, 16 Sep 2024 16:51:10 -0300 Subject: [PATCH 296/539] #01 - javascript --- .../javascript/joapalobael.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/joapalobael.js b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/joapalobael.js index d25c635232..bcfe18fc0c 100644 --- a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/joapalobael.js +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/joapalobael.js @@ -12,6 +12,8 @@ x++; // aumentador y--; // disminuidor + + //Estructuras de control // If if (suma === 7) { @@ -51,7 +53,7 @@ switch (TipoDeFruta) { console.log("Las manzanas cuestan $2800 por kg") break; default: - console.log(`Disculpa, no tenemos stock de ${TipoDeFruta} en este momento`) + console.log(`Disculpa, no tenemos stock de ${TipoDeFruta} en este momento`) break; } @@ -69,7 +71,7 @@ fin */ //Resolución ejercicio extra console.log("#Resolución ejercicio extra"); for (let index = 10; index <= 55; index++) { - if(index % 2 === 0 && index !==16 && index%3 !==0) - console.log(`Numero: ${index}`); + if (index % 2 === 0 && index !== 16 && index % 3 !== 0) + console.log(`Numero: ${index}`); } From a7c6303f875e9e0c685f60dd03f569e90e8caddb Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Mon, 16 Sep 2024 14:54:50 -0500 Subject: [PATCH 297/539] Ejemplo sin srp --- Roadmap/26 - SOLID SRP/java/simonguzman.java | 53 ++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Roadmap/26 - SOLID SRP/java/simonguzman.java diff --git a/Roadmap/26 - SOLID SRP/java/simonguzman.java b/Roadmap/26 - SOLID SRP/java/simonguzman.java new file mode 100644 index 0000000000..a3d5f8fa5b --- /dev/null +++ b/Roadmap/26 - SOLID SRP/java/simonguzman.java @@ -0,0 +1,53 @@ + +import java.io.FileWriter; + +public class simonguzman { + public static void main(String[] args) { + incorrectSrp(); + } + + /****************************** ejemplo sin srp(Incorrecto) ******************************/ + public static void incorrectSrp(){ + Invoice invoice = new Invoice("Laptop",2,1200.00); + invoice.printInvoice(); + invoice.saveToFile(); + } + + static class Invoice{ + private String product; + private int quantity; + private double price; + + public Invoice(){ + + } + + public Invoice(String product, int quantity, double price){ + this.product = product; + this.quantity = quantity; + this.price = price; + } + + public double calculateTotal(){ + return quantity * price; + } + + public void printInvoice(){ + System.out.println("Producto: "+product); + System.out.println("Cantidad: "+quantity); + System.out.println("Precio: "+price); + System.out.println("Total: "+calculateTotal()); + } + + public void saveToFile(){ + try (FileWriter writer = new FileWriter("invoice.txt")){ + writer.write("Producto: " + product + "\n"); + writer.write("Cantidad: " + quantity + "\n"); + writer.write("Precio Unitario: " + price + "\n"); + writer.write("Total: " + calculateTotal() + "\n"); + } catch (Exception e) { + System.out.println("Error al guardar la factura: "+e.getMessage()); + } + } + } +} From 54c34a5585da4dbfffe13948727fb6d576e8bcb4 Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 16 Sep 2024 21:58:21 +0200 Subject: [PATCH 298/539] =?UTF-8?q?Correcci=C3=B3n=20Roadmap=2037=20+=20Nu?= =?UTF-8?q?evo=20ejercicio=2038?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + README.md | 3 +- .../python/mouredev.py | 152 ++++++++++++++++++ Roadmap/38 - MOUREDEV PRO/ejercicio.md | 37 +++++ 4 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/mouredev.py create mode 100644 Roadmap/38 - MOUREDEV PRO/ejercicio.md diff --git a/.gitignore b/.gitignore index 0583904141..65d0ea25aa 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ *.xml *.iml *.json +*.csv !stats.json .DS_Store .idea/ diff --git a/README.md b/README.md index a912369db2..5431e70618 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,8 @@ |34|[ÁRBOL GENEALÓGICO DE LA CASA DEL DRAGÓN](./Roadmap/34%20-%20ÁRBOL%20GENEALÓGICO%20LA%20CASA%20DEL%20DRAGÓN/ejercicio.md)|[📝](./Roadmap/34%20-%20ÁRBOL%20GENEALÓGICO%20LA%20CASA%20DEL%20DRAGÓN/python/mouredev.py)|[▶️](https://youtu.be/GAHBOAzgE2w)|[👥](./Roadmap/34%20-%20ÁRBOL%20GENEALÓGICO%20LA%20CASA%20DEL%20DRAGÓN/) |35|[REPARTIENDO LOS ANILLOS DE PODER](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/ejercicio.md)|[📝](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/python/mouredev.py)|[▶️](https://youtu.be/10i2dnaMLj8)|[👥](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/) |36|[EL SOMBRERO SELECCIONADOR](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/ejercicio.md)|[📝](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/python/mouredev.py)|[▶️](https://youtu.be/_UjOD587elY)|[👥](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/) -|37|[OASIS VS LINKIN PARK](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/ejercicio.md)|[🗓️ 16/09/24](https://discord.gg/8cxgGTxm?event=1280229634524450877)||[👥](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/) +|37|[OASIS VS LINKIN PARK](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/ejercicio.md)|[📝](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/python/mouredev.py)||[👥](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/) +|38|[MOUREDEV PRO](./Roadmap/38%20-%20MOUREDEV%20PRO/ejercicio.md)|[🗓️ 23/09/24](https://discord.gg/xeebRweK?event=1283082037917519985)||[👥](./Roadmap/38%20-%20MOUREDEV%20PRO/) ## Cursos en YouTube diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/mouredev.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/mouredev.py new file mode 100644 index 0000000000..3a4186c4c1 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/mouredev.py @@ -0,0 +1,152 @@ +import base64 +import requests + +CLIENT_ID = "Mi CLIENT_ID" +CLIENT_SECRET = "Mi CLIENT_SECRET" + + +def get_token() -> str: + url = "https://accounts.spotify.com/api/token" + headers = { + "Authorization": "Basic " + base64.b64encode(f"{CLIENT_ID}:{CLIENT_SECRET}".encode()).decode(), + "Content-Type": "application/x-www-form-urlencoded" + } + data = {"grant_type": "client_credentials"} + + response = requests.post(url, headers=headers, data=data) + if response.status_code != 200: + raise Exception( + f"Error obteniendo el token de Spotify: {response.json()}." + ) + + return response.json()["access_token"] + + +def search_artist(token: str, name: str): + url = f"https://api.spotify.com/v1/search?q={name}&type=artist&limit=1" + headers = {"Authorization": f"Bearer {token}"} + + response = requests.get(url, headers=headers) + if response.status_code != 200: + raise Exception( + f"Error obteniendo el artista: {response.json()}." + ) + + results = response.json() + if results["artists"]["items"]: + return results["artists"]["items"][0]["id"] + else: + raise Exception( + f"El artista {name} no se ha encontrado." + ) + + +def get_artist_data(token: str, id: str): + + url = f"https://api.spotify.com/v1/artists/{id}" + headers = {"Authorization": f"Bearer {token}"} + + response = requests.get(url, headers=headers) + if response.status_code != 200: + raise Exception( + f"Error obteniendo los datos del artista: {response.json()}." + ) + + results = response.json() + return { + "name": results["name"], + "followers": results["followers"]["total"], + "popularity": results["popularity"] + } + + +def get_artist_top_track(token: str, id: str): + + url = f"https://api.spotify.com/v1/artists/{id}/top-tracks" + headers = {"Authorization": f"Bearer {token}"} + + response = requests.get(url, headers=headers) + if response.status_code != 200: + raise Exception( + f"Error obteniendo las canciones del artista: {response.json()}." + ) + + results = response.json() + + top_track = max(results["tracks"], key=lambda track: track["popularity"]) + + return { + "name": top_track["name"], + "popularity": top_track["popularity"] + } + + +# 1. Token +token = get_token() + +# 2. IDs +artist_1_id = search_artist(token, "Taylor Swift") +artist_2_id = search_artist(token, "Linkin Park") + +# 3. Data + +# 3.1. Seguidores y popularidad +artist_1 = get_artist_data(token, artist_1_id) +artist_2 = get_artist_data(token, artist_2_id) + +# 3.2. Canción más popular +top_track_artist_1 = get_artist_top_track(token, artist_1_id) +top_track_artist_2 = get_artist_top_track(token, artist_2_id) + +# 4. Comparativa +artist_1_counter = 0 +artist_2_counter = 0 + +print(f"\nComparación de artistas:\n") +print(f"{artist_1["name"]}") +print(f"{artist_2["name"]}") + +# 4.1. Seguidores +print(f"\nComparación seguidores:\n") +print(f"Seguidores {artist_1["name"]}: {artist_1["followers"]}") +print(f"Seguidores {artist_2["name"]}: {artist_2["followers"]}") + +if artist_1["followers"] > artist_2["followers"]: + print(f"{artist_1["name"]} es más popular en número de seguidores.") + artist_1_counter += 1 +else: + print(f"{artist_2["name"]} es más popular en número de seguidores.") + artist_2_counter += 1 + +# 4.2. Popularidad +print(f"\nComparación popularidad:\n") +print(f"Popularidad {artist_1["name"]}: {artist_1["popularity"]}") +print(f"Popularidad {artist_2["name"]}: {artist_2["popularity"]}") + +if artist_1["popularity"] > artist_2["popularity"]: + print(f"{artist_1["name"]} es más popular a nivel general.") + artist_1_counter += 1 +else: + print(f"{artist_2["name"]} es más popular a nivel general.") + artist_2_counter += 1 + +# 4.3. Canción +print(f"\nComparación canción:\n") +print( + f"Canción {top_track_artist_1["name"]} ({artist_1["name"]}): {top_track_artist_1["popularity"]} popularidad.") +print( + f"Canción {top_track_artist_2["name"]} ({artist_2["name"]}): {top_track_artist_2["popularity"]} popularidad.") + +if top_track_artist_1["popularity"] > top_track_artist_2["popularity"]: + print( + f"La canción {top_track_artist_1["name"]} de {artist_1["name"]} es más popular.") + artist_1_counter += 1 +else: + print( + f"La canción {top_track_artist_2["name"]} de {artist_2["name"]} es más popular.") + artist_2_counter += 1 + +# 5. Resultado +print(f"\nResultado final:\n") +print( + f"{artist_1["name"] if artist_1_counter > artist_2_counter else artist_2["name"]} es más popular.") diff --git a/Roadmap/38 - MOUREDEV PRO/ejercicio.md b/Roadmap/38 - MOUREDEV PRO/ejercicio.md new file mode 100644 index 0000000000..d1af77650b --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/ejercicio.md @@ -0,0 +1,37 @@ +# #38 MOUREDEV PRO +> #### Dificultad: Fácil | Publicación: 16/09/24 | Corrección: 23/09/24 + +## Ejercicio + +``` +/* + * EJERCICIO: + * He presentado mi proyecto más importante del año: mouredev pro. + * Un campus para la comunidad, que lanzaré en octubre, donde estudiar + * programación de una manera diferente. + * Cualquier persona suscrita a la newsletter de https://mouredev.pro + * accederá a sorteos mensuales de suscripciones, regalos y descuentos. + * + * Desarrolla un programa que lea los registros de un fichero .csv y + * seleccione de manera aleatoria diferentes ganadores. + * Requisitos: + * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + * o "inactivo" (y datos ficticios). + * Ejemplo: 1 | test@test.com | activo + * 2 | test2@test.com | inactivo + * (El .csv no debe subirse como parte de la corrección) + * 2. Recupera los datos desde el programa y selecciona email aleatorios. + * Acciones: + * 1. Accede al fichero .csv y selecciona de manera aleatoria un email + * ganador de una suscripción, otro ganador de un descuento y un + * último ganador de un libro (sólo si tiene status activo). + * 2. Muestra los emails ganadores y su id. + * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + * no debe tenerse en cuenta. + */ +``` +#### Tienes toda la información extendida sobre el roadmap de retos de programación en **[retosdeprogramacion.com/roadmap](https://retosdeprogramacion.com/roadmap)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file From 218373044d9b97a3bbdd5edc4187e4a43b5a9437 Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 16 Sep 2024 21:59:35 +0200 Subject: [PATCH 299/539] =?UTF-8?q?Correcci=C3=B3n=20Roadmap=2037=20+=20Nu?= =?UTF-8?q?evo=20ejercicio=2038?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Roadmap/38 - MOUREDEV PRO/ejercicio.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Roadmap/38 - MOUREDEV PRO/ejercicio.md b/Roadmap/38 - MOUREDEV PRO/ejercicio.md index d1af77650b..a26fb2756a 100644 --- a/Roadmap/38 - MOUREDEV PRO/ejercicio.md +++ b/Roadmap/38 - MOUREDEV PRO/ejercicio.md @@ -23,8 +23,8 @@ * 2. Recupera los datos desde el programa y selecciona email aleatorios. * Acciones: * 1. Accede al fichero .csv y selecciona de manera aleatoria un email - * ganador de una suscripción, otro ganador de un descuento y un - * último ganador de un libro (sólo si tiene status activo). + * ganador de una suscripción, otro ganador de un descuento y un último + * ganador de un libro (sólo si tiene status "activo" y no está repetido). * 2. Muestra los emails ganadores y su id. * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) * no debe tenerse en cuenta. From 3fc39f17d685bd7c943b1dfbd46a0cadbafbf5e2 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Mon, 16 Sep 2024 15:08:28 -0500 Subject: [PATCH 300/539] Ejemplo con srp completado --- Roadmap/26 - SOLID SRP/java/simonguzman.java | 65 +++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/Roadmap/26 - SOLID SRP/java/simonguzman.java b/Roadmap/26 - SOLID SRP/java/simonguzman.java index a3d5f8fa5b..e6a3898e37 100644 --- a/Roadmap/26 - SOLID SRP/java/simonguzman.java +++ b/Roadmap/26 - SOLID SRP/java/simonguzman.java @@ -3,9 +3,72 @@ public class simonguzman { public static void main(String[] args) { - incorrectSrp(); + //incorrectSrp(); + correctSrp(); } + /****************************** ejemplo con srp(Correcto) ******************************/ + public static void correctSrp() { + InvoiceSrp invoice = new InvoiceSrp("Laptop",2,1200.00); + InvoicePrinter printer = new InvoicePrinter(); + printer.printInvoice(invoice); + + InvoiceSaver saver = new InvoiceSaver(); + saver.saveToFile(invoice); + } + static class InvoiceSrp{ + private String product; + private int quantity; + private double price; + + public InvoiceSrp(){ + + } + + public InvoiceSrp(String product, int quantity, double price){ + this.product = product; + this.quantity = quantity; + this.price = price; + } + + public double calculateTotal(){ + return quantity * price; + } + + public String getProduct() { + return product; + } + + public int getQuantity() { + return quantity; + } + + public double getPrice() { + return price; + } + } + + static class InvoicePrinter { + public void printInvoice(InvoiceSrp invoice){ + System.out.println("Producto: "+invoice.getProduct()); + System.out.println("Cantidad: "+invoice.getQuantity()); + System.out.println("Precio: "+invoice.getPrice()); + System.out.println("Total: "+invoice.calculateTotal()); + } + } + + static class InvoiceSaver{ + public void saveToFile(InvoiceSrp invoice){ + try (FileWriter writer = new FileWriter("invoice.txt")){ + writer.write("Producto: " + invoice.getProduct() + "\n"); + writer.write("Cantidad: " + invoice.getQuantity() + "\n"); + writer.write("Precio unitario: " + invoice.getPrice() + "\n"); + writer.write("Total: " + invoice.calculateTotal() + "\n"); + } catch (Exception e) { + System.out.println("ERROR: no se pudo generar la factura..."+e.getMessage()); + } + } + } /****************************** ejemplo sin srp(Incorrecto) ******************************/ public static void incorrectSrp(){ Invoice invoice = new Invoice("Laptop",2,1200.00); From 3efafe42aaefc98e2fe2c4d95678900c40db99a0 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:29:17 -0500 Subject: [PATCH 301/539] #10 - Java --- .../java/martinbohorquez.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Roadmap/10 - EXCEPCIONES/java/martinbohorquez.java diff --git a/Roadmap/10 - EXCEPCIONES/java/martinbohorquez.java b/Roadmap/10 - EXCEPCIONES/java/martinbohorquez.java new file mode 100644 index 0000000000..508de8edde --- /dev/null +++ b/Roadmap/10 - EXCEPCIONES/java/martinbohorquez.java @@ -0,0 +1,49 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class martinbohorquez { + public static void main(String[] args) { + try { +// int num = 10 / 0; + List lista = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)); + System.out.println(lista.get(6)); + } catch (ArithmeticException e) { +// e.printStackTrace(); + System.out.printf("No puede dividirse por cero: %s%n", e.getMessage()); + } catch (IndexOutOfBoundsException e) { + System.out.printf("Indice fuera de límites: %s%n", e.getMessage()); + } + System.out.println("Continuando con el programa...!"); + + /* + * DIFICULTAD EXTRA + */ + processParams(Arrays.asList(10, 0, 30)); + } + + private static void processParams(List lista) { + List list = new ArrayList<>(lista); + try { + System.out.printf("La división es: %d%n", (list.get(2) / list.get(0))); + System.out.println(list.get(2)); + if (list.get(1) == 0) throw new MartinException("elemento con valor zero!"); + } catch (ArithmeticException e) { + System.out.printf("No puede dividirse por cero: %s%n", e.getMessage()); + } catch (IndexOutOfBoundsException e) { + System.out.printf("Indice fuera de límites: %s%n", e.getMessage()); + } catch (MartinException e) { + System.out.printf("Se ha producido un error personalizado: %s%n", e.getMessage()); + } catch (Exception e) { + System.out.printf("Se ha producido un error inesperado: %s%n", e.getMessage()); + } finally { + System.out.println("Programa finalizado!"); + } + } + + private static class MartinException extends Exception { + public MartinException(String message) { + super(message); + } + } +} From 21e074868fe761a4890a505d0f6c3f0e87257194 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Mon, 16 Sep 2024 15:34:01 -0500 Subject: [PATCH 302/539] Ejercicio adicional sin srp --- Roadmap/26 - SOLID SRP/java/simonguzman.java | 120 ++++++++++++++++++- 1 file changed, 119 insertions(+), 1 deletion(-) diff --git a/Roadmap/26 - SOLID SRP/java/simonguzman.java b/Roadmap/26 - SOLID SRP/java/simonguzman.java index e6a3898e37..275c932384 100644 --- a/Roadmap/26 - SOLID SRP/java/simonguzman.java +++ b/Roadmap/26 - SOLID SRP/java/simonguzman.java @@ -1,11 +1,129 @@ import java.io.FileWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class simonguzman { public static void main(String[] args) { //incorrectSrp(); - correctSrp(); + //correctSrp(); + additionalExerciseNoSrp(); } + /****************************** Ejercicio adicional(Sin srp) ******************************/ + public static void additionalExerciseNoSrp(){ + Library library = new Library(); + + library.registerBook("1984", "George Orwell", 3); + library.registerUser("John Doe", "001", "johndoe@example.com"); + + library.borrowBook("001", "1984"); + library.returnBook("001", "1984"); + } + + static class Library{ + private List books = new ArrayList<>(); + private List users = new ArrayList<>(); + private Map> borrowedBooks = new HashMap<>(); + + public void registerBook(String title, String author, int copies){ + books.add(new Book(title, author, copies)); + System.out.println("Libro registrado: "+title); + } + + public void registerUser(String name, String id, String email){ + users.add(new User(name, id, email)); + System.out.println("Usuario registrado: "+name); + } + + public void borrowBook(String userId, String bookTitle){ + User user = users.stream().filter(u -> u.getId().equals(userId)).findFirst().orElse(null); + Book book = books.stream().filter(b -> b.getTitle().equals(bookTitle)).findFirst().orElse(null); + + if(user != null && book != null && book.getCopies() > 0){ + borrowedBooks.computeIfAbsent(user, k -> new ArrayList<>()).add(book); + book.setCopies(book.getCopies()-1); + System.out.println("Libro prestado: " + bookTitle + " a " + user.getName()); + }else{ + System.out.println("No se pudo procesar el prestamo."); + } + } + + public void returnBook(String userId, String bookTitle){ + User user = users.stream().filter(u -> u.getId().equals(userId)).findFirst().orElse(null); + List borrowed = borrowedBooks.get(user); + + if(borrowed != null){ + Book book = borrowed.stream().filter(b -> b.getTitle().equals(bookTitle)).findFirst().orElse(null); + if(book != null){ + borrowed.remove(book); + book.setCopies(book.getCopies() + 1); + System.out.println("Libro devuelto: "+bookTitle); + } + }else{ + System.out.println("ERROR: No se pudo devolver el libro."); + } + } + } + + static class Book{ + private String title; + private String author; + private int copies; + + public Book(){ + + } + + public Book(String title, String author, int copies){ + this.title = title; + this.author = author; + this.copies = copies; + } + + public String getTitle() { + return title; + } + + public int getCopies() { + return copies; + } + + public void setCopies(int copies) { + this.copies = copies; + } + + } + + static class User{ + private String name; + private String id; + private String email; + + public User(){ + + } + + public User(String name, String id, String email){ + this.name = name; + this.id = id; + this.email = email; + } + + public String getName() { + return name; + } + + public String getId() { + return id; + } + + public String getEmail() { + return email; + } + } + /****************************** ejemplo con srp(Correcto) ******************************/ public static void correctSrp() { InvoiceSrp invoice = new InvoiceSrp("Laptop",2,1200.00); From 74c75d85fb7d531c2b9978b9886bdcf36e491120 Mon Sep 17 00:00:00 2001 From: adra-dev Date: Mon, 16 Sep 2024 14:37:42 -0600 Subject: [PATCH 303/539] #31 - Python --- .../python/adra-dev.py" | 198 ++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 "Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/adra-dev.py" diff --git "a/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/adra-dev.py" "b/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/adra-dev.py" new file mode 100644 index 0000000000..dd4fb3765f --- /dev/null +++ "b/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/adra-dev.py" @@ -0,0 +1,198 @@ +""" +EJERCICIO: +¡Los JJOO de París 2024 han comenzado! +Crea un programa que simule la celebración de los juegos. +El programa debe permitir al usuario registrar eventos y participantes, +realizar la simulación de los eventos asignando posiciones de manera aleatoria +y generar un informe final. Todo ello por terminal. + +Requisitos: +1. Registrar eventos deportivos. +2. Registrar participantes por nombre y país. +3. Simular eventos de manera aleatoria en base a los participantes (mínimo 3). +4. Asignar medallas (oro, plata y bronce) basándose en el resultado del evento. +5. Mostrar los ganadores por cada evento. +6. Mostrar el ranking de países según el número de medallas. + +Acciones: +1. Registro de eventos. +2. Registro de participantes. +3. Simulación de eventos. +4. Creación de informes. +5. Salir del programa. + +by adra-dev +""" + + +import random + +class Participant: + + def __init__(self, name, country): + self.name = name + self.country = country + + def __eq__(self, other: object) -> bool: + if isinstance(other, Participant): + return self.name == other.name and self.country == other.country + return False + + def __hash__(self) -> int: + return hash(self.name, self.country) + + +class Olympics: + def __init__(self): + self.events = [] + self.participants = {} + self.event_results = {} + self.country_results = {} + + def register_event(self): + + event = input("Ingresa el nombre del evento deportivo: ").strip() + + if event in self.events: + print(f"El evento {event} ya se encuentra registrado.") + else: + self.events.append(event) + print(f"El evento {event} se ha registrado correctamente.") + + def register_participant(self): + + if not self.events: + print("No hay eventos regsitrados, porfavor registra uno primero.") + return + + name = input("Ingresa el nombre del participante: ").strip() + country = input("Ingresa el pais del participante: ").strip() + participant = Participant(name, country) + + print("Eventos deportivos disponibles: ") + for index, event in enumerate(self.events): + print(f"{index + 1}. {event}") + + event_choice = int(input( + "Selecciona el numero del evento para asignar al participante: ")) -1 + + if event_choice >= 0 and event_choice < len(self.events): + + event = self.events[event_choice] + + + if event in self.participants and participant in self.participants[event]: + print( + f"El participante {name} del pais {country} ya se encuentra registrado en el evento dportivo {event}.") + else: + + if event not in self.participants: + self.participants[event] = [] + + self.participants[event].append(participant) + print( + f"El participante {name} del pais {country} se ha registrado correctamente en el evento dportivo {event}.") + else: + print( + "Seleccion de vento deportivo invalido. El participante no se ha registrado.") + + def simulate_events(self): + + if not self.events: + print("No hay eventos registrados. Por favor, registra uno primero.") + return + + for event in self.events: + + if len(self.participants[event]) < 3: + print( + f"No ay participantes suficientes para simular el evento {event} (mininmo 3).") + continue + + event_participants = random.sample(self.participants[event], 3) + random.shuffle(event_participants) + + gold, silver, bronze = event_participants + self.event_results[event] = [gold, silver, bronze] + + self.update_country_results(gold.country, "gold") + self.update_country_results(silver.country, "silver") + self.update_country_results(bronze.country, "bronze") + + print(f"Resultados simulacion del evento {event}") + print(f"Oro: {gold.name} ({gold.country})") + print(f"Plata: {silver.name} ({silver.country})") + print(f"Bronce: {bronze.name} ({bronze.country})") + + def update_country_results(self, country, medal): + if country not in self.country_results: + self.country_results[country] = { + "gold": 0, "silver": 0, "bronze": 0} + + self.country_results[country][medal] += 1 + + def show_report(self): + + print("Informe Juegos Olimpicos: ") + + if self.event_results: + + print("Informe por evento:") + + for event, winners in self.event_results.items(): + print(f"Evento: {event}") + print(f"Oro: {winners[0].name} ({winners[0].country})") + print(f"Plata: {winners[1].name} ({winners[1].country})") + print(f"Bronce: {winners[2].name} ({winners[2].country})") + else: + print("No hay resultados de registrados.") + + print() + + if self.country_results: + + print("Informe por país:") + + for country, medals in sorted(self.country_results.items(), key=lambda x: ( + x[1]["gold"], x[1]["silver"], x[1]["bronze"]), reverse=True): + + print(f"{country}: Oro {medals['gold']}, Plata {medals['silver']}, Bronce {medals['bronze']}") + + + + else: + print("No hay medallas por pais registradas.") + + +olympics = Olympics() + + +print("Simulador de Juegos Olimpicos") + +while True: + + print() + + print("1. Registro de eventos.") + print("2. Registro de participantes.") + print("3. Simulación de eventos.") + print("4. Creación de informes.") + print("5. Salir del programa.") + + option = input("Selecciona una accion: ") + + match option: + case "1": + olympics.register_event() + case "2": + olympics.register_participant() + case "3": + olympics.simulate_events() + case "4": + olympics.show_report() + case "5": + print("Saliendo del simuador de . . .") + break + case _: + print("Opcion invalida. Por favor, selecciona una nueva.") + From 3dba6f833f9d6efaa551a5a320195e3820fd8889 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Mon, 16 Sep 2024 15:46:04 -0500 Subject: [PATCH 304/539] Ejercicio #26 completado --- Roadmap/26 - SOLID SRP/java/simonguzman.java | 122 ++++++++++++++++++- 1 file changed, 121 insertions(+), 1 deletion(-) diff --git a/Roadmap/26 - SOLID SRP/java/simonguzman.java b/Roadmap/26 - SOLID SRP/java/simonguzman.java index 275c932384..e0ececa33f 100644 --- a/Roadmap/26 - SOLID SRP/java/simonguzman.java +++ b/Roadmap/26 - SOLID SRP/java/simonguzman.java @@ -9,8 +9,128 @@ public class simonguzman { public static void main(String[] args) { //incorrectSrp(); //correctSrp(); - additionalExerciseNoSrp(); + //additionalExerciseNoSrp(); + additionalExerciseSrp(); } + /****************************** Ejercicio adicional(Con srp) ******************************/ + public static void additionalExerciseSrp(){ + BookManager bookManager = new BookManager(); + UserManager userManager = new UserManager(); + LoanManager loanManager = new LoanManager(); + + bookManager.registerBook("1984", "George Orwell", 3); + userManager.registerUser("John Doe", "001", "johndoe@example.com"); + + User user = userManager.findUserById("001"); + Book book = bookManager.findBookByTitle("1984"); + + loanManager.borrowBook(user, book); + loanManager.returnBook(user, book); + } + + class BookSrp { + private String title; + private String author; + private int copies; + + public BookSrp(){ + + } + + public BookSrp(String title, String author, int copies) { + this.title = title; + this.author = author; + this.copies = copies; + } + + public String getTitle() { + return title; + } + + public int getCopies() { + return copies; + } + + public void setCopies(int copies) { + this.copies = copies; + } + } + + class UserSrp { + private String name; + private String id; + private String email; + + public UserSrp(){ + + } + + public UserSrp(String name, String id, String email) { + this.name = name; + this.id = id; + this.email = email; + } + + public String getName() { + return name; + } + + public String getId() { + return id; + } + } + + static class BookManager{ + private List books = new ArrayList<>(); + + public void registerBook(String title, String author, int copies){ + books.add(new Book(title, author, copies)); + System.out.println("Libro registrado: " + title); + } + + public Book findBookByTitle(String title){ + return books.stream().filter(b -> b.getTitle().equals(title)).findFirst().orElse(null); + } + } + + static class UserManager{ + private List users = new ArrayList<>(); + + public void registerUser(String name, String id, String email){ + users.add(new User(name, id, email)); + System.out.println("Usuario registrado: " + name); + } + + public User findUserById(String id){ + return users.stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null); + } + } + + static class LoanManager{ + private Map> borrowedBooks = new HashMap<>(); + + public void borrowBook(User user, Book book) { + if (book != null && book.getCopies() > 0) { + borrowedBooks.computeIfAbsent(user, k -> new ArrayList<>()).add(book); + book.setCopies(book.getCopies() - 1); + System.out.println("Libro prestado: " + book.getTitle() + " a " + user.getName()); + } else { + System.out.println("No se pudo procesar el préstamo."); + } + } + + public void returnBook(User user, Book book) { + List borrowed = borrowedBooks.get(user); + if (borrowed != null && borrowed.contains(book)) { + borrowed.remove(book); + book.setCopies(book.getCopies() + 1); + System.out.println("Libro devuelto: " + book.getTitle()); + } else { + System.out.println("No se pudo devolver el libro."); + } + } + } + /****************************** Ejercicio adicional(Sin srp) ******************************/ public static void additionalExerciseNoSrp(){ Library library = new Library(); From 7575801a0e46b0cc49c4bb7ff17e644283413820 Mon Sep 17 00:00:00 2001 From: oriaj3 Date: Mon, 16 Sep 2024 23:08:39 +0200 Subject: [PATCH 305/539] Sol #38 - Python --- Roadmap/38 - MOUREDEV PRO/python/oriaj3.py | 86 ++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/oriaj3.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/oriaj3.py b/Roadmap/38 - MOUREDEV PRO/python/oriaj3.py new file mode 100644 index 0000000000..4df42e88aa --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/oriaj3.py @@ -0,0 +1,86 @@ +""" + * EJERCICIO: + * He presentado mi proyecto más importante del año: mouredev pro. + * Un campus para la comunidad, que lanzaré en octubre, donde estudiar + * programación de una manera diferente. + * Cualquier persona suscrita a la newsletter de https://mouredev.pro + * accederá a sorteos mensuales de suscripciones, regalos y descuentos. + * + * Desarrolla un programa que lea los registros de un fichero .csv y + * seleccione de manera aleatoria diferentes ganadores. + * Requisitos: + * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + * o "inactivo" (y datos ficticios). + * Ejemplo: 1 | test@test.com | activo + * 2 | test2@test.com | inactivo + * (El .csv no debe subirse como parte de la corrección) + * 2. Recupera los datos desde el programa y selecciona email aleatorios. + * Acciones: + * 1. Accede al fichero .csv y selecciona de manera aleatoria un email + * ganador de una suscripción, otro ganador de un descuento y un último + * ganador de un libro (sólo si tiene status "activo" y no está repetido). + * 2. Muestra los emails ganadores y su id. + * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + * no debe tenerse en cuenta. + */ +""" + +import csv +import random + +#Introduce la url del archivo +PATH_CSV_FILE = "D:\\Desarrollo\\roadmap-retos-programacion\\Roadmap\\38 - MOUREDEV PRO\\python\\concurso.csv" + +#Abrir el archivo +def open_csv(file): + with open (file, newline='') as csvfile: + reader = csv.reader(csvfile, delimiter='|') + #Borra la primera fila + next(reader) + #ID, email, status + listdata = list(reader) + #Diccionario para almacenar los datos + data = {} + for row in listdata[1:]: + id = row[0] + email = row[1] + status = row[2] + data[id] = {"email": email, "status": status} + return data + +def select_winners(data): + winners = {"subscription": None, "discount": None, "book": None} + set_winners = set() + while len(set_winners) < 3: + if len(set_winners) == 0: + winner = random.choice(list(data.keys())) + if winner not in set_winners: + winners["subscription"] = data[winner]["email"] + set_winners.add(winner) + + elif len(set_winners) == 1: + winner = random.choice(list(data.keys())) + if winner not in set_winners: + winners["discount"] = data[winner]["email"] + set_winners.add(winner) + elif len(set_winners) == 2: + winner = random.choice(list(data.keys())) + active = data[winner]["status"].strip() == "activo" + if winner not in set_winners and active: + winners["book"] = data[winner]["email"] + set_winners.add(winner) + + return winners + +def print_winners(winners): + print("Ganador de la suscripción: ", winners["subscription"]) + print("Ganador del descuento: ", winners["discount"]) + print("Ganador del libro: ", winners["book"]) + +def main(): + data = open_csv(PATH_CSV_FILE) + winners = select_winners(data) + print_winners(winners) + +if __name__ == "__main__": + main() From bb63aa2339b9ac55e348f0f9b9434a4be5b12298 Mon Sep 17 00:00:00 2001 From: deathwing Date: Mon, 16 Sep 2024 23:15:59 +0200 Subject: [PATCH 306/539] =?UTF-8?q?Modificaci=C3=B3n=20gitignore=20para=20?= =?UTF-8?q?eliminar=20los=20ficheros=20de=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 421 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 409 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 0583904141..8a0ed4ab0f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,409 @@ -.vscode/ -*.txt -*.xml -*.iml -*.json -!stats.json -.DS_Store -.idea/ -pubspec.yaml -pubspec.lock -.venv -*.class +# Created by https://www.toptal.com/developers/gitignore/api/csharp +# Edit at https://www.toptal.com/developers/gitignore?templates=csharp + +### Csharp ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +*.csproj +*.sln +.gitignore +*.config +test.cs + +# End of https://www.toptal.com/developers/gitignore/api/csharp + From 0512b3c4f5bbb6464310fa636b6ad87f6b6cd5e2 Mon Sep 17 00:00:00 2001 From: JheisonQuiroga Date: Mon, 16 Sep 2024 16:35:02 -0500 Subject: [PATCH 307/539] #01 - Python --- .../python/JheisonQuiroga.py | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/JheisonQuiroga.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/JheisonQuiroga.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/JheisonQuiroga.py new file mode 100644 index 0000000000..fdfc470df8 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/JheisonQuiroga.py @@ -0,0 +1,141 @@ +# asignement operator +n1 = 10 +n2 = 3 +n1 += 2 # same that n1 = n1 + 2 + +# Aricmethic operators +add = 2 + 2 +sub = 3 - 2 +mult = 5 * 2 +div = 10 * 2 # 5.0 (Division always return a float number) +mod = 10 % 3 # Module (return the reaminder) 1 +floor_division = 10 // 3 # 3, Return a integer of division +exponential = 2 ** 3 # 2 * 2 * 2 + +#Logic operators +""" +AND = Return True if both conditions are true +OR = Return True if one of the statement is true +NOT = Invert the result, if not True = False +""" +print(3 < 5 and 4 < 5) # True +print(3 < 5 and 5 < 5) #False +print(3 < 5 or 5 < 5) #True +print(3 < 2 or 4 < 2) #False +print(not True) #False +print(not False) #True + +#Comparison operators +""" +== equal +> mayor than +>= mayor or equal than +< menor than +<= menor or equal than +!= not equal or diferent +""" +print("-----Comparison Operators-----") +print(3 == 2) # False +print(3 == 3) #True +print(3 > 2) #True +print(3 > 3) #False +print(5 >= 2) #True +print(2 >= 3) #False +print(2 < 3) #True +print(3 < 2) # False +print(2 <= 2) #True +print(2 <= 1) #False +print(2 != 3) #True +print(3 != 3) #False + +print("-----Identity Operators-----") +""" +Identity Operators are used to compare objects +IS = is the same object? +IS NOT = Is no the same object +""" +x = 10 +y = 8 +print(x is 5 + 5) # True, because 10 is equal that 5+5=10 +print(y is not 4 * 2) # False, because 8 is 8 + +print("-----Membership operators-----") +""" +Are used to test if a statement is present in an object +IN = Return True if a Sequence specific in an object +NOT IN = Return True if a statement specific is not present in the object +""" +print(f"'D' in 'Duban:' {'D' in 'Duban'}") +print(f"'S' not in 'Duban': {'S' not in 'Duban'}") #True + + +print("-----Bit Operators-----") +""" +Integer numbers to binary numbers +AND (&) +OR (|) +XOR (^) +NOT (~) +MOVE TO RIGHT (>>) +MOVE TO LEFT (<<) +""" +a = 10 # 1010 +b = 3 # 0011 + +print(f"AND: 10 & 3 = {a & b}") # 0010 = 2 +print(f"OR: 10 | 3 = {a | b}") # 1011 = 11 +print(f"XOR: 10 ^ 3 = {a ^ b}") # 1001 = 9 +print(f"NOT: {~10}") +print(f"Desplazamiento a la derecha: 10 >> 2 = {10 >> 2}") # 0010 = 2 +print(f"Desplazamiento a la izquierda: 10 << 2 = {10 << 2}") # 101000 = 40 + + +print("-----Control estructures-----") +#Conditionals +""" +if- elif - else +""" +print("IF STATEMENT") +grade = -1 +if 9 <= grade <= 10: # if + print("Excelent") +elif 6 <= grade < 9: # elif + print("Aprobbed") +elif 0 <= grade <= 5: + print("Reprobbed") +else: + print("Invalid grade") + +# Iteratives + +""" +while +""" +counter = 1 +while counter <=10: + print(counter) + counter += 1 + +# for +# Using the range function +my_list = ["Orange", "Pineapple", "Strawberry", "Watermelon"] +for i in my_list: + print(i) # Print each element of my list + +#try - except + +try: + number = int(input("enter a int number: ")) +except: + print("X is not integer") +else: + print(f"your number: {number}") +finally: + print("Continue with the program") + + +"""Extra difficulty""" + +for num in range(10,56): + if num % 2 == 0 and num != 16 and num % 3 != 0: + print(num) \ No newline at end of file From 1a2206b0c937f0bf967204eeb9d27e35d96ff62c Mon Sep 17 00:00:00 2001 From: JesusWay69 HP elitebook Date: Mon, 16 Sep 2024 23:55:21 +0200 Subject: [PATCH 308/539] #37 - Python --- .../python/JesusWay69.py | 177 ++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/JesusWay69.py diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/JesusWay69.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/JesusWay69.py new file mode 100644 index 0000000000..a57e16a8ec --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/JesusWay69.py @@ -0,0 +1,177 @@ +import os, platform, spotipy, credentials +from spotipy.oauth2 import SpotifyClientCredentials + + +if (platform.platform().startswith("macOS") or platform.platform().startswith("Linux")): + os.system('clear') +else: + os.system('cls') + +"""* EJERCICIO: + * Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? + * ¡Dos de las bandas más grandes de la historia están de vuelta! + * Desarrolla un programa que se conecte al API de Spotify y los compare. + * Requisitos: + * 1. Crea una cuenta de desarrollo en https://developer.spotify.com. + * 2. Conéctate al API utilizando tu lenguaje de programación. + * 3. Recupera datos de los endpoint que tú quieras. + * Acciones: + * 1. Accede a las estadísticas de las dos bandas. + * Por ejemplo: número total de seguidores, escuchas mensuales, + * canción con más reproducciones... + * 2. Compara los resultados de, por lo menos, 3 endpoint. + * 3. Muestra todos los resultados por consola para notificar al usuario. + * 4. Desarrolla un criterio para seleccionar qué banda es más popular.""" + +client_ID = credentials.client_ID #clave de cliente propia de 32 caracteres +secret_ID = credentials.secret_ID #clave secreta propia de 32 caracteres + +ccm = SpotifyClientCredentials(client_id=client_ID, client_secret=secret_ID) +sp = spotipy.Spotify(client_credentials_manager=ccm) + + +def get_artist(artist_name:str)->object: + artist = sp.search(q=artist_name, limit=1, type="artist", offset=0) + if artist == None: + return f"El artista {artist_name} no existe" + return artist + +def get_artist_stats(artist:object)->tuple: + total_popularity_songs = 0 + artist_id = artist["artists"]["items"][0]["id"] + top_songs = sp.artist_top_tracks(artist_id) + artist_name = artist["artists"]["items"][0]["name"] + artist_followers = artist["artists"]["items"][0]["followers"]["total"] + popularity_level = artist["artists"]["items"][0]["popularity"] + for song in top_songs["tracks"]: + total_popularity_songs = total_popularity_songs + song["popularity"] + + return artist_name, artist_followers, popularity_level, total_popularity_songs + +def print_top_songs(artist:object): + artist = artist["artists"]["items"][0] + print(f"\nCanciones más populares de {artist["name"]}") + print("************************************************") + print('{:<30}'.format(" TITULO"), "PUNTUACIÓN") + top_songs = sp.artist_top_tracks(artist["id"]) + for song in top_songs["tracks"]: + song_name = song["name"].split(" - ") + print("- ",'{:<30}'.format(song_name[0]), song["popularity"]) + + +def print_artist_stats(artist:object): + artist = artist["artists"]["items"][0] + print (f"""\nNombre del artista: {artist["name"]} +Género musical: {artist["genres"][0]}/{artist["genres"][1]} +Número de followers: {artist["followers"]["total"]} +Nivel de popularidad: {artist["popularity"]}""") + +def print_albums(artist:object): + artist = artist["artists"]["items"][0] + print(f"\nDiscografía de {artist["name"]}:") + print("**********************************************************************************") + print('{:<63}'.format(" TITULO"), "AÑO DE LANZAMIENTO") + albums = sp.artist_albums(artist["id"], album_type="album",offset=0, limit=30) + for album in albums["items"]: + print(f"- " '{:<63}'.format(album["name"]), album["release_date"][:4]) + +def compare(artist1:object, artist2:object): + name1, followers1, popularity1, popularity_songs1 = get_artist_stats(artist1) + name2, followers2, popularity2, popularity_songs2 = get_artist_stats(artist2) + + print(f"\n{name1} tiene {followers1} seguidores y su índice de popularidad es de {popularity1} puntos.") + print(f"\n{name2} tiene {followers2} seguidores y su índice de popularidad es de {popularity2} puntos.") + print(f"\nLa suma de la puntuación por escuchas de las 10 mejores canciones de {name1} es de: {popularity_songs1} puntos.") + print(f"\nLa suma de la puntuación por escuchas de las 10 mejores canciones de {name2} es de: {popularity_songs2} puntos.") + + if followers1 > followers2 and popularity1 > popularity2: + print(f"\n{name1} tiene más seguidores e índice de popularidad que {name2}") + if popularity_songs1 > popularity_songs2: + print(f"Además {name1} acumula más puntos que {name2} en las escuchas de sus 10 mejores canciones...") + print(f"\n..por lo tanto el ganador claro es: {name1.upper()}") + elif popularity_songs1 == popularity_songs2: + print(f"En puntuación acumulada de las escuchas de sus 10 mejores canciones están empatados..") + print(f"\n..aun así el ganador es: {name1.upper()}") + else: + print(f"{name2} tiene mejor puntuación en sus 10 mejores canciones pero {name1} ha ganado en todo lo demás..") + print(f"\n...por lo tanto el ganador es: {name1.upper()}") + + elif followers1 < followers2 and popularity1 < popularity2: + print(f"\n{name2} tiene más seguidores e índice de popularidad que {name1}") + if popularity_songs1 < popularity_songs2: + print(f"Además {name2} acumula más puntos que {name1} en las escuchas de sus 10 mejores canciones...") + print(f"\n..por lo tanto el ganador claro es: {name2.upper()}") + elif popularity_songs1 == popularity_songs2: + print(f"En puntuación acumulada de las escuchas de sus 10 mejores canciones están empatados..") + print(f"\n..aun así el ganador es: {name2.upper()}") + else: + print(f"{name1} tiene mejor puntuación en las escuchas de sus 10 mejores canciones pero {name2} ha ganado en todo lo demás..") + print(f"\n...por lo tanto el ganador es: {name2.upper()}") + + elif followers1 > followers2 and popularity1 < popularity2: + print(f"\n{name1} tiene más seguidores que {name2} pero este tiene mejor índice de popularidad") + if popularity_songs1 > popularity_songs2: + print(f"{name1} acumula más puntos que {name2} en las escuchas de sus 10 mejores canciones y acumula también más seguidores...") + print(f"\n..aunque {name2} tenga más índice de popularidad el ganador es: {name1.upper()}") + elif popularity_songs1 == popularity_songs2: + print(f"En puntuación acumulada de las escuchas de sus 10 mejores canciones están empatados..") + print(f"\n..no hay un ganador claro, ambos artistas tienen estadísticas muy similares.") + else: + print(f"{name2} tiene mejor puntuación en las escuchas de sus 10 mejores canciones que {name1} y ha ganado también en popularidad..") + print(f"\n...aunque {name1} tenga más seguidores el ganador es: {name2.upper()}") + + elif followers1 < followers2 and popularity1 > popularity2: + print(f"\n{name2}tiene más seguidores que {name1} pero este tiene mejor índice de popularidad") + if popularity_songs1 < popularity_songs2: + print(f"{name2} acumula más puntos que {name1} en las escuchas de sus 10 mejores canciones y acumula también más seguidores...") + print(f"..aunque {name1} tenga más índice de popularidad el ganador es: {name2.upper()}") + elif popularity_songs1 == popularity_songs2: + print(f"En puntuación acumulada de las escuchas de sus 10 mejores canciones están empatados..") + print(f"\n..no hay un ganador claro, ambos artistas tienen estadísticas muy similares.") + else: + print(f"{name1} tiene mejor puntuación en las escuchas de sus 10 mejores canciones que {name2} y ha ganado también en popularidad..") + print(f"\n...aunque {name2} tenga más seguidores el ganador es: {name1.upper()}") + + elif followers1 < followers2 and popularity1 == popularity2: + print(f"\n{name2}tiene más seguidores que {name1} pero en índice de popularidad están empatados") + if popularity_songs1 < popularity_songs2: + print(f"{name2} acumula más puntos que {name1} en las escuchas de sus 10 mejores canciones y acumula también más seguidores...") + print(f"..aunque ambos tengan el índice de popularidad empatado el ganador es: {name2.upper()}") + elif popularity_songs1 == popularity_songs2: + print(f"En puntuación acumulada de las escuchas de sus 10 mejores canciones están empatados..") + print(f"\n..no hay un ganador claro, ambos artistas tienen estadísticas muy similares.") + else: + print(f"{name1} tiene mejor puntuación en las escuchas de sus 10 mejores canciones que {name2} y han empatado en popularidad..") + print(f"\n...pero {name2} tiene más seguidores así que no hay un ganador claro.") + + elif followers1 > followers2 and popularity1 == popularity2: + print(f"\n{name1}tiene más seguidores que {name2} pero en índice de popularidad están empatado") + if popularity_songs1 < popularity_songs2: + print(f"{name2} acumula más puntos que {name1} en las escuchas de sus 10 mejores canciones y en popularidad están empatados...") + print(f"\n...como {name1} tiene más seguidores no hay un ganador claro") + elif popularity_songs1 == popularity_songs2: + print(f"En puntuación acumulada de las escuchas de sus 10 mejores canciones están empatados..") + print(f"\n..no hay un ganador claro, ambos artistas tienen estadísticas muy similares.") + else: + print(f"{name1} tiene mejor puntuación en las escuchas de sus 10 mejores canciones que {name2} y han empatado en popularidad..") + print(f"..y aunque ambos tengan el índice de popularidad empatado el ganador es: {name1.upper()}") + print() + + +oasis = get_artist("Oasis") +linkin_park = get_artist("Linkin park") + +print_artist_stats(linkin_park) +print_albums(linkin_park) +print_top_songs(linkin_park) + +print_artist_stats(oasis) +print_albums(oasis) +print_top_songs(oasis) + +compare(linkin_park, oasis) + + + + + From a10e37d54ddd0df085f04c6bfbed6e40d1d9f2f8 Mon Sep 17 00:00:00 2001 From: DeaconSt <94658946+DeaconSt@users.noreply.github.com> Date: Mon, 16 Sep 2024 17:03:55 -0500 Subject: [PATCH 309/539] Create DeaconSt.ts --- .../typescript/DeaconSt.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/DeaconSt.ts diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/DeaconSt.ts b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/DeaconSt.ts new file mode 100644 index 0000000000..47c099d8ec --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/DeaconSt.ts @@ -0,0 +1,21 @@ +//////////////////////////////////////Punto #1/////////////////////////////////////// +//Documentación oficial de TypeScript: https://www.typescriptlang.org/es/docs/ +//////////////////////////////////////Punto #2/////////////////////////////////////// +//Comentario monolineal: Como por ejemplo este +/* Comentario +multilineal: +Como por ejemplo este +*/ +//////////////////////////////////////Punto #3/////////////////////////////////////// +let nombre: string = "Juan Felipe "; +const diasAñoNormal: number = 365; +//////////////////////////////////////Punto #4/////////////////////////////////////// +let pais: string = "Colombia y/o algo más"; +let peso: number = 80; +let premisa: boolean = true; //o false +let nullType: null = null; +let undefindeType: undefined = undefined; +let symbol: symbol = Symbol('S') +//////////////////////////////////////Punto #5/////////////////////////////////////// +let message: string = "TypeScript"; +console.log("¡Hola "+message+"!"); From 25a3821cf3cb0ad867c044081b9a9378ae72ead8 Mon Sep 17 00:00:00 2001 From: deathwing Date: Tue, 17 Sep 2024 00:08:36 +0200 Subject: [PATCH 310/539] #38 - C# --- Roadmap/38 - MOUREDEV PRO/c#/deathwing696.cs | 161 +++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/c#/deathwing696.cs diff --git a/Roadmap/38 - MOUREDEV PRO/c#/deathwing696.cs b/Roadmap/38 - MOUREDEV PRO/c#/deathwing696.cs new file mode 100644 index 0000000000..e7c962493b --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/c#/deathwing696.cs @@ -0,0 +1,161 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +/* + * EJERCICIO: + * He presentado mi proyecto más importante del año: mouredev pro. + * Un campus para la comunidad, que lanzaré en octubre, donde estudiar + * programación de una manera diferente. + * Cualquier persona suscrita a la newsletter de https://mouredev.pro + * accederá a sorteos mensuales de suscripciones, regalos y descuentos. + * + * Desarrolla un programa que lea los registros de un fichero .csv y + * seleccione de manera aleatoria diferentes ganadores. + * Requisitos: + * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + * o "inactivo" (y datos ficticios). + * Ejemplo: 1 | test@test.com | activo + * 2 | test2@test.com | inactivo + * (El .csv no debe subirse como parte de la corrección) + * 2. Recupera los datos desde el programa y selecciona email aleatorios. + * Acciones: + * 1. Accede al fichero .csv y selecciona de manera aleatoria un email + * ganador de una suscripción, otro ganador de un descuento y un último + * ganador de un libro (sólo si tiene status "activo" y no está repetido). + * 2. Muestra los emails ganadores y su id. + * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + * no debe tenerse en cuenta. + */ + +namespace Reto_38 +{ + internal class deathwing696 + { + internal enum Estado_t + { + activo, + inactivo + }; + + public class Usuario + { + private int id; + private string email; + private Estado_t estado; + + public int Id { get { return id; } } + public string Email { get { return email; } } + public Estado_t Estado { get { return estado; } } + + public Usuario(int id, string email, Estado_t status) + { + this.id = id; + this.email = email; + this.estado = status; + } + } + + public class MoureDevPRO + { + private List usuarios = new List(); + public void ImportCSV(string path) + { + try + { + var file = File.ReadAllLines(path); + + for (int i = 1; i < file.Length; i++) + { + var values = file[i].Split(','); + + var id = int.Parse(values[0].Trim()); + var email = values[1].Trim(); + var status = values[2].Trim().ToLower().Equals("activo") ? Estado_t.activo : Estado_t.inactivo; + + var Usuario = new Usuario(id, email, status); + usuarios.Add(Usuario); + } + } + catch + { + Console.WriteLine("Ha ocurrido un error al leer el csv. Asegúrese de que el fichero existe y tiene un formato correcto."); + } + } + + internal void SelectWinners() + { + if (usuarios.Count <= 0) + { + Console.WriteLine("No hay usuarios importados desde el csv, por tanto, no pueden haber ganadores"); + return; + } + + List usuarios_copy = new List(usuarios); + + //Seleccionamos el ganador de la suscripción + Random rnd = new Random(); + var suscriptionIndex = rnd.Next(0, usuarios_copy.Count); + Usuario selectedUser = usuarios_copy[suscriptionIndex]; + Console.WriteLine($"El ganador de la suscripción es: \n\t{selectedUser.Id} - {selectedUser.Email}"); + + if (usuarios_copy.Count < 2) + { + Console.WriteLine("No hay más usuarios importados desde el csv, por tanto, no pueden haber más ganadores"); + return; + } + + //Seleccionamos el ganador del descuento + usuarios_copy.RemoveAt(suscriptionIndex); + var discountIndex = rnd.Next(0, usuarios_copy.Count); + selectedUser = usuarios_copy[discountIndex]; + Console.WriteLine($"El ganador de la suscripción es: \n\t{selectedUser.Id} - {selectedUser.Email}"); + + if (usuarios.Count < 2) + { + Console.WriteLine("No hay más usuarios importados desde el csv, por tanto, no pueden haber más ganadores"); + return; + } + + //Seleccionamos el ganador del descuento + usuarios_copy.RemoveAt(discountIndex); + selectedUser = null; + + while (usuarios_copy.Count > 0) + { + var bookIndex = rnd.Next(0, usuarios_copy.Count); + selectedUser = usuarios_copy[bookIndex]; + + if (selectedUser.Estado == Estado_t.activo) + { + break; + } + else + { + usuarios_copy.RemoveAt(bookIndex); + selectedUser = null; + } + } + + if (selectedUser != null) + Console.WriteLine($"El ganador de la suscripción es: \n\t{selectedUser.Id} - {selectedUser.Email}"); + else + Console.WriteLine("No hay más usuarios importados desde el csv que tengan el estado activo, por tanto, no hay ganador del libro"); + } + } + + static void Main(string[] args) + { + var moureDevPRO = new MoureDevPRO(); + moureDevPRO.ImportCSV($"{AppDomain.CurrentDomain.BaseDirectory}mouredevPro.csv"); + moureDevPRO.SelectWinners(); + + + + Console.ReadKey(); + } + } +} From b11e3e5f326b1ef2682d3409cc507b45fdfc1a23 Mon Sep 17 00:00:00 2001 From: deathwing Date: Tue, 17 Sep 2024 00:12:34 +0200 Subject: [PATCH 311/539] Se elimina el .gitignore para que no sea trackeado --- .gitignore | 420 ----------------------------------------------------- 1 file changed, 420 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index e6caac6f9a..0000000000 --- a/.gitignore +++ /dev/null @@ -1,420 +0,0 @@ -.vscode/ -*.txt -*.xml -*.iml -*.json -*.csv -!stats.json -.DS_Store -.idea/ -pubspec.yaml -pubspec.lock -.venv -*.class - -### Csharp ### -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.tlog -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - -# Visual Studio 6 workspace and project file (working project files containing files to include in project) -*.dsw -*.dsp - -# Visual Studio 6 technical files - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# Visual Studio History (VSHistory) files -.vshistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd - -# VS Code files for those working on multiple tools -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# JetBrains Rider -*.sln.iml - -*.csproj -*.sln -.gitignore -*.config -test.cs - -# End of https://www.toptal.com/developers/gitignore/api/csharp - From efb51e45a3c378c9a62120bb316594f5a633b4f7 Mon Sep 17 00:00:00 2001 From: neslarra <31991788+neslarra@users.noreply.github.com> Date: Mon, 16 Sep 2024 19:22:12 -0300 Subject: [PATCH 312/539] Reto# 38 - python --- Roadmap/38 - MOUREDEV PRO/python/neslarra.py | 87 ++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/neslarra.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/neslarra.py b/Roadmap/38 - MOUREDEV PRO/python/neslarra.py new file mode 100644 index 0000000000..b02d5f970a --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/neslarra.py @@ -0,0 +1,87 @@ +""" + EJERCICIO: + He presentado mi proyecto más importante del año: mouredev pro. + Un campus para la comunidad, que lanzaré en octubre, donde estudiar + programación de una manera diferente. + Cualquier persona suscrita a la newsletter de https://mouredev.pro + accederá a sorteos mensuales de suscripciones, regalos y descuentos. + + Desarrolla un programa que lea los registros de un fichero .csv y + seleccione de manera aleatoria diferentes ganadores. + Requisitos: + 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + o "inactivo" (y datos ficticios). + Ejemplo: 1 | test@test.com | activo + 2 | test2@test.com | inactivo + (El .csv no debe subirse como parte de la corrección) + 2. Recupera los datos desde el programa y selecciona email aleatorios. + Acciones: + 1. Accede al fichero .csv y selecciona de manera aleatoria un email + ganador de una suscripción, otro ganador de un descuento y un último + ganador de un libro (sólo si tiene status "activo" y no está repetido). + 2. Muestra los emails ganadores y su id. + 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + no debe tenerse en cuenta. +""" +import csv +from os import remove +from random import randint + + +def create_csv(): + users = [ + {"id": 1, "email": "tito@gmail.com", "status": 0}, + {"id": 2, "email": "pepe@gmail.com", "status": 0}, + {"id": 3, "email": "salo@gmail.com", "status": 1}, + {"id": 4, "email": "tula@gmail.com", "status": 1}, + {"id": 5, "email": "tilo@gmail.com", "status": 1}, + {"id": 6, "email": "pipa@gmail.com", "status": 1}, + {"id": 7, "email": "toto@gmail.com", "status": 0}, + {"id": 8, "email": "calo@gmail.com", "status": 0}, + {"id": 9, "email": "tolo@gmail.com", "status": 0}, + {"id": 10, "email": "pepo@gmail.com", "status": 1}, + {"id": 11, "email": "sali@gmail.com", "status": 1}, + {"id": 12, "email": "chino@gmail.com", "status": 0}, + {"id": 13, "email": "chona@gmail.com", "status": 1}, + {"id": 14, "email": "tano@gmail.com", "status": 0}, + {"id": 15, "email": "tina@gmail.com", "status": 1}, + ] + + with open("reto_38_neslarra.csv", "w", newline="") as fichero: + writer = csv.writer(fichero, delimiter=",") + writer.writerow(["id", "email", "status"]) + for line in users: + writer.writerow([line["id"], line["email"], line["status"]]) + + +def read_csv(): + users = [] + with open("reto_38_neslarra.csv", "r") as fichero: + reader = csv.reader(fichero, delimiter=",") + for row in reader: + if reader.line_num == 1: + headers = row + continue + users.append({headers[0]: row[0], headers[1]: row[1], headers[2]: row[2]}) + return users + + +def remove_csv(): + remove("reto_38_neslarra.csv") + + +create_csv() + +users = read_csv() +active_users = [x for x in users if x["status"] == "1"] # status 1 = ACTIVO / status 0 = INACTIVO + +ganador_suscripcion = active_users.pop(randint(0, active_users.__len__() - 1)) +print(f"El ganador de la suscripción es {ganador_suscripcion['email']}") + +ganador_libro = active_users.pop(randint(0, active_users.__len__() - 1)) +print(f"El ganador del libro es {ganador_libro['email']}") + +ganador_descuento = active_users.pop(randint(0, active_users.__len__() - 1)) +print(f"El ganador del descuento es {ganador_descuento['email']}") + +remove_csv() From dc7eeaab3726462b0ff5ca75a050e73e382c6b93 Mon Sep 17 00:00:00 2001 From: deathwing Date: Tue, 17 Sep 2024 00:26:30 +0200 Subject: [PATCH 313/539] Se modifica el .gitignore para que sea igual que el de Moure --- .gitignore | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..65d0ea25aa --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +.vscode/ +*.txt +*.xml +*.iml +*.json +*.csv +!stats.json +.DS_Store +.idea/ +pubspec.yaml +pubspec.lock +.venv +*.class From 192d6d205ca10412cbbccb89cd731c997a5ef24d Mon Sep 17 00:00:00 2001 From: sarismejiasanchez Date: Mon, 16 Sep 2024 17:45:48 -0500 Subject: [PATCH 314/539] Reto #01 - Python --- .../python/sarismejiasanchez.py | 42 ++++++++----------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/sarismejiasanchez.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/sarismejiasanchez.py index cf399854fe..42b2eca16c 100644 --- a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/sarismejiasanchez.py +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/sarismejiasanchez.py @@ -281,16 +281,16 @@ print(f"a = {a}") #Esta 3 en la lista a? print(f"3 in a: {3 in a}") # Muestra True - + #No está 12 en la lista a? print(f"12 not in a: {12 not in a}") # Muestra True - + str = "Hello World" print(f"str: {str}") #Contiene World el string str? print(f"'World' in str: {'World' in str}") # Muestra True - + #Contiene world el string str? (nota: distingue mayúsculas y minúsculas) print(f"'world' in str: {'world' in str}") # Muestra False @@ -305,37 +305,33 @@ """ a = 2 # (en binario = 10) b = 3 # (en binario = 11) -print("""Operador & - Realiza bit a bit la operación AND en los operandos""") +print("""Operador & \nRealiza bit a bit la operación AND en los operandos""") print(f"a & b: {a & b}") # = 2(Binario: 10 & 11 = 10) print(""" -Operador | - Realiza bit a bit la operación OR en los operandos""") +Operador | \nRealiza bit a bit la operación OR en los operandos""") print(f"a | b: {a | b}") # = 3 (Binario: 10 | 11 = 11) print(""" -Operador ^ - Realiza bit a bit la operación XOR en los operandos""") +Operador ^ \nRealiza bit a bit la operación XOR en los operandos""") print(f"a ^ b: {a ^ b}") # = 1 (Binario: 10 ^ 11 = 01) print(""" -Operador ~ - Realiza bit a bit la operación NOT bit a bit. Invierte cada bit en el operando""") +Operador ~ \nRealiza bit a bit la operación NOT bit a bit. Invierte cada bit en el operando""") print(f"~ a: {~ a}") # = -3 (Binario: ~(00000010) = (11111101)) print(""" -Operador >> - Realiza un desplazamiento a la derecha bit a bit. - Desplaza los bits del operador de la izquierda a la derecha tantos bits - como indica el operador de la derecha""") +Operador >> + Realiza un desplazamiento a la derecha bit a bit. + Desplaza los bits del operador de la izquierda a la derecha tantos bits + como indica el operador de la derecha""") print(f"a >> b: {a >> b}") # = 0 (Binario: 00000010 >> 00000011 = 0) print(""" Operador << - Realiza un desplazamiento a la izquierda bit a bit. - Desplaza los bits del operando de la izquierda a la izquierda tantos bits - como especifique el operador de la derecha""") + Realiza un desplazamiento a la izquierda bit a bit. + Desplaza los bits del operando de la izquierda a la izquierda tantos bits + como especifique el operador de la derecha""") print(f"a << b: {a << b}") # 16 (Binario: 00000010 << 00000011 = 00001000) # ESTRUCTURAS DE CONTROL @@ -376,8 +372,7 @@ else: print("No aprobado") -print(""" -Ciclo for""") +print("Ciclo for") """ En Python, el ciclo for se utiliza para iterar sobre una secuencia (como una lista, tupla, cadena de caracteres, etc.) o cualquier objeto iterable. @@ -399,8 +394,7 @@ print(n) -print(""" -Ciclo while""") +print("Ciclo while") """ En Python, el ciclo while se utiliza para ejecutar un bloque de código mientras una condición especificada sea verdadera. Su estructura básica es la siguiente: @@ -429,11 +423,11 @@ print("DIFICULTAD EXTRA") for i in range(10, 56): if i % 2 == 0: # Pares - if i % 16 != 0: # No es el 16 + if i != 16: # No es el 16 if i % 3 != 0: # No es multiplo de 3 print(i) print("Optimizado") for i in range(10, 56): - if (i % 2 == 0 and i % 16 != 0 and i % 3 != 0): + if (i % 2 == 0 and i != 16 and i % 3 != 0): print(i) \ No newline at end of file From cf02a954f6fd6a89087f23090b3ea190e839abdc Mon Sep 17 00:00:00 2001 From: sarismejiasanchez Date: Mon, 16 Sep 2024 17:58:23 -0500 Subject: [PATCH 315/539] #02 - Python --- .../02 - FUNCIONES Y ALCANCE/python/sarismejiasanchez.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/python/sarismejiasanchez.py b/Roadmap/02 - FUNCIONES Y ALCANCE/python/sarismejiasanchez.py index 3bdf0d3dda..dc699b3230 100644 --- a/Roadmap/02 - FUNCIONES Y ALCANCE/python/sarismejiasanchez.py +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/python/sarismejiasanchez.py @@ -184,7 +184,13 @@ def incrementar_variable(): """ -DIFICULTAD EXTRA + * DIFICULTAD EXTRA (opcional): + * Crea una función que reciba dos parámetros de tipo cadena de texto y retorne un número. + * - La función imprime todos los números del 1 al 100. Teniendo en cuenta que: + * - Si el número es múltiplo de 3, muestra la cadena de texto del primer parámetro. + * - Si el número es múltiplo de 5, muestra la cadena de texto del segundo parámetro. + * - Si el número es múltiplo de 3 y de 5, muestra las dos cadenas de texto concatenadas. + * - La función retorna el número de veces que se ha impreso el número en lugar de los textos. """ print(f"\nDIFICULTAD EXTRA") def return_numbers(text1, text2): From 05ed6e4a83b689e4004b471fefc45073f47806e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Heguaburu=20S=C3=A1nchez?= Date: Mon, 16 Sep 2024 20:01:05 -0300 Subject: [PATCH 316/539] #00-python --- .../python/NicoHeguaburu.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/NicoHeguaburu.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/NicoHeguaburu.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/NicoHeguaburu.py new file mode 100644 index 0000000000..e69de29bb2 From f8edc6c1117656da30769f0ebd1e8913e3237f97 Mon Sep 17 00:00:00 2001 From: adra-dev Date: Mon, 16 Sep 2024 17:09:16 -0600 Subject: [PATCH 317/539] #32 - Python --- .../python/adra-dev.py | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/adra-dev.py diff --git a/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/adra-dev.py b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/adra-dev.py new file mode 100644 index 0000000000..b45dc13813 --- /dev/null +++ b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/python/adra-dev.py @@ -0,0 +1,92 @@ +""" +EJERCICIO: +¡Deadpool y Wolverine se enfrentan en una batalla épica! +Crea un programa que simule la pelea y determine un ganador. +El programa simula un combate por turnos, donde cada protagonista posee unos +puntos de vida iniciales, un daño de ataque variable y diferentes cualidades +de regeneración y evasión de ataques. + +Requisitos: +1. El usuario debe determinar la vida inicial de cada protagonista. +2. Cada personaje puede impartir un daño aleatorio: + - Deadpool: Entre 10 y 100. + - Wolverine: Entre 10 y 120. +3. Si el daño es el máximo, el personaje que lo recibe no ataca en el +siguiente turno, ya que tiene que regenerarse (pero no aumenta vida). +4. Cada personaje puede evitar el ataque contrario: + - Deadpool: 25% de posibilidades. + - Wolverine: 20% de posibilidades. +5. Un personaje pierde si sus puntos de vida llegan a cero o menos. + +Acciones: +1. Simula una batalla. +2. Muestra el número del turno (pausa de 1 segundo entre turnos). +3. Muestra qué pasa en cada turno. +4. Muestra la vida en cada turno. +5. Muestra el resultado final. + +by adra-dev +""" +import random +import time + +deadpool_health = int(input("Introduce la vida de Deadpool: ")) +wolverine_health = int(input("Introduce la vida de Wolverine: ")) + +turn = 0 +regenerate = False + +while deadpool_health > 0 and wolverine_health > 0: + + turn +=1 + print(f"\nTurno {turn}") + + # Wolverine ataca a Deadpool + if regenerate: + print("Wolverine se esta regenerado y no ataca.") + regenerate = False + elif random.random() > 0.25: + wolverine_damage = random.randint(10,120) + print(f"Wolverine ataca a Deadpool con {wolverine_damage}.") + if wolverine_damage == 120: + regenerate = True + print("Wolverine critico! Deadpool no atacara en el siguiente turno.") + + deadpool_health -= wolverine_damage + + if deadpool_health <= 0: + print(f"La vida de Deadpool ha llegado a 0.") + break + else: + print(f"Vida restante de Deadpool: {deadpool_health}") + else: + print("Deadpool esquiva el ataque de Wolverine!") + + # Deadpool ataca a Wolverinel + if regenerate: + print("Deadpool se esta regenerado y no ataca.") + regenerate = False + elif random.random() > 0.2: + deadpool_damage = random.randint(10,100) + print(f"Deadpool ataca a Wolverine con {deadpool_damage}.") + if deadpool_damage == 80: + regenerate = True + print("Deadpool critico! Wolverine no atacara en el siguiente turno.") + + wolverine_health -= deadpool_damage + + if wolverine_health <= 0: + print(f"La vida de Wolverine ha llegado a 0.") + break + else: + print(f"Vida restante de Wolverine: {wolverine_health}") + else: + print("Wolverine esquiva el ataque de Deadpool!") + + time.sleep(1) + + +if deadpool_health > 0: + print("Deadpool gana la batalla.") +else: + print("Wolverine gana la batalla.") \ No newline at end of file From 81769defb2fd25c18603a60191ccff8d6212f36b Mon Sep 17 00:00:00 2001 From: adrs1166ma <163654808+adrs1166ma@users.noreply.github.com> Date: Mon, 16 Sep 2024 18:25:57 -0500 Subject: [PATCH 318/539] 03 - php correcion --- .../php/adrs1166ma.php | 31 +++++++------------ 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/php/adrs1166ma.php b/Roadmap/03 - ESTRUCTURAS DE DATOS/php/adrs1166ma.php index 415c91ee2c..5d24f4870b 100644 --- a/Roadmap/03 - ESTRUCTURAS DE DATOS/php/adrs1166ma.php +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/php/adrs1166ma.php @@ -177,15 +177,8 @@ function extra() { global $agenda; while (true) { - echo "/- Agenda de Contactos -/
"; - echo "1. Buscar contacto
"; - echo "2. Insertar contacto
"; - echo "3. Actualizar contacto
"; - echo "4. Eliminar contacto
"; - echo "5. Salir
"; - echo "---------------------------
"; - $opcion = readline("Seleccione una opción (1-5): "); + $opcion = readline("\n\n--------------------------- \n/- Agenda de Contactos -/ \n1. Buscar contacto \n2. Insertar contacto \n3. Actualizar contacto \n4. Eliminar contacto \n5. Salir \n--------------------------- \nSeleccione una opción (1-5): "); switch ($opcion) { case 1: @@ -201,10 +194,10 @@ function extra() { eliminarContacto($agenda); break; case 5: - echo "Saliendo del programa
"; + echo "Saliendo del programa\n"; exit; default: - echo "Inténtelo de nuevo.
"; + echo "Inténtelo de nuevo.\n"; } } } @@ -219,15 +212,15 @@ function buscarContacto($agenda) { foreach ($agenda as $contacto) { if ($contacto['nombre'] === $nombre) { - echo "Nombre: {$contacto['nombre']}
"; - echo "Teléfono: {$contacto['telefono']}
"; + echo "Nombre: {$contacto['nombre']}\n"; + echo "Teléfono: {$contacto['telefono']}\n"; $encontrado = true; break; } } if (!$encontrado) { - echo "Contacto no encontrado.
"; + echo "Contacto no encontrado.\n"; } } @@ -240,7 +233,7 @@ function insertarContacto(&$agenda) { 'telefono' => $telefono ]; - echo "Contacto insertado con éxito.
"; + echo "Contacto insertado con éxito.\n"; } function actualizarContacto(&$agenda) { @@ -250,9 +243,9 @@ function actualizarContacto(&$agenda) { if ($indice !== -1) { $telefono = validarTelefono(); $agenda[$indice]['telefono'] = $telefono; - echo "Contacto actualizado con éxito.
"; + echo "Contacto actualizado con éxito.\n"; } else { - echo "Contacto no encontrado.
"; + echo "Contacto no encontrado.\n"; } } @@ -263,9 +256,9 @@ function eliminarContacto(&$agenda) { if ($indice !== -1) { unset($agenda[$indice]); $agenda = array_values($agenda); - echo "Contacto eliminado con éxito.
"; + echo "Contacto eliminado con éxito.\n"; } else { - echo "Contacto no encontrado.
"; + echo "Contacto no encontrado.\n"; } } @@ -286,7 +279,7 @@ function validarTelefono() { if (ctype_digit($telefono) && strlen($telefono) <= 8) { return $telefono; } else { - echo "Número de teléfono no válido. Inténtelo de nuevo.
"; + echo "Número de teléfono no válido. Inténtelo de nuevo.\n"; } } } From 3889ef5682c2b48e5e0419b5c920b73cb4e8109e Mon Sep 17 00:00:00 2001 From: mouredev Date: Tue, 17 Sep 2024 00:13:03 +0000 Subject: [PATCH 319/539] Update stats --- Roadmap/stats.json | 2297 ++++++++++++++++++++++---------------------- 1 file changed, 1169 insertions(+), 1128 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index 0234cb1734..ca08fe5421 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,13 +1,13 @@ { - "challenges_total": 38, + "challenges_total": 39, "languages_total": 48, - "files_total": 7031, - "users_total": 1178, + "files_total": 7073, + "users_total": 1184, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1282 + "count": 1286 }, { "order": 2, @@ -17,37 +17,37 @@ { "order": 3, "name": "02 - FUNCIONES Y ALCANCE", - "count": 596 + "count": 597 }, { "order": 4, "name": "03 - ESTRUCTURAS DE DATOS", - "count": 402 + "count": 409 }, { "order": 5, "name": "04 - CADENAS DE CARACTERES", - "count": 333 + "count": 339 }, { "order": 6, "name": "06 - RECURSIVIDAD", - "count": 314 + "count": 315 }, { "order": 7, "name": "05 - VALOR Y REFERENCIA", - "count": 288 + "count": 289 }, { "order": 8, "name": "07 - PILAS Y COLAS", - "count": 244 + "count": 245 }, { "order": 9, "name": "08 - CLASES", - "count": 227 + "count": 229 }, { "order": 10, @@ -62,7 +62,7 @@ { "order": 12, "name": "11 - MANEJO DE FICHEROS", - "count": 156 + "count": 157 }, { "order": 13, @@ -77,7 +77,7 @@ { "order": 15, "name": "12 - JSON Y XML", - "count": 129 + "count": 130 }, { "order": 16, @@ -112,7 +112,7 @@ { "order": 22, "name": "21 - CALLBACKS", - "count": 89 + "count": 90 }, { "order": 23, @@ -142,7 +142,7 @@ { "order": 28, "name": "27 - SOLID OCP", - "count": 60 + "count": 61 }, { "order": 29, @@ -167,99 +167,104 @@ { "order": 33, "name": "33 - RESCATANDO A MICKEY", - "count": 43 + "count": 44 }, { "order": 34, - "name": "31 - SIMULADOR JUEGOS OL\u00cdMPICOS", - "count": 40 + "name": "36 - EL SOMBRERO SELECCIONADOR", + "count": 41 }, { "order": 35, - "name": "36 - EL SOMBRERO SELECCIONADOR", - "count": 39 + "name": "31 - SIMULADOR JUEGOS OL\u00cdMPICOS", + "count": 41 }, { "order": 36, "name": "35 - REPARTIENDO LOS ANILLOS DE PODER", - "count": 38 + "count": 40 }, { "order": 37, "name": "34 - \u00c1RBOL GENEAL\u00d3GICO LA CASA DEL DRAG\u00d3N", - "count": 34 + "count": 35 }, { "order": 38, "name": "37 - OASIS VS LINKIN PARK", - "count": 13 + "count": 21 + }, + { + "order": 39, + "name": "38 - MOUREDEV PRO", + "count": 0 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 3029, + "count": 3047, "percentage": 43.08 }, { "order": 2, "name": "javascript", - "count": 1390, - "percentage": 19.77 + "count": 1397, + "percentage": 19.75 }, { "order": 3, "name": "java", - "count": 639, - "percentage": 9.09 + "count": 646, + "percentage": 9.13 }, { "order": 4, "name": "typescript", - "count": 312, - "percentage": 4.44 + "count": 316, + "percentage": 4.47 }, { "order": 5, "name": "c#", - "count": 254, + "count": 255, "percentage": 3.61 }, { "order": 6, "name": "kotlin", "count": 220, - "percentage": 3.13 + "percentage": 3.11 }, { "order": 7, "name": "go", "count": 216, - "percentage": 3.07 + "percentage": 3.05 }, { "order": 8, "name": "swift", "count": 167, - "percentage": 2.38 + "percentage": 2.36 }, { "order": 9, "name": "php", - "count": 156, - "percentage": 2.22 + "count": 158, + "percentage": 2.23 }, { "order": 10, "name": "c++", "count": 117, - "percentage": 1.66 + "percentage": 1.65 }, { "order": 11, "name": "rust", - "count": 113, + "count": 114, "percentage": 1.61 }, { @@ -272,13 +277,13 @@ "order": 13, "name": "dart", "count": 49, - "percentage": 0.7 + "percentage": 0.69 }, { "order": 14, "name": "bash", "count": 44, - "percentage": 0.63 + "percentage": 0.62 }, { "order": 15, @@ -318,31 +323,31 @@ }, { "order": 21, - "name": "cobol", - "count": 11, - "percentage": 0.16 + "name": "sql", + "count": 12, + "percentage": 0.17 }, { "order": 22, - "name": "nasm", + "name": "cobol", "count": 11, "percentage": 0.16 }, { "order": 23, - "name": "julia", - "count": 10, - "percentage": 0.14 + "name": "nasm", + "count": 11, + "percentage": 0.16 }, { "order": 24, - "name": "scala", + "name": "julia", "count": 10, "percentage": 0.14 }, { "order": 25, - "name": "sql", + "name": "scala", "count": 10, "percentage": 0.14 }, @@ -495,7 +500,7 @@ { "order": 2, "name": "kenysdev", - "count": 151, + "count": 152, "languages": 4 }, { @@ -566,55 +571,55 @@ }, { "order": 14, + "name": "eulogioep", + "count": 58, + "languages": 6 + }, + { + "order": 15, "name": "jesusantonioeescamilla", "count": 57, "languages": 3 }, { - "order": 15, + "order": 16, "name": "edalmava", "count": 51, "languages": 16 }, { - "order": 16, + "order": 17, "name": "cesarcarmona30", "count": 51, "languages": 4 }, { - "order": 17, + "order": 18, "name": "amadorquispe", "count": 49, "languages": 2 }, - { - "order": 18, - "name": "eulogioep", - "count": 48, - "languages": 6 - }, { "order": 19, "name": "juanppdev", - "count": 47, + "count": 48, "languages": 3 }, { "order": 20, - "name": "ricjdev", - "count": 47, + "name": "raulg91", + "count": 48, "languages": 2 }, { "order": 21, - "name": "raulg91", - "count": 47, + "name": "jesusway69", + "count": 48, "languages": 2 }, { "order": 22, - "name": "jesusway69", + "name": "ricjdev", "count": 47, "languages": 2 }, @@ -668,100 +673,100 @@ }, { "order": 31, - "name": "luishendrix92", - "count": 37, - "languages": 2 + "name": "oriaj3", + "count": 38, + "languages": 1 }, { "order": 32, - "name": "rauldoezon", - "count": 37, + "name": "mouredev", + "count": 38, "languages": 1 }, { "order": 33, - "name": "emmanuelmmontesinos", + "name": "luishendrix92", "count": 37, - "languages": 1 + "languages": 2 }, { "order": 34, - "name": "mouredev", + "name": "rauldoezon", "count": 37, "languages": 1 }, { "order": 35, - "name": "asjordi", + "name": "emmanuelmmontesinos", "count": 37, "languages": 1 }, { "order": 36, - "name": "n0hagonada", - "count": 36, - "languages": 3 + "name": "asjordi", + "count": 37, + "languages": 1 }, { "order": 37, - "name": "rigo93acosta", + "name": "qv1ko", "count": 36, - "languages": 1 + "languages": 4 }, { "order": 38, - "name": "qv1ko", - "count": 35, - "languages": 4 + "name": "n0hagonada", + "count": 36, + "languages": 3 }, { "order": 39, - "name": "raynerpv2022", - "count": 35, - "languages": 2 + "name": "avcenal", + "count": 36, + "languages": 1 }, { "order": 40, - "name": "soohav", - "count": 35, + "name": "rigo93acosta", + "count": 36, "languages": 1 }, { "order": 41, - "name": "oriaj3", + "name": "raynerpv2022", "count": 35, - "languages": 1 + "languages": 2 }, { "order": 42, + "name": "soohav", + "count": 35, + "languages": 1 + }, + { + "order": 43, "name": "angelsanchezt", "count": 34, "languages": 12 }, { - "order": 43, + "order": 44, "name": "rikmij", "count": 34, "languages": 2 }, { - "order": 44, + "order": 45, "name": "fborjalv", "count": 34, "languages": 1 }, { - "order": 45, + "order": 46, "name": "worlion", "count": 33, "languages": 2 }, - { - "order": 46, - "name": "avcenal", - "count": 33, - "languages": 1 - }, { "order": 47, "name": "juandaherrera", @@ -818,15 +823,15 @@ }, { "order": 56, - "name": "thegera4", - "count": 27, - "languages": 2 + "name": "parababire", + "count": 28, + "languages": 1 }, { "order": 57, - "name": "parababire", + "name": "thegera4", "count": 27, - "languages": 1 + "languages": 2 }, { "order": 58, @@ -944,43 +949,43 @@ }, { "order": 77, - "name": "juandaw37", + "name": "gordo-master", "count": 22, "languages": 1 }, { "order": 78, - "name": "giovanyosorio", - "count": 21, - "languages": 2 + "name": "juandaw37", + "count": 22, + "languages": 1 }, { "order": 79, - "name": "igledev", + "name": "giovanyosorio", "count": 21, - "languages": 1 + "languages": 2 }, { "order": 80, - "name": "davidmoralesdeveloper", + "name": "igledev", "count": 21, "languages": 1 }, { "order": 81, - "name": "gringoam", + "name": "davidmoralesdeveloper", "count": 21, "languages": 1 }, { "order": 82, - "name": "restevean", + "name": "gringoam", "count": 21, "languages": 1 }, { "order": 83, - "name": "gordo-master", + "name": "restevean", "count": 21, "languages": 1 }, @@ -1166,247 +1171,247 @@ }, { "order": 114, + "name": "jesuses1312", + "count": 14, + "languages": 3 + }, + { + "order": 115, "name": "andresgcastillo", "count": 14, "languages": 2 }, { - "order": 115, + "order": 116, "name": "ygriegasb", "count": 14, "languages": 2 }, { - "order": 116, + "order": 117, "name": "gonzadev28", "count": 14, "languages": 2 }, { - "order": 117, + "order": 118, "name": "elmer125", "count": 14, "languages": 1 }, { - "order": 118, + "order": 119, "name": "vincentrodriguezr", "count": 14, "languages": 1 }, { - "order": 119, + "order": 120, "name": "juanchernandezdev", "count": 14, "languages": 1 }, { - "order": 120, + "order": 121, "name": "mikelm2020", "count": 14, "languages": 1 }, { - "order": 121, + "order": 122, "name": "paula2409", "count": 14, "languages": 1 }, { - "order": 122, + "order": 123, "name": "volumidev", "count": 13, "languages": 3 }, { - "order": 123, + "order": 124, "name": "diegoibb", "count": 13, "languages": 3 }, { - "order": 124, + "order": 125, "name": "manjaitan", "count": 13, "languages": 2 }, { - "order": 125, - "name": "jesuses1312", + "order": 126, + "name": "deathwing696", "count": 13, "languages": 2 }, { - "order": 126, + "order": 127, + "name": "7r0n1x", + "count": 13, + "languages": 1 + }, + { + "order": 128, "name": "ocram1304", "count": 13, "languages": 1 }, { - "order": 127, + "order": 129, "name": "dan-corbo", "count": 13, "languages": 1 }, { - "order": 128, + "order": 130, "name": "c-gabs", "count": 13, "languages": 1 }, { - "order": 129, + "order": 131, "name": "jav-mol", "count": 13, "languages": 1 }, { - "order": 130, + "order": 132, "name": "tomu98", "count": 13, "languages": 1 }, { - "order": 131, + "order": 133, "name": "neosv", "count": 13, "languages": 1 }, { - "order": 132, + "order": 134, "name": "julian98789", "count": 13, "languages": 1 }, { - "order": 133, + "order": 135, "name": "juanrcoder", "count": 12, "languages": 2 }, { - "order": 134, + "order": 136, "name": "keltoi-dev", "count": 12, "languages": 2 }, { - "order": 135, + "order": 137, "name": "andresmcardenas", "count": 12, "languages": 2 }, { - "order": 136, + "order": 138, "name": "a-mayans", "count": 12, "languages": 2 }, { - "order": 137, - "name": "deathwing696", - "count": 12, - "languages": 2 - }, - { - "order": 138, + "order": 139, "name": "pancratzia", "count": 12, "languages": 1 }, { - "order": 139, + "order": 140, "name": "jeronimocardu", "count": 12, "languages": 1 }, { - "order": 140, + "order": 141, "name": "evilpotato04", "count": 12, "languages": 1 }, { - "order": 141, + "order": 142, "name": "javierjoyera", "count": 12, "languages": 1 }, { - "order": 142, + "order": 143, "name": "dataciriano", "count": 12, "languages": 1 }, { - "order": 143, + "order": 144, "name": "josealberto13", "count": 12, "languages": 1 }, { - "order": 144, + "order": 145, "name": "clmiranda", "count": 12, "languages": 1 }, { - "order": 145, + "order": 146, "name": "andrewcodev", "count": 12, "languages": 1 }, { - "order": 146, + "order": 147, "name": "javierfiestasbotella", "count": 12, "languages": 1 }, { - "order": 147, + "order": 148, "name": "pipe281", "count": 12, "languages": 1 }, { - "order": 148, + "order": 149, "name": "jchavescaceres", "count": 11, "languages": 2 }, { - "order": 149, + "order": 150, "name": "switchdays", "count": 11, "languages": 2 }, { - "order": 150, + "order": 151, "name": "arkmiguel379", "count": 11, "languages": 2 }, - { - "order": 151, - "name": "ialmontedr0", - "count": 11, - "languages": 1 - }, { "order": 152, - "name": "charlerodriguez3", + "name": "ialmontedr0", "count": 11, "languages": 1 }, { "order": 153, - "name": "oleojake", + "name": "charlerodriguez3", "count": 11, "languages": 1 }, { "order": 154, - "name": "7r0n1x", + "name": "oleojake", "count": 11, "languages": 1 }, @@ -1688,793 +1693,793 @@ }, { "order": 201, - "name": "matitc", + "name": "martinbohorquez", "count": 8, - "languages": 1 + "languages": 2 }, { "order": 202, - "name": "srvariable", + "name": "matitc", "count": 8, "languages": 1 }, { "order": 203, - "name": "isj-code", + "name": "srvariable", "count": 8, "languages": 1 }, { "order": 204, - "name": "westwbn", + "name": "isj-code", "count": 8, "languages": 1 }, { "order": 205, - "name": "jaxi86", + "name": "westwbn", "count": 8, "languages": 1 }, { "order": 206, - "name": "vid92", + "name": "jaxi86", "count": 8, "languages": 1 }, { "order": 207, - "name": "toral24", + "name": "vid92", "count": 8, "languages": 1 }, { "order": 208, - "name": "jtrujilloalcocer", + "name": "toral24", "count": 8, "languages": 1 }, { "order": 209, - "name": "linerlander", + "name": "jtrujilloalcocer", "count": 8, "languages": 1 }, { "order": 210, - "name": "zequy40", + "name": "linerlander", "count": 8, "languages": 1 }, { "order": 211, - "name": "abelperezcollado", + "name": "zequy40", "count": 8, "languages": 1 }, { "order": 212, - "name": "cyberdidac", + "name": "abelperezcollado", "count": 8, "languages": 1 }, { "order": 213, - "name": "bytecodesky", + "name": "cyberdidac", "count": 8, "languages": 1 }, { "order": 214, + "name": "bytecodesky", + "count": 8, + "languages": 1 + }, + { + "order": 215, "name": "darubiano", "count": 7, "languages": 7 }, { - "order": 215, + "order": 216, "name": "cubandeveloper89", "count": 7, "languages": 3 }, { - "order": 216, + "order": 217, "name": "nwpablodeveloper", "count": 7, "languages": 3 }, { - "order": 217, + "order": 218, + "name": "h4ckxel", + "count": 7, + "languages": 2 + }, + { + "order": 219, "name": "danielbelenguer", "count": 7, "languages": 2 }, { - "order": 218, + "order": 220, "name": "younes0-0", "count": 7, "languages": 2 }, { - "order": 219, + "order": 221, "name": "hectordbh", "count": 7, "languages": 1 }, { - "order": 220, + "order": 222, "name": "18miguelgalarza", "count": 7, "languages": 1 }, { - "order": 221, + "order": 223, "name": "marinaortells", "count": 7, "languages": 1 }, { - "order": 222, + "order": 224, "name": "abrahamraies", "count": 7, "languages": 1 }, { - "order": 223, + "order": 225, "name": "ocandodev", "count": 7, "languages": 1 }, { - "order": 224, + "order": 226, "name": "franvozzi", "count": 7, "languages": 1 }, { - "order": 225, + "order": 227, "name": "dgrex", "count": 7, "languages": 1 }, { - "order": 226, + "order": 228, "name": "albertomorilla", "count": 7, "languages": 1 }, { - "order": 227, + "order": 229, "name": "alextc35", "count": 7, "languages": 1 }, { - "order": 228, + "order": 230, "name": "ldre3", "count": 7, "languages": 1 }, { - "order": 229, + "order": 231, "name": "mtirador", "count": 7, "languages": 1 }, { - "order": 230, + "order": 232, "name": "curtobrull", "count": 6, "languages": 3 }, { - "order": 231, + "order": 233, "name": "fidelysla", "count": 6, "languages": 3 }, { - "order": 232, + "order": 234, "name": "adrs1166ma", "count": 6, "languages": 2 }, { - "order": 233, + "order": 235, "name": "devknn", "count": 6, "languages": 2 }, { - "order": 234, - "name": "martinbohorquez", - "count": 6, - "languages": 2 - }, - { - "order": 235, + "order": 236, "name": "danilo0203", "count": 6, "languages": 2 }, { - "order": 236, + "order": 237, "name": "isaias-alt", "count": 6, "languages": 2 }, { - "order": 237, + "order": 238, "name": "luterfloyd", "count": 6, "languages": 2 }, { - "order": 238, + "order": 239, "name": "kronstadt-lambda", "count": 6, "languages": 2 }, { - "order": 239, + "order": 240, "name": "troleomotor10", "count": 6, "languages": 2 }, { - "order": 240, + "order": 241, "name": "oixild", "count": 6, "languages": 2 }, { - "order": 241, + "order": 242, "name": "luisk0706", "count": 6, "languages": 2 }, { - "order": 242, + "order": 243, "name": "rserradev", "count": 6, "languages": 2 }, { - "order": 243, + "order": 244, "name": "roswer13", "count": 6, "languages": 2 }, { - "order": 244, + "order": 245, "name": "glossypath", "count": 6, "languages": 1 }, { - "order": 245, + "order": 246, "name": "guillemduno", "count": 6, "languages": 1 }, { - "order": 246, + "order": 247, "name": "mxtrar23", "count": 6, "languages": 1 }, { - "order": 247, + "order": 248, "name": "dannymarperone", "count": 6, "languages": 1 }, { - "order": 248, + "order": 249, "name": "facundo-muoio", "count": 6, "languages": 1 }, { - "order": 249, + "order": 250, "name": "lazar171717ech", "count": 6, "languages": 1 }, { - "order": 250, + "order": 251, "name": "eduhumanes91", "count": 6, "languages": 1 }, { - "order": 251, + "order": 252, "name": "abascal92", "count": 6, "languages": 1 }, { - "order": 252, + "order": 253, "name": "blancowilson", "count": 6, "languages": 1 }, { - "order": 253, + "order": 254, "name": "eamartin96", "count": 6, "languages": 1 }, { - "order": 254, + "order": 255, "name": "dafi02", "count": 6, "languages": 1 }, { - "order": 255, + "order": 256, "name": "gliadev", "count": 6, "languages": 1 }, { - "order": 256, + "order": 257, "name": "wolffcode", "count": 6, "languages": 1 }, { - "order": 257, + "order": 258, "name": "yeisonagm", "count": 6, "languages": 1 }, { - "order": 258, + "order": 259, "name": "d1d4cum", "count": 6, "languages": 1 }, { - "order": 259, + "order": 260, "name": "bryan112094", "count": 5, "languages": 3 }, { - "order": 260, + "order": 261, "name": "alabacw74", "count": 5, "languages": 3 }, { - "order": 261, + "order": 262, "name": "jalivur", "count": 5, "languages": 2 }, { - "order": 262, + "order": 263, "name": "icedrek", "count": 5, "languages": 2 }, { - "order": 263, + "order": 264, "name": "vmatmarco", "count": 5, "languages": 2 }, { - "order": 264, + "order": 265, "name": "alejandrodave", "count": 5, "languages": 2 }, { - "order": 265, + "order": 266, "name": "espinoleandroo", "count": 5, "languages": 2 }, { - "order": 266, + "order": 267, "name": "andresmendozaf", "count": 5, "languages": 2 }, { - "order": 267, + "order": 268, "name": "eloychavezdev", "count": 5, "languages": 1 }, { - "order": 268, + "order": 269, "name": "drvito1977", "count": 5, "languages": 1 }, { - "order": 269, + "order": 270, "name": "vasilealexandru02", "count": 5, "languages": 1 }, { - "order": 270, + "order": 271, "name": "esaens12", "count": 5, "languages": 1 }, { - "order": 271, + "order": 272, "name": "victormugo", "count": 5, "languages": 1 }, { - "order": 272, + "order": 273, "name": "adridoce", "count": 5, "languages": 1 }, { - "order": 273, + "order": 274, "name": "vixito", "count": 5, "languages": 1 }, { - "order": 274, + "order": 275, "name": "danielbustos342", "count": 5, "languages": 1 }, { - "order": 275, + "order": 276, "name": "douglasdiazr", "count": 5, "languages": 1 }, { - "order": 276, + "order": 277, "name": "n1sek", "count": 5, "languages": 1 }, { - "order": 277, + "order": 278, "name": "robmxz", "count": 5, "languages": 1 }, { - "order": 278, + "order": 279, "name": "d4-n1", "count": 5, "languages": 1 }, { - "order": 279, + "order": 280, "name": "lauracastrillonmp", "count": 5, "languages": 1 }, { - "order": 280, + "order": 281, "name": "joanfv-git", "count": 5, "languages": 1 }, { - "order": 281, + "order": 282, "name": "yharyarias", "count": 5, "languages": 1 }, { - "order": 282, + "order": 283, "name": "jorgeadamowicz", "count": 5, "languages": 1 }, { - "order": 283, + "order": 284, "name": "franz-arzapalo", "count": 5, "languages": 1 }, { - "order": 284, + "order": 285, "name": "d0ubt0", "count": 5, "languages": 1 }, { - "order": 285, + "order": 286, "name": "gmbarrios", "count": 5, "languages": 1 }, { - "order": 286, + "order": 287, "name": "santiago434c", "count": 5, "languages": 1 }, { - "order": 287, + "order": 288, "name": "augustdev2003", "count": 5, "languages": 1 }, { - "order": 288, + "order": 289, "name": "alberba", "count": 5, "languages": 1 }, { - "order": 289, + "order": 290, "name": "gabrielramos02", "count": 5, "languages": 1 }, { - "order": 290, + "order": 291, "name": "thezhizn", "count": 5, "languages": 1 }, { - "order": 291, + "order": 292, "name": "jose-luis-lanza", "count": 5, "languages": 1 }, { - "order": 292, + "order": 293, "name": "nomellamodante", "count": 5, "languages": 1 }, { - "order": 293, + "order": 294, "name": "karolle", "count": 5, "languages": 1 }, { - "order": 294, + "order": 295, "name": "jcrodmir", "count": 5, "languages": 1 }, { - "order": 295, + "order": 296, "name": "alvarofernandezavalos", "count": 5, "languages": 1 }, { - "order": 296, + "order": 297, "name": "lucasag01", "count": 5, "languages": 1 }, { - "order": 297, + "order": 298, "name": "thaishdz", "count": 5, "languages": 1 }, { - "order": 298, + "order": 299, "name": "bastianalq", "count": 5, "languages": 1 }, { - "order": 299, + "order": 300, "name": "w00k", "count": 5, "languages": 1 }, { - "order": 300, + "order": 301, "name": "mohamedelderkaoui", "count": 5, "languages": 1 }, { - "order": 301, + "order": 302, "name": "boterop", "count": 5, "languages": 1 }, { - "order": 302, + "order": 303, "name": "rafacv23", "count": 5, "languages": 1 }, { - "order": 303, + "order": 304, "name": "zarakilancelot", "count": 4, "languages": 3 }, { - "order": 304, + "order": 305, "name": "eonozux", "count": 4, "languages": 2 }, { - "order": 305, + "order": 306, "name": "yablik", "count": 4, "languages": 2 }, { - "order": 306, + "order": 307, "name": "fullovellas", "count": 4, "languages": 2 }, { - "order": 307, + "order": 308, "name": "k3nvd", "count": 4, "languages": 2 }, { - "order": 308, + "order": 309, "name": "josefuentes-dev", "count": 4, "languages": 2 }, { - "order": 309, + "order": 310, "name": "willr30", "count": 4, "languages": 2 }, { - "order": 310, + "order": 311, "name": "ruthmp", "count": 4, "languages": 2 }, { - "order": 311, + "order": 312, "name": "daeduol", "count": 4, "languages": 2 }, { - "order": 312, + "order": 313, "name": "mendozalz", "count": 4, "languages": 2 }, { - "order": 313, + "order": 314, "name": "salkalero", "count": 4, "languages": 2 }, - { - "order": 314, - "name": "elhacedordecosas", - "count": 4, - "languages": 1 - }, { "order": 315, - "name": "andeveling", + "name": "elhacedordecosas", "count": 4, "languages": 1 }, { "order": 316, - "name": "santiago-munoz-garcia", + "name": "andeveling", "count": 4, "languages": 1 }, { "order": 317, - "name": "deivitdev", + "name": "santiago-munoz-garcia", "count": 4, "languages": 1 }, { "order": 318, - "name": "joshbaez", + "name": "deivitdev", "count": 4, "languages": 1 }, { "order": 319, - "name": "marcoslombardo", + "name": "joshbaez", "count": 4, "languages": 1 }, { "order": 320, - "name": "lrpeset", + "name": "marcoslombardo", "count": 4, "languages": 1 }, { "order": 321, - "name": "dieswae", + "name": "lrpeset", "count": 4, "languages": 1 }, { "order": 322, - "name": "mateo423", + "name": "dieswae", "count": 4, "languages": 1 }, { "order": 323, - "name": "joaquinlopez14", + "name": "mateo423", "count": 4, "languages": 1 }, { "order": 324, - "name": "angelurrutdev", + "name": "joaquinlopez14", "count": 4, "languages": 1 }, { "order": 325, - "name": "elianisdev", + "name": "angelurrutdev", "count": 4, "languages": 1 }, { "order": 326, - "name": "omegatroy", + "name": "elianisdev", "count": 4, "languages": 1 }, { "order": 327, - "name": "socramwd", + "name": "omegatroy", "count": 4, "languages": 1 }, { "order": 328, - "name": "carzep09", + "name": "socramwd", "count": 4, "languages": 1 }, { "order": 329, - "name": "mayerga", + "name": "carzep09", "count": 4, "languages": 1 }, { "order": 330, - "name": "hugovrc", + "name": "mayerga", "count": 4, "languages": 1 }, { "order": 331, - "name": "cdbiancotti", + "name": "hugovrc", "count": 4, "languages": 1 }, { "order": 332, - "name": "h4ckxel", + "name": "cdbiancotti", "count": 4, "languages": 1 }, @@ -2648,2041 +2653,2041 @@ }, { "order": 361, - "name": "abel-ade", + "name": "password1989", "count": 4, "languages": 1 }, { "order": 362, - "name": "jairo-alejandro", + "name": "abel-ade", "count": 4, "languages": 1 }, { "order": 363, - "name": "sbs24", + "name": "jairo-alejandro", "count": 4, "languages": 1 }, { "order": 364, - "name": "traver79", + "name": "sbs24", "count": 4, "languages": 1 }, { "order": 365, - "name": "ramxv", + "name": "traver79", "count": 4, "languages": 1 }, { "order": 366, - "name": "inkhemi", + "name": "ramxv", "count": 4, "languages": 1 }, { "order": 367, - "name": "juperdev", + "name": "inkhemi", "count": 4, "languages": 1 }, { "order": 368, - "name": "abelsrzz", - "count": 3, - "languages": 3 + "name": "juperdev", + "count": 4, + "languages": 1 }, { "order": 369, - "name": "angelo-eyama", + "name": "abelsrzz", "count": 3, "languages": 3 }, { "order": 370, - "name": "akaisombra", + "name": "angelo-eyama", "count": 3, "languages": 3 }, { "order": 371, - "name": "oskarcali", + "name": "akaisombra", "count": 3, "languages": 3 }, { "order": 372, - "name": "owen-ian", + "name": "oskarcali", "count": 3, "languages": 3 }, { "order": 373, - "name": "jehiselruth", + "name": "owen-ian", "count": 3, "languages": 3 }, { "order": 374, - "name": "n-skot", + "name": "jehiselruth", "count": 3, - "languages": 2 + "languages": 3 }, { "order": 375, - "name": "clotrack", + "name": "n-skot", "count": 3, "languages": 2 }, { "order": 376, - "name": "dimasb69", + "name": "clotrack", "count": 3, "languages": 2 }, { "order": 377, - "name": "alfarog507", + "name": "dimasb69", "count": 3, "languages": 2 }, { "order": 378, - "name": "eloitr", + "name": "alfarog507", "count": 3, "languages": 2 }, { "order": 379, - "name": "diegopc-dev", + "name": "eloitr", "count": 3, "languages": 2 }, { "order": 380, - "name": "robindev1812", + "name": "diegopc-dev", "count": 3, "languages": 2 }, { "order": 381, - "name": "arliumdev", + "name": "robindev1812", "count": 3, "languages": 2 }, { "order": 382, - "name": "skala2301", + "name": "arliumdev", "count": 3, "languages": 2 }, { "order": 383, - "name": "pablotaber", + "name": "skala2301", "count": 3, "languages": 2 }, { "order": 384, - "name": "allanoscoding", + "name": "pablotaber", "count": 3, "languages": 2 }, { "order": 385, - "name": "seba9906", + "name": "allanoscoding", "count": 3, "languages": 2 }, { "order": 386, - "name": "augustosdev", + "name": "seba9906", "count": 3, "languages": 2 }, { "order": 387, - "name": "dylanb55", + "name": "augustosdev", "count": 3, - "languages": 1 + "languages": 2 }, { "order": 388, - "name": "mellamoomar", + "name": "dylanb55", "count": 3, "languages": 1 }, { "order": 389, - "name": "oscar503sv", + "name": "mellamoomar", "count": 3, "languages": 1 }, { "order": 390, - "name": "alejomazov", + "name": "oscar503sv", "count": 3, "languages": 1 }, { "order": 391, - "name": "bryanalzate007", + "name": "alejomazov", "count": 3, "languages": 1 }, { "order": 392, - "name": "ivanpelu7", + "name": "bryanalzate007", "count": 3, "languages": 1 }, { "order": 393, - "name": "dmauricio4", + "name": "ivanpelu7", "count": 3, "languages": 1 }, { "order": 394, - "name": "davidr1594", + "name": "dmauricio4", "count": 3, "languages": 1 }, { "order": 395, - "name": "vandresca", + "name": "davidr1594", "count": 3, "languages": 1 }, { "order": 396, - "name": "marlonleon2023", + "name": "vandresca", "count": 3, "languages": 1 }, { "order": 397, - "name": "nikorasu-d", + "name": "marlonleon2023", "count": 3, "languages": 1 }, { "order": 398, - "name": "barbafebles", + "name": "nikorasu-d", "count": 3, "languages": 1 }, { "order": 399, - "name": "heliercamejo", + "name": "barbafebles", "count": 3, "languages": 1 }, { "order": 400, - "name": "aggranadoss", + "name": "heliercamejo", "count": 3, "languages": 1 }, { "order": 401, - "name": "dannyvera1234", + "name": "aggranadoss", "count": 3, "languages": 1 }, { "order": 402, - "name": "axelsparta", + "name": "dannyvera1234", "count": 3, "languages": 1 }, { "order": 403, - "name": "gitperalta", + "name": "axelsparta", "count": 3, "languages": 1 }, { "order": 404, - "name": "samuelarandia", + "name": "gitperalta", "count": 3, "languages": 1 }, { "order": 405, - "name": "jaimerocel96", + "name": "samuelarandia", "count": 3, "languages": 1 }, { "order": 406, - "name": "sitnestic", + "name": "jaimerocel96", "count": 3, "languages": 1 }, { "order": 407, - "name": "matteozhao98", + "name": "sitnestic", "count": 3, "languages": 1 }, { "order": 408, - "name": "tebaah", + "name": "matteozhao98", "count": 3, "languages": 1 }, { "order": 409, - "name": "sebasgrdev", + "name": "tebaah", "count": 3, "languages": 1 }, { "order": 410, - "name": "14davidnkt", + "name": "sebasgrdev", "count": 3, "languages": 1 }, { "order": 411, - "name": "legs30011", + "name": "14davidnkt", "count": 3, "languages": 1 }, { "order": 412, - "name": "dariorfm", + "name": "legs30011", "count": 3, "languages": 1 }, { "order": 413, - "name": "orlas135", + "name": "dariorfm", "count": 3, "languages": 1 }, { "order": 414, - "name": "arbenisacosta", + "name": "orlas135", "count": 3, "languages": 1 }, { "order": 415, - "name": "hectoriglesias", + "name": "arbenisacosta", "count": 3, "languages": 1 }, { "order": 416, - "name": "matrix-miguel", + "name": "hectoriglesias", "count": 3, "languages": 1 }, { "order": 417, - "name": "jacarrillob", + "name": "matrix-miguel", "count": 3, "languages": 1 }, { "order": 418, - "name": "jelozanov", + "name": "jacarrillob", "count": 3, "languages": 1 }, { "order": 419, - "name": "andyfg0289", + "name": "jelozanov", "count": 3, "languages": 1 }, { "order": 420, - "name": "daniback95", + "name": "andyfg0289", "count": 3, "languages": 1 }, { "order": 421, - "name": "r4kso", + "name": "daniback95", "count": 3, "languages": 1 }, { "order": 422, - "name": "singularpigeon", + "name": "r4kso", "count": 3, "languages": 1 }, { "order": 423, - "name": "sandracalatayud", + "name": "singularpigeon", "count": 3, "languages": 1 }, { "order": 424, - "name": "andresargote", + "name": "sandracalatayud", "count": 3, "languages": 1 }, { "order": 425, - "name": "fernandog25", + "name": "andresargote", "count": 3, "languages": 1 }, { "order": 426, - "name": "agusbelp", + "name": "fernandog25", "count": 3, "languages": 1 }, { "order": 427, - "name": "uyarra73", + "name": "agusbelp", "count": 3, "languages": 1 }, { "order": 428, - "name": "asaelz", + "name": "uyarra73", "count": 3, "languages": 1 }, { "order": 429, - "name": "davidb313", + "name": "asaelz", "count": 3, "languages": 1 }, { "order": 430, - "name": "fdcorreadev", + "name": "davidb313", "count": 3, "languages": 1 }, { "order": 431, - "name": "magupe09", + "name": "fdcorreadev", "count": 3, "languages": 1 }, { "order": 432, - "name": "nathaliamf", + "name": "magupe09", "count": 3, "languages": 1 }, { "order": 433, - "name": "victorsschz", + "name": "nathaliamf", "count": 3, "languages": 1 }, { "order": 434, - "name": "hatorob", + "name": "victorsschz", "count": 3, "languages": 1 }, { "order": 435, - "name": "zuluangel", + "name": "hatorob", "count": 3, "languages": 1 }, { "order": 436, - "name": "matiascba27", + "name": "zuluangel", "count": 3, "languages": 1 }, { "order": 437, - "name": "faga01", + "name": "matiascba27", "count": 3, "languages": 1 }, { "order": 438, - "name": "ahinar", + "name": "faga01", "count": 3, "languages": 1 }, { "order": 439, - "name": "migueltfangche", + "name": "ahinar", "count": 3, "languages": 1 }, { "order": 440, - "name": "duendeintemporal", + "name": "migueltfangche", "count": 3, "languages": 1 }, { "order": 441, - "name": "josueeeee", + "name": "erysnell", "count": 3, "languages": 1 }, { "order": 442, - "name": "emaenriquez", + "name": "duendeintemporal", "count": 3, "languages": 1 }, { "order": 443, - "name": "sebascmb", + "name": "josueeeee", "count": 3, "languages": 1 }, { "order": 444, - "name": "gpinedaoviedo", + "name": "emaenriquez", "count": 3, "languages": 1 }, { "order": 445, - "name": "blfuentes", + "name": "sebascmb", "count": 3, "languages": 1 }, { "order": 446, - "name": "javiearth", + "name": "gpinedaoviedo", "count": 3, "languages": 1 }, { "order": 447, - "name": "atienzar", + "name": "blfuentes", "count": 3, "languages": 1 }, { "order": 448, - "name": "coshiloco", + "name": "javiearth", "count": 3, "languages": 1 }, { "order": 449, - "name": "crisvigas", + "name": "atienzar", "count": 3, "languages": 1 }, { "order": 450, - "name": "tomytsa", + "name": "coshiloco", "count": 3, "languages": 1 }, { "order": 451, - "name": "rocallejas", + "name": "crisvigas", "count": 3, "languages": 1 }, { "order": 452, - "name": "guido2288", + "name": "tomytsa", "count": 3, "languages": 1 }, { "order": 453, - "name": "githjuan", + "name": "rocallejas", "count": 3, "languages": 1 }, { "order": 454, - "name": "jeyker-dev", + "name": "guido2288", "count": 3, "languages": 1 }, { "order": 455, - "name": "eliskopun", + "name": "githjuan", "count": 3, "languages": 1 }, { "order": 456, - "name": "ramon-almeida", + "name": "jeyker-dev", "count": 3, "languages": 1 }, { "order": 457, - "name": "danielperezrubio", + "name": "eliskopun", "count": 3, "languages": 1 }, { "order": 458, - "name": "minn09", + "name": "ramon-almeida", "count": 3, "languages": 1 }, { "order": 459, - "name": "elkin-dev", + "name": "danielperezrubio", "count": 3, "languages": 1 }, { "order": 460, - "name": "bertolini-victor", + "name": "minn09", "count": 3, "languages": 1 }, { "order": 461, - "name": "jorgegarcia-dev", + "name": "elkin-dev", "count": 3, "languages": 1 }, { "order": 462, - "name": "suescun845", + "name": "bertolini-victor", "count": 3, "languages": 1 }, { "order": 463, - "name": "carlosalberto05", + "name": "jorgegarcia-dev", "count": 3, "languages": 1 }, { "order": 464, - "name": "mmacalli", + "name": "suescun845", "count": 3, "languages": 1 }, { "order": 465, - "name": "ggtorca", + "name": "carlosalberto05", "count": 3, "languages": 1 }, { "order": 466, - "name": "mstaz4", + "name": "mmacalli", "count": 3, "languages": 1 }, { "order": 467, - "name": "emilianohoyos", + "name": "ggtorca", "count": 3, "languages": 1 }, { "order": 468, - "name": "rgeditv1", + "name": "mstaz4", "count": 3, "languages": 1 }, { "order": 469, - "name": "elder202", + "name": "emilianohoyos", "count": 3, "languages": 1 }, { "order": 470, - "name": "dandrusco", + "name": "rgeditv1", "count": 3, "languages": 1 }, { "order": 471, - "name": "mizadlogcia", + "name": "elder202", "count": 3, "languages": 1 }, { "order": 472, - "name": "antii16", + "name": "dandrusco", "count": 3, "languages": 1 }, { "order": 473, - "name": "strooplab", + "name": "mizadlogcia", "count": 3, "languages": 1 }, { "order": 474, - "name": "marcoh2325", + "name": "antii16", "count": 3, "languages": 1 }, { "order": 475, - "name": "frostbitepy", + "name": "strooplab", "count": 3, "languages": 1 }, { "order": 476, - "name": "zzepu", + "name": "marcoh2325", "count": 3, "languages": 1 }, { "order": 477, - "name": "tekatoki", + "name": "frostbitepy", "count": 3, "languages": 1 }, { "order": 478, - "name": "yeam-10", + "name": "zzepu", "count": 3, "languages": 1 }, { "order": 479, - "name": "exanderguitar", + "name": "tekatoki", "count": 3, "languages": 1 }, { "order": 480, - "name": "camilo-zuluaga", + "name": "yeam-10", "count": 3, "languages": 1 }, { "order": 481, - "name": "macova96", + "name": "exanderguitar", "count": 3, "languages": 1 }, { "order": 482, - "name": "betzadev", + "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { "order": 483, - "name": "monikgbar", + "name": "macova96", "count": 3, "languages": 1 }, { "order": 484, - "name": "guillesese", + "name": "betzadev", "count": 3, "languages": 1 }, { "order": 485, - "name": "artdugarte", + "name": "monikgbar", "count": 3, "languages": 1 }, { "order": 486, - "name": "jofedev", + "name": "guillesese", "count": 3, "languages": 1 }, { "order": 487, - "name": "oscarhub90", + "name": "artdugarte", "count": 3, "languages": 1 }, { "order": 488, - "name": "tonywarcode", + "name": "jofedev", "count": 3, "languages": 1 }, { "order": 489, - "name": "oscargeovannyrincon", + "name": "oscarhub90", "count": 3, "languages": 1 }, { "order": 490, - "name": "joandevpy", + "name": "tonywarcode", "count": 3, "languages": 1 }, { "order": 491, - "name": "estelacode", + "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { "order": 492, - "name": "xurxogz", + "name": "joandevpy", "count": 3, "languages": 1 }, { "order": 493, - "name": "freedainew", + "name": "estelacode", "count": 3, "languages": 1 }, { "order": 494, - "name": "swifty0705", + "name": "xurxogz", "count": 3, "languages": 1 }, { "order": 495, - "name": "marce1084", + "name": "freedainew", "count": 3, "languages": 1 }, { "order": 496, - "name": "rubioj17", + "name": "swifty0705", "count": 3, "languages": 1 }, { "order": 497, - "name": "kingsaul22", + "name": "marce1084", "count": 3, "languages": 1 }, { "order": 498, - "name": "ainoaran", + "name": "rubioj17", "count": 3, "languages": 1 }, { "order": 499, - "name": "francofmv", + "name": "kingsaul22", "count": 3, "languages": 1 }, { "order": 500, - "name": "marianoemir", + "name": "ainoaran", "count": 3, "languages": 1 }, { "order": 501, - "name": "davidsorroche", + "name": "francofmv", "count": 3, "languages": 1 }, { "order": 502, - "name": "david-quinones", + "name": "marianoemir", "count": 3, "languages": 1 }, { "order": 503, - "name": "fluna29", + "name": "davidsorroche", "count": 3, "languages": 1 }, { "order": 504, - "name": "natalinacn", + "name": "david-quinones", "count": 3, "languages": 1 }, { "order": 505, - "name": "kine-jdf", + "name": "fluna29", "count": 3, "languages": 1 }, { "order": 506, - "name": "yaretzyrb", + "name": "natalinacn", "count": 3, "languages": 1 }, { "order": 507, - "name": "password1989", + "name": "kine-jdf", "count": 3, "languages": 1 }, { "order": 508, - "name": "confley", + "name": "yaretzyrb", "count": 3, "languages": 1 }, { "order": 509, - "name": "beonzj", + "name": "confley", "count": 3, "languages": 1 }, { "order": 510, - "name": "mantaras96", + "name": "beonzj", "count": 3, "languages": 1 }, { "order": 511, - "name": "juxxon23", + "name": "davidvilem", "count": 3, "languages": 1 }, { "order": 512, - "name": "frangarmez21", + "name": "mantaras96", "count": 3, "languages": 1 }, { "order": 513, - "name": "ikeragi05", + "name": "juxxon23", "count": 3, "languages": 1 }, { "order": 514, - "name": "johnalexguerrero", + "name": "frangarmez21", "count": 3, "languages": 1 }, { "order": 515, - "name": "devvdroid01", - "count": 2, - "languages": 2 + "name": "ikeragi05", + "count": 3, + "languages": 1 }, { "order": 516, - "name": "sgb004", - "count": 2, - "languages": 2 + "name": "johnalexguerrero", + "count": 3, + "languages": 1 }, { "order": 517, - "name": "chuanmi", + "name": "devvdroid01", "count": 2, "languages": 2 }, { "order": 518, - "name": "jlcareglio", + "name": "sgb004", "count": 2, "languages": 2 }, { "order": 519, - "name": "jurgen-alfaro", + "name": "chuanmi", "count": 2, "languages": 2 }, { "order": 520, - "name": "lydaf", + "name": "jlcareglio", "count": 2, "languages": 2 }, { "order": 521, - "name": "carresoft", + "name": "jurgen-alfaro", "count": 2, "languages": 2 }, { "order": 522, - "name": "ismaelmatiz", + "name": "lydaf", "count": 2, "languages": 2 }, { "order": 523, - "name": "tecfer", + "name": "carresoft", "count": 2, "languages": 2 }, { "order": 524, - "name": "elsanty08", + "name": "ismaelmatiz", "count": 2, "languages": 2 }, { "order": 525, - "name": "jorgesilencio", + "name": "tecfer", "count": 2, "languages": 2 }, { "order": 526, - "name": "berentolkien", + "name": "elsanty08", "count": 2, "languages": 2 }, { "order": 527, - "name": "felipedev303", + "name": "jorgesilencio", "count": 2, "languages": 2 }, { "order": 528, - "name": "lemito66", + "name": "berentolkien", "count": 2, "languages": 2 }, { "order": 529, - "name": "alexsamboy", + "name": "felipedev303", "count": 2, "languages": 2 }, { "order": 530, - "name": "enrgarvic", + "name": "lemito66", "count": 2, "languages": 2 }, { "order": 531, - "name": "jovany-java", + "name": "alexsamboy", "count": 2, "languages": 2 }, { "order": 532, - "name": "raul-progr", + "name": "enrgarvic", "count": 2, "languages": 2 }, { "order": 533, - "name": "jmofuture", + "name": "jovany-java", "count": 2, "languages": 2 }, { "order": 534, - "name": "angel-alvarez-dev", + "name": "raul-progr", "count": 2, "languages": 2 }, { "order": 535, - "name": "lilberick", + "name": "jmofuture", "count": 2, "languages": 2 }, { "order": 536, - "name": "camiloforero1997", + "name": "angel-alvarez-dev", "count": 2, "languages": 2 }, { "order": 537, - "name": "alejosor", + "name": "lilberick", "count": 2, "languages": 2 }, { "order": 538, - "name": "juan-wills", + "name": "camiloforero1997", "count": 2, "languages": 2 }, { "order": 539, - "name": "lurtur", + "name": "alejosor", "count": 2, "languages": 2 }, { "order": 540, - "name": "jhonatanmustiolacas", + "name": "juan-wills", "count": 2, "languages": 2 }, { "order": 541, - "name": "elmarqueli", + "name": "lurtur", "count": 2, - "languages": 1 + "languages": 2 }, { "order": 542, - "name": "tiaguiito3", + "name": "jhonatanmustiolacas", "count": 2, - "languages": 1 + "languages": 2 }, { "order": 543, - "name": "angelargumedo", + "name": "elmarqueli", "count": 2, "languages": 1 }, { "order": 544, - "name": "reaien", + "name": "tiaguiito3", "count": 2, "languages": 1 }, { "order": 545, - "name": "rikar20", + "name": "angelargumedo", "count": 2, "languages": 1 }, { "order": 546, - "name": "vdroiid", + "name": "reaien", "count": 2, "languages": 1 }, { "order": 547, - "name": "frannmv", + "name": "rikar20", "count": 2, "languages": 1 }, { "order": 548, - "name": "rrcoder", + "name": "vdroiid", "count": 2, "languages": 1 }, { "order": 549, - "name": "diegosilval", + "name": "frannmv", "count": 2, "languages": 1 }, { "order": 550, - "name": "nandaalf", + "name": "rrcoder", "count": 2, "languages": 1 }, { "order": 551, - "name": "hawkbott", + "name": "diegosilval", "count": 2, "languages": 1 }, { "order": 552, - "name": "tomasmarquez81", + "name": "nandaalf", "count": 2, "languages": 1 }, { "order": 553, - "name": "poetry0354", + "name": "hawkbott", "count": 2, "languages": 1 }, { "order": 554, - "name": "santiagocuevas2003", + "name": "tomasmarquez81", "count": 2, "languages": 1 }, { "order": 555, - "name": "lmedina96", + "name": "poetry0354", "count": 2, "languages": 1 }, { "order": 556, - "name": "lorenamesa", + "name": "santiagocuevas2003", "count": 2, "languages": 1 }, { "order": 557, - "name": "raulallue", + "name": "lmedina96", "count": 2, "languages": 1 }, { "order": 558, - "name": "luciarf", + "name": "lorenamesa", "count": 2, "languages": 1 }, { "order": 559, - "name": "aserranot", + "name": "raulallue", "count": 2, "languages": 1 }, { "order": 560, - "name": "devcherry1", + "name": "luciarf", "count": 2, "languages": 1 }, { "order": 561, - "name": "yowcloud", + "name": "aserranot", "count": 2, "languages": 1 }, { "order": 562, - "name": "fefestuve", + "name": "devcherry1", "count": 2, "languages": 1 }, { "order": 563, - "name": "fsfigueroa77", + "name": "yowcloud", "count": 2, "languages": 1 }, { "order": 564, - "name": "nahuelborromeo", + "name": "fefestuve", "count": 2, "languages": 1 }, { "order": 565, - "name": "peibolstrike", + "name": "fsfigueroa77", "count": 2, "languages": 1 }, { "order": 566, - "name": "dararod", + "name": "nahuelborromeo", "count": 2, "languages": 1 }, { "order": 567, - "name": "navarroemiliano", + "name": "peibolstrike", "count": 2, "languages": 1 }, { "order": 568, - "name": "waldid32", + "name": "dararod", "count": 2, "languages": 1 }, { "order": 569, - "name": "reanthonyh", + "name": "navarroemiliano", "count": 2, "languages": 1 }, { "order": 570, - "name": "roilhi", + "name": "waldid32", "count": 2, "languages": 1 }, { "order": 571, - "name": "cristiansystem", + "name": "reanthonyh", "count": 2, "languages": 1 }, { "order": 572, - "name": "evelynnobile", + "name": "roilhi", "count": 2, "languages": 1 }, { "order": 573, - "name": "nicolastapiasanz", + "name": "cristiansystem", "count": 2, "languages": 1 }, { "order": 574, - "name": "gomezcamilo9701", + "name": "evelynnobile", "count": 2, "languages": 1 }, { "order": 575, - "name": "vicgallego", + "name": "nicolastapiasanz", "count": 2, "languages": 1 }, { "order": 576, - "name": "freddyasierraj", + "name": "gomezcamilo9701", "count": 2, "languages": 1 }, { "order": 577, - "name": "luis-vb", + "name": "vicgallego", "count": 2, "languages": 1 }, { "order": 578, - "name": "vikkanh", + "name": "freddyasierraj", "count": 2, "languages": 1 }, { "order": 579, - "name": "juaruibr", + "name": "luis-vb", "count": 2, "languages": 1 }, { "order": 580, - "name": "crisdev3", + "name": "vikkanh", "count": 2, "languages": 1 }, { "order": 581, - "name": "frealexandro", + "name": "juaruibr", "count": 2, "languages": 1 }, { "order": 582, - "name": "gamitocu", + "name": "crisdev3", "count": 2, "languages": 1 }, { "order": 583, - "name": "saracorraless", + "name": "frealexandro", "count": 2, "languages": 1 }, { "order": 584, - "name": "cesarocbu", + "name": "gamitocu", "count": 2, "languages": 1 }, { "order": 585, - "name": "jeisonredondo", + "name": "saracorraless", "count": 2, "languages": 1 }, { "order": 586, - "name": "alanox1", + "name": "cesarocbu", "count": 2, "languages": 1 }, { "order": 587, - "name": "christianumb", + "name": "jeisonredondo", "count": 2, "languages": 1 }, { "order": 588, - "name": "jhonf1992", + "name": "alanox1", "count": 2, "languages": 1 }, { "order": 589, - "name": "k4rv3r", + "name": "christianumb", "count": 2, "languages": 1 }, { "order": 590, - "name": "rikar2o", + "name": "jhonf1992", "count": 2, "languages": 1 }, { "order": 591, - "name": "rolo27s", + "name": "k4rv3r", "count": 2, "languages": 1 }, { "order": 592, - "name": "franciscocuminilondero", + "name": "rikar2o", "count": 2, "languages": 1 }, { "order": 593, - "name": "wesborland-github", + "name": "rolo27s", "count": 2, "languages": 1 }, { "order": 594, - "name": "doblea74", + "name": "franciscocuminilondero", "count": 2, "languages": 1 }, { "order": 595, - "name": "matiasfarfan89", + "name": "wesborland-github", "count": 2, "languages": 1 }, { "order": 596, - "name": "nxl22", + "name": "doblea74", "count": 2, "languages": 1 }, { "order": 597, - "name": "valeriatorrealba", + "name": "matiasfarfan89", "count": 2, "languages": 1 }, { "order": 598, - "name": "farthaz", + "name": "nxl22", "count": 2, "languages": 1 }, { "order": 599, - "name": "aleoe01", + "name": "valeriatorrealba", "count": 2, "languages": 1 }, { "order": 600, - "name": "jaimemunozdev", + "name": "farthaz", "count": 2, "languages": 1 }, { "order": 601, - "name": "miguelrejon96", + "name": "aleoe01", "count": 2, "languages": 1 }, { "order": 602, - "name": "jorge186414", + "name": "jaimemunozdev", "count": 2, "languages": 1 }, { "order": 603, - "name": "andnikdev", + "name": "miguelrejon96", "count": 2, "languages": 1 }, { "order": 604, - "name": "soldochris", + "name": "jorge186414", "count": 2, "languages": 1 }, { "order": 605, - "name": "leonardo291024", + "name": "andnikdev", "count": 2, "languages": 1 }, { "order": 606, - "name": "mickel-arroz", + "name": "soldochris", "count": 2, "languages": 1 }, { "order": 607, - "name": "gianbordon", + "name": "leonardo291024", "count": 2, "languages": 1 }, { "order": 608, - "name": "cpcarlosprieto", + "name": "mickel-arroz", "count": 2, "languages": 1 }, { "order": 609, - "name": "juangomezn", + "name": "gianbordon", "count": 2, "languages": 1 }, { "order": 610, - "name": "angelvelasco1", + "name": "cpcarlosprieto", "count": 2, "languages": 1 }, { "order": 611, - "name": "ssanjua", + "name": "juangomezn", "count": 2, "languages": 1 }, { "order": 612, - "name": "murquisdev", + "name": "angelvelasco1", "count": 2, "languages": 1 }, { "order": 613, - "name": "erysnell", + "name": "ssanjua", "count": 2, "languages": 1 }, { "order": 614, - "name": "davhage", + "name": "murquisdev", "count": 2, "languages": 1 }, { "order": 615, - "name": "erikayeah", + "name": "davhage", "count": 2, "languages": 1 }, { "order": 616, - "name": "misterdan100", + "name": "erikayeah", "count": 2, "languages": 1 }, { "order": 617, - "name": "memogv", + "name": "misterdan100", "count": 2, "languages": 1 }, { "order": 618, - "name": "glaboryp", + "name": "memogv", "count": 2, "languages": 1 }, { "order": 619, - "name": "ovjohn", + "name": "glaboryp", "count": 2, "languages": 1 }, { "order": 620, - "name": "haryblanco20", + "name": "ovjohn", "count": 2, "languages": 1 }, { "order": 621, - "name": "christianhernandezb", + "name": "haryblanco20", "count": 2, "languages": 1 }, { "order": 622, - "name": "akzorla", + "name": "christianhernandezb", "count": 2, "languages": 1 }, { "order": 623, - "name": "0pio", + "name": "akzorla", "count": 2, "languages": 1 }, { "order": 624, - "name": "whiterunjarl", + "name": "0pio", "count": 2, "languages": 1 }, { "order": 625, - "name": "porto1090", + "name": "whiterunjarl", "count": 2, "languages": 1 }, { "order": 626, - "name": "johannhsdev", + "name": "porto1090", "count": 2, "languages": 1 }, { "order": 627, - "name": "jago86", + "name": "johannhsdev", "count": 2, "languages": 1 }, { "order": 628, - "name": "diegokarabin", + "name": "jago86", "count": 2, "languages": 1 }, { "order": 629, - "name": "gugliio", + "name": "diegokarabin", "count": 2, "languages": 1 }, { "order": 630, - "name": "kcx46", + "name": "gugliio", "count": 2, "languages": 1 }, { "order": 631, - "name": "nachodev7", + "name": "kcx46", "count": 2, "languages": 1 }, { "order": 632, - "name": "fernandoatello", + "name": "nachodev7", "count": 2, "languages": 1 }, { "order": 633, - "name": "pablosalme", + "name": "fernandoatello", "count": 2, "languages": 1 }, { "order": 634, - "name": "jsacristanbeltri", + "name": "pablosalme", "count": 2, "languages": 1 }, { "order": 635, - "name": "baauus", + "name": "jsacristanbeltri", "count": 2, "languages": 1 }, { "order": 636, - "name": "s384", + "name": "baauus", "count": 2, "languages": 1 }, { "order": 637, - "name": "javitron100", + "name": "s384", "count": 2, "languages": 1 }, { "order": 638, - "name": "lauradiazm29", + "name": "javitron100", "count": 2, "languages": 1 }, { "order": 639, - "name": "pakomor", + "name": "lauradiazm29", "count": 2, "languages": 1 }, { "order": 640, - "name": "adogdev", + "name": "pakomor", "count": 2, "languages": 1 }, { "order": 641, - "name": "eriickm", + "name": "adogdev", "count": 2, "languages": 1 }, { "order": 642, - "name": "christiancoc", + "name": "eriickm", "count": 2, "languages": 1 }, { "order": 643, - "name": "josegago27", + "name": "christiancoc", "count": 2, "languages": 1 }, { "order": 644, - "name": "rojasricoo", + "name": "josegago27", "count": 2, "languages": 1 }, { "order": 645, - "name": "inf015", + "name": "rojasricoo", "count": 2, "languages": 1 }, { "order": 646, - "name": "csaraugusto2", + "name": "inf015", "count": 2, "languages": 1 }, { "order": 647, - "name": "zalazarmartin", + "name": "csaraugusto2", "count": 2, "languages": 1 }, { "order": 648, - "name": "ziellucio01", + "name": "zalazarmartin", "count": 2, "languages": 1 }, { "order": 649, - "name": "dota43ver", + "name": "ziellucio01", "count": 2, "languages": 1 }, { "order": 650, - "name": "fjsubero", + "name": "dota43ver", "count": 2, "languages": 1 }, { "order": 651, - "name": "julind0", + "name": "fjsubero", "count": 2, "languages": 1 }, { "order": 652, - "name": "jmontoyac", + "name": "julind0", "count": 2, "languages": 1 }, { "order": 653, - "name": "dariangl", + "name": "jmontoyac", "count": 2, "languages": 1 }, { "order": 654, - "name": "soydaviddev", + "name": "dariangl", "count": 2, "languages": 1 }, { "order": 655, - "name": "sofia-d-p", + "name": "soydaviddev", "count": 2, "languages": 1 }, { "order": 656, - "name": "e-techgod", + "name": "sofia-d-p", "count": 2, "languages": 1 }, { "order": 657, - "name": "aboredllama", + "name": "e-techgod", "count": 2, "languages": 1 }, { "order": 658, - "name": "nevaito", + "name": "aboredllama", "count": 2, "languages": 1 }, { "order": 659, - "name": "josue-py", + "name": "nevaito", "count": 2, "languages": 1 }, { "order": 660, - "name": "nach012", + "name": "josue-py", "count": 2, "languages": 1 }, { "order": 661, - "name": "dans182", + "name": "nach012", "count": 2, "languages": 1 }, { "order": 662, - "name": "freyfonseca", + "name": "dans182", "count": 2, "languages": 1 }, { "order": 663, - "name": "aegpgrafologo", + "name": "freyfonseca", "count": 2, "languages": 1 }, { "order": 664, - "name": "alejandrovelasquezr", + "name": "aegpgrafologo", "count": 2, "languages": 1 }, { "order": 665, - "name": "fabianpa505", + "name": "alejandrovelasquezr", "count": 2, "languages": 1 }, { "order": 666, - "name": "carlosmarte23", + "name": "fabianpa505", "count": 2, "languages": 1 }, { "order": 667, - "name": "anblackter", + "name": "carlosmarte23", "count": 2, "languages": 1 }, { "order": 668, - "name": "steven9708m", + "name": "anblackter", "count": 2, "languages": 1 }, { "order": 669, - "name": "tic4", + "name": "steven9708m", "count": 2, "languages": 1 }, { "order": 670, - "name": "josephfaster", + "name": "tic4", "count": 2, "languages": 1 }, { "order": 671, - "name": "gregfc95", + "name": "josephfaster", "count": 2, "languages": 1 }, { "order": 672, - "name": "victore16", + "name": "gregfc95", "count": 2, "languages": 1 }, { "order": 673, - "name": "dokeys28", + "name": "victore16", "count": 2, "languages": 1 }, { "order": 674, - "name": "noaregui", + "name": "dokeys28", "count": 2, "languages": 1 }, { "order": 675, - "name": "alejandro-mantilla", + "name": "noaregui", "count": 2, "languages": 1 }, { "order": 676, - "name": "gmigues", + "name": "alejandro-mantilla", "count": 2, "languages": 1 }, { "order": 677, - "name": "juanseevn", + "name": "gmigues", "count": 2, "languages": 1 }, { "order": 678, - "name": "vesubius", + "name": "juanseevn", "count": 2, "languages": 1 }, { "order": 679, - "name": "zeti1231", + "name": "vesubius", "count": 2, "languages": 1 }, { "order": 680, - "name": "cipollalucas", + "name": "zeti1231", "count": 2, "languages": 1 }, { "order": 681, - "name": "miguelberrio0810", + "name": "cipollalucas", "count": 2, "languages": 1 }, { "order": 682, - "name": "santiagodc8", + "name": "miguelberrio0810", "count": 2, "languages": 1 }, { "order": 683, - "name": "pedrojog", + "name": "santiagodc8", "count": 2, "languages": 1 }, { "order": 684, - "name": "culebropalido", + "name": "pedrojog", "count": 2, "languages": 1 }, { "order": 685, - "name": "marioyellowy", + "name": "culebropalido", "count": 2, "languages": 1 }, { "order": 686, - "name": "jcknot", + "name": "marioyellowy", "count": 2, "languages": 1 }, { "order": 687, - "name": "peeanoot", + "name": "jcknot", "count": 2, "languages": 1 }, { "order": 688, - "name": "coronelsam", + "name": "peeanoot", "count": 2, "languages": 1 }, { "order": 689, - "name": "arhl2023", + "name": "coronelsam", "count": 2, "languages": 1 }, { "order": 690, - "name": "isidrojng", + "name": "arhl2023", "count": 2, "languages": 1 }, { "order": 691, - "name": "anaroncero", + "name": "isidrojng", "count": 2, "languages": 1 }, { "order": 692, - "name": "hersac", + "name": "anaroncero", "count": 2, "languages": 1 }, { "order": 693, - "name": "vecinacoo", + "name": "hersac", "count": 2, "languages": 1 }, { "order": 694, - "name": "juanmjimenezs", + "name": "vecinacoo", "count": 2, "languages": 1 }, { "order": 695, - "name": "armentaangel", + "name": "juanmjimenezs", "count": 2, "languages": 1 }, { "order": 696, - "name": "lordzzz777", + "name": "armentaangel", "count": 2, "languages": 1 }, { "order": 697, - "name": "sdm29gh", + "name": "lordzzz777", "count": 2, "languages": 1 }, { "order": 698, - "name": "zonnen69", + "name": "sdm29gh", "count": 2, "languages": 1 }, { "order": 699, - "name": "jmichael39", + "name": "zonnen69", "count": 2, "languages": 1 }, { "order": 700, - "name": "davidvilem", + "name": "jmichael39", "count": 2, "languages": 1 }, @@ -4718,2838 +4723,2874 @@ }, { "order": 706, - "name": "leonardo-henao", + "name": "pwrxman", "count": 1, "languages": 1 }, { "order": 707, - "name": "juancamilofvx", + "name": "leonardo-henao", "count": 1, "languages": 1 }, { "order": 708, - "name": "vikernes27666", + "name": "juancamilofvx", "count": 1, "languages": 1 }, { "order": 709, - "name": "cub-tor", + "name": "vikernes27666", "count": 1, "languages": 1 }, { "order": 710, - "name": "nightmare79", + "name": "cub-tor", "count": 1, "languages": 1 }, { "order": 711, - "name": "carlosmperezm", + "name": "nightmare79", "count": 1, "languages": 1 }, { "order": 712, - "name": "gonzalinuz18", + "name": "carlosmperezm", "count": 1, "languages": 1 }, { "order": 713, - "name": "qwik-zghieb", + "name": "gonzalinuz18", "count": 1, "languages": 1 }, { "order": 714, - "name": "miquelrr", + "name": "qwik-zghieb", "count": 1, "languages": 1 }, { "order": 715, - "name": "miguel2rar", + "name": "miquelrr", "count": 1, "languages": 1 }, { "order": 716, - "name": "eamartin", + "name": "miguel2rar", "count": 1, "languages": 1 }, { "order": 717, - "name": "gabriel-dangelo", + "name": "eamartin", "count": 1, "languages": 1 }, { "order": 718, - "name": "agustinfccll", + "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { "order": 719, - "name": "anitandil", + "name": "agustinfccll", "count": 1, "languages": 1 }, { "order": 720, - "name": "evilpodato04", + "name": "anitandil", "count": 1, "languages": 1 }, { "order": 721, - "name": "francomyburg", + "name": "evilpodato04", "count": 1, "languages": 1 }, { "order": 722, - "name": "neicervb", + "name": "francomyburg", "count": 1, "languages": 1 }, { "order": 723, - "name": "josephinoo", + "name": "neicervb", "count": 1, "languages": 1 }, { "order": 724, - "name": "arathhh8", + "name": "josephinoo", "count": 1, "languages": 1 }, { "order": 725, - "name": "paluzz", + "name": "arathhh8", "count": 1, "languages": 1 }, { "order": 726, - "name": "theposi", + "name": "paluzz", "count": 1, "languages": 1 }, { "order": 727, - "name": "vinyoles", + "name": "theposi", "count": 1, "languages": 1 }, { "order": 728, - "name": "omarroman29", + "name": "vinyoles", "count": 1, "languages": 1 }, { "order": 729, - "name": "1cel4nc3", + "name": "omarroman29", "count": 1, "languages": 1 }, { "order": 730, - "name": "sergio-strazzacappa", + "name": "1cel4nc3", "count": 1, "languages": 1 }, { "order": 731, - "name": "corvo-99", + "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { "order": 732, - "name": "danielcastillo1112", + "name": "corvo-99", "count": 1, "languages": 1 }, { "order": 733, - "name": "malkarmah", + "name": "danielcastillo1112", "count": 1, "languages": 1 }, { "order": 734, - "name": "devm0nk3y", + "name": "malkarmah", "count": 1, "languages": 1 }, { "order": 735, - "name": "sirvega83", + "name": "devm0nk3y", "count": 1, "languages": 1 }, { "order": 736, - "name": "franpua", + "name": "sirvega83", "count": 1, "languages": 1 }, { "order": 737, - "name": "van-02", + "name": "franpua", "count": 1, "languages": 1 }, { "order": 738, - "name": "x3mboy", + "name": "van-02", "count": 1, "languages": 1 }, { "order": 739, - "name": "mickysoft", + "name": "x3mboy", "count": 1, "languages": 1 }, { "order": 740, - "name": "deimoshall", + "name": "mickysoft", "count": 1, "languages": 1 }, { "order": 741, - "name": "palons29", + "name": "deimoshall", "count": 1, "languages": 1 }, { "order": 742, - "name": "serg032", + "name": "palons29", "count": 1, "languages": 1 }, { "order": 743, - "name": "seigigim", + "name": "serg032", "count": 1, "languages": 1 }, { "order": 744, - "name": "cibacoa", + "name": "seigigim", "count": 1, "languages": 1 }, { "order": 745, - "name": "axelwestman", + "name": "cibacoa", "count": 1, "languages": 1 }, { "order": 746, - "name": "javodevon", + "name": "axelwestman", "count": 1, "languages": 1 }, { "order": 747, - "name": "mauricioyair", + "name": "javodevon", "count": 1, "languages": 1 }, { "order": 748, - "name": "manuhssj", + "name": "mauricioyair", "count": 1, "languages": 1 }, { "order": 749, - "name": "coletonosh", + "name": "manuhssj", "count": 1, "languages": 1 }, { "order": 750, - "name": "manugonzalito", + "name": "coletonosh", "count": 1, "languages": 1 }, { "order": 751, - "name": "gizelads", + "name": "manugonzalito", "count": 1, "languages": 1 }, { "order": 752, - "name": "lucc4sz", + "name": "gizelads", "count": 1, "languages": 1 }, { "order": 753, - "name": "feliaguirre7", + "name": "lucc4sz", "count": 1, "languages": 1 }, { "order": 754, - "name": "rulo77", + "name": "feliaguirre7", "count": 1, "languages": 1 }, { "order": 755, - "name": "is2095", + "name": "rulo77", "count": 1, "languages": 1 }, { "order": 756, - "name": "jancalos", + "name": "mikelroset", "count": 1, "languages": 1 }, { "order": 757, - "name": "marcosapodaca", + "name": "is2095", "count": 1, "languages": 1 }, { "order": 758, - "name": "angelcruzg23", + "name": "jancalos", "count": 1, "languages": 1 }, { "order": 759, - "name": "ca2puntosv", + "name": "marcosapodaca", "count": 1, "languages": 1 }, { "order": 760, - "name": "armm77", + "name": "angelcruzg23", "count": 1, "languages": 1 }, { "order": 761, - "name": "afacorroloscos", + "name": "ca2puntosv", "count": 1, "languages": 1 }, { "order": 762, - "name": "rocadev2714", + "name": "armm77", "count": 1, "languages": 1 }, { "order": 763, - "name": "chrisfelixgil", + "name": "afacorroloscos", "count": 1, "languages": 1 }, { "order": 764, - "name": "sandrarg85", + "name": "rocadev2714", "count": 1, "languages": 1 }, { "order": 765, - "name": "rootqui", + "name": "chrisfelixgil", "count": 1, "languages": 1 }, { "order": 766, - "name": "ishimaku", + "name": "sandrarg85", "count": 1, "languages": 1 }, { "order": 767, - "name": "pkmaventura", + "name": "rootqui", "count": 1, "languages": 1 }, { "order": 768, - "name": "miguelgargallo", + "name": "ishimaku", "count": 1, "languages": 1 }, { "order": 769, - "name": "astriebeck", + "name": "pkmaventura", "count": 1, "languages": 1 }, { "order": 770, - "name": "lobogeekmx", + "name": "miguelgargallo", "count": 1, "languages": 1 }, { "order": 771, - "name": "marvinagui", + "name": "astriebeck", "count": 1, "languages": 1 }, { "order": 772, - "name": "marqitos", + "name": "lobogeekmx", "count": 1, "languages": 1 }, { "order": 773, - "name": "nunezlagos", + "name": "marvinagui", "count": 1, "languages": 1 }, { "order": 774, - "name": "jcrobles99", + "name": "marqitos", "count": 1, "languages": 1 }, { "order": 775, - "name": "ledyam", + "name": "nunezlagos", "count": 1, "languages": 1 }, { "order": 776, - "name": "jatomas", + "name": "jcrobles99", "count": 1, "languages": 1 }, { "order": 777, - "name": "jaennova", + "name": "ledyam", "count": 1, "languages": 1 }, { "order": 778, - "name": "luisalberto22", + "name": "jatomas", "count": 1, "languages": 1 }, { "order": 779, - "name": "francisleble", + "name": "jaennova", "count": 1, "languages": 1 }, { "order": 780, - "name": "deiiviitdev", + "name": "luisalberto22", "count": 1, "languages": 1 }, { "order": 781, - "name": "braiso-22", + "name": "francisleble", "count": 1, "languages": 1 }, { "order": 782, - "name": "daniel-cas", + "name": "deiiviitdev", "count": 1, "languages": 1 }, { "order": 783, - "name": "acirdevelper", + "name": "braiso-22", "count": 1, "languages": 1 }, { "order": 784, - "name": "borjadelgadodev", + "name": "daniel-cas", "count": 1, "languages": 1 }, { "order": 785, - "name": "elpeque29", + "name": "acirdevelper", "count": 1, "languages": 1 }, { "order": 786, - "name": "jhordanluyo", + "name": "borjadelgadodev", "count": 1, "languages": 1 }, { "order": 787, - "name": "davidcv-dev", + "name": "elpeque29", "count": 1, "languages": 1 }, { "order": 788, - "name": "mbmaeso", + "name": "jhordanluyo", "count": 1, "languages": 1 }, { "order": 789, - "name": "alvarominarro", + "name": "davidcv-dev", "count": 1, "languages": 1 }, { "order": 790, - "name": "bjchavez", + "name": "mbmaeso", "count": 1, "languages": 1 }, { "order": 791, - "name": "madelefonb", + "name": "alvarominarro", "count": 1, "languages": 1 }, { "order": 792, - "name": "lfwzk", + "name": "bjchavez", "count": 1, "languages": 1 }, { "order": 793, - "name": "ercky1980", + "name": "madelefonb", "count": 1, "languages": 1 }, { "order": 794, - "name": "jsruedatorres", + "name": "lfwzk", "count": 1, "languages": 1 }, { "order": 795, - "name": "jacobrwx", + "name": "ercky1980", "count": 1, "languages": 1 }, { "order": 796, - "name": "abengl", + "name": "jsruedatorres", "count": 1, "languages": 1 }, { "order": 797, - "name": "jd-gm", + "name": "jacobrwx", "count": 1, "languages": 1 }, { "order": 798, - "name": "lucianogriffa", + "name": "abengl", "count": 1, "languages": 1 }, { "order": 799, - "name": "quirogapau", + "name": "jd-gm", "count": 1, "languages": 1 }, { "order": 800, - "name": "joseperesini", + "name": "lucianogriffa", "count": 1, "languages": 1 }, { "order": 801, + "name": "quirogapau", + "count": 1, + "languages": 1 + }, + { + "order": 802, + "name": "joseperesini", + "count": 1, + "languages": 1 + }, + { + "order": 803, "name": "mhrosariom", "count": 1, "languages": 1 }, { - "order": 802, + "order": 804, "name": "sergioab7", "count": 1, "languages": 1 }, { - "order": 803, + "order": 805, "name": "santaravena", "count": 1, "languages": 1 }, { - "order": 804, + "order": 806, "name": "datrujillog", "count": 1, "languages": 1 }, { - "order": 805, + "order": 807, "name": "johnniew81", "count": 1, "languages": 1 }, { - "order": 806, + "order": 808, "name": "chriszaldana", "count": 1, "languages": 1 }, { - "order": 807, + "order": 809, "name": "antonioverdugo", "count": 1, "languages": 1 }, { - "order": 808, + "order": 810, "name": "kronomio", "count": 1, "languages": 1 }, { - "order": 809, + "order": 811, "name": "kevinramirez28", "count": 1, "languages": 1 }, { - "order": 810, + "order": 812, "name": "juanpablo-a", "count": 1, "languages": 1 }, { - "order": 811, + "order": 813, "name": "gerespinosa", "count": 1, "languages": 1 }, { - "order": 812, + "order": 814, "name": "1978acb", "count": 1, "languages": 1 }, { - "order": 813, + "order": 815, "name": "alexxawada", "count": 1, "languages": 1 }, { - "order": 814, + "order": 816, "name": "ricarsur", "count": 1, "languages": 1 }, { - "order": 815, + "order": 817, "name": "alemar16", "count": 1, "languages": 1 }, { - "order": 816, + "order": 818, "name": "pointfs", "count": 1, "languages": 1 }, { - "order": 817, + "order": 819, "name": "edperez07", "count": 1, "languages": 1 }, { - "order": 818, + "order": 820, "name": "dacronik", "count": 1, "languages": 1 }, { - "order": 819, + "order": 821, "name": "abraham9804", "count": 1, "languages": 1 }, { - "order": 820, + "order": 822, "name": "afl0r3s", "count": 1, "languages": 1 }, { - "order": 821, + "order": 823, "name": "dianelis1", "count": 1, "languages": 1 }, { - "order": 822, + "order": 824, "name": "fernandofl", "count": 1, "languages": 1 }, { - "order": 823, + "order": 825, "name": "conrado85", "count": 1, "languages": 1 }, { - "order": 824, + "order": 826, "name": "agus-ig", "count": 1, "languages": 1 }, { - "order": 825, + "order": 827, "name": "alvarommedia", "count": 1, "languages": 1 }, { - "order": 826, + "order": 828, "name": "maximotoro", "count": 1, "languages": 1 }, { - "order": 827, + "order": 829, "name": "m4xisil", "count": 1, "languages": 1 }, { - "order": 828, + "order": 830, "name": "francomoreira", "count": 1, "languages": 1 }, { - "order": 829, + "order": 831, "name": "aleclto7", "count": 1, "languages": 1 }, { - "order": 830, + "order": 832, "name": "nnunezmedina", "count": 1, "languages": 1 }, { - "order": 831, + "order": 833, "name": "codejoss", "count": 1, "languages": 1 }, { - "order": 832, + "order": 834, "name": "yaojema", "count": 1, "languages": 1 }, { - "order": 833, + "order": 835, "name": "romanocoder", "count": 1, "languages": 1 }, { - "order": 834, + "order": 836, "name": "sixtodev", "count": 1, "languages": 1 }, { - "order": 835, + "order": 837, "name": "cgomezadolfo", "count": 1, "languages": 1 }, { - "order": 836, + "order": 838, "name": "rojasvargas", "count": 1, "languages": 1 }, { - "order": 837, + "order": 839, "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { - "order": 838, + "order": 840, "name": "l3v1xx", "count": 1, "languages": 1 }, { - "order": 839, + "order": 841, "name": "patricioguerra30", "count": 1, "languages": 1 }, { - "order": 840, + "order": 842, "name": "lytsar", "count": 1, "languages": 1 }, { - "order": 841, + "order": 843, "name": "siuldev", "count": 1, "languages": 1 }, { - "order": 842, + "order": 844, "name": "brayancordova1", "count": 1, "languages": 1 }, { - "order": 843, + "order": 845, "name": "ronnieruuz", "count": 1, "languages": 1 }, { - "order": 844, + "order": 846, "name": "yessikamichelle", "count": 1, "languages": 1 }, { - "order": 845, + "order": 847, "name": "vainsito1", "count": 1, "languages": 1 }, { - "order": 846, + "order": 848, "name": "oscarletelier", "count": 1, "languages": 1 }, { - "order": 847, + "order": 849, "name": "kocho03", "count": 1, "languages": 1 }, { - "order": 848, + "order": 850, "name": "aidicoop", "count": 1, "languages": 1 }, { - "order": 849, + "order": 851, "name": "albabp", "count": 1, "languages": 1 }, { - "order": 850, + "order": 852, "name": "nozodev", "count": 1, "languages": 1 }, { - "order": 851, + "order": 853, "name": "mvillegas18", "count": 1, "languages": 1 }, { - "order": 852, + "order": 854, "name": "augustbs", "count": 1, "languages": 1 }, { - "order": 853, + "order": 855, "name": "mekanicas", "count": 1, "languages": 1 }, { - "order": 854, + "order": 856, "name": "luchof5", "count": 1, "languages": 1 }, { - "order": 855, + "order": 857, "name": "fullstackarlo", "count": 1, "languages": 1 }, { - "order": 856, + "order": 858, "name": "mdemena", "count": 1, "languages": 1 }, { - "order": 857, + "order": 859, "name": "cliverjimny123", "count": 1, "languages": 1 }, { - "order": 858, + "order": 860, "name": "rodmiggithub", "count": 1, "languages": 1 }, { - "order": 859, + "order": 861, "name": "s9code", "count": 1, "languages": 1 }, { - "order": 860, + "order": 862, "name": "javieradev", "count": 1, "languages": 1 }, { - "order": 861, + "order": 863, "name": "xnomada", "count": 1, "languages": 1 }, { - "order": 862, + "order": 864, "name": "miguelsarm", "count": 1, "languages": 1 }, { - "order": 863, + "order": 865, "name": "royhuamanavila", "count": 1, "languages": 1 }, { - "order": 864, + "order": 866, "name": "imista", "count": 1, "languages": 1 }, { - "order": 865, + "order": 867, "name": "denisortega", "count": 1, "languages": 1 }, { - "order": 866, + "order": 868, "name": "kouski", "count": 1, "languages": 1 }, { - "order": 867, + "order": 869, "name": "leydimadrid", "count": 1, "languages": 1 }, { - "order": 868, + "order": 870, "name": "frannm29", "count": 1, "languages": 1 }, { - "order": 869, + "order": 871, "name": "saintsluis", "count": 1, "languages": 1 }, { - "order": 870, + "order": 872, "name": "gc796", "count": 1, "languages": 1 }, { - "order": 871, + "order": 873, "name": "pierre-ol", "count": 1, "languages": 1 }, { - "order": 872, + "order": 874, "name": "francescoalterio", "count": 1, "languages": 1 }, { - "order": 873, + "order": 875, "name": "gustavoguerrero", "count": 1, "languages": 1 }, { - "order": 874, + "order": 876, "name": "diegoxxd", "count": 1, "languages": 1 }, { - "order": 875, + "order": 877, "name": "fzcarlitos", "count": 1, "languages": 1 }, { - "order": 876, + "order": 878, "name": "walkerlyna", "count": 1, "languages": 1 }, { - "order": 877, + "order": 879, "name": "sejotaz", "count": 1, "languages": 1 }, { - "order": 878, + "order": 880, "name": "frcan89", "count": 1, "languages": 1 }, { - "order": 879, + "order": 881, "name": "nicorey89", "count": 1, "languages": 1 }, { - "order": 880, + "order": 882, "name": "alexis0717", "count": 1, "languages": 1 }, { - "order": 881, + "order": 883, "name": "edgonzz", "count": 1, "languages": 1 }, { - "order": 882, + "order": 884, "name": "vmga09", "count": 1, "languages": 1 }, { - "order": 883, + "order": 885, "name": "lfam200", "count": 1, "languages": 1 }, { - "order": 884, + "order": 886, "name": "kenzambrano", "count": 1, "languages": 1 }, { - "order": 885, + "order": 887, "name": "dmhenaopa", "count": 1, "languages": 1 }, { - "order": 886, + "order": 888, "name": "jpiacaruso", "count": 1, "languages": 1 }, { - "order": 887, + "order": 889, "name": "isnatthy", "count": 1, "languages": 1 }, { - "order": 888, + "order": 890, "name": "diego-santana23", "count": 1, "languages": 1 }, { - "order": 889, + "order": 891, "name": "peticas", "count": 1, "languages": 1 }, { - "order": 890, + "order": 892, "name": "flarien", "count": 1, "languages": 1 }, { - "order": 891, + "order": 893, "name": "franciscokarriere", "count": 1, "languages": 1 }, { - "order": 892, + "order": 894, "name": "pipeyz21", "count": 1, "languages": 1 }, { - "order": 893, + "order": 895, "name": "luisgarm", "count": 1, "languages": 1 }, { - "order": 894, + "order": 896, "name": "tetotille", "count": 1, "languages": 1 }, { - "order": 895, + "order": 897, "name": "vorosdev", "count": 1, "languages": 1 }, { - "order": 896, + "order": 898, "name": "santiagomac", "count": 1, "languages": 1 }, { - "order": 897, + "order": 899, "name": "implevacui", "count": 1, "languages": 1 }, { - "order": 898, + "order": 900, "name": "fede6299", "count": 1, "languages": 1 }, { - "order": 899, + "order": 901, "name": "kevin05m", "count": 1, "languages": 1 }, { - "order": 900, + "order": 902, "name": "diegomm27", "count": 1, "languages": 1 }, { - "order": 901, + "order": 903, "name": "pablo-lnx", "count": 1, "languages": 1 }, { - "order": 902, + "order": 904, "name": "darkohokage", "count": 1, "languages": 1 }, { - "order": 903, + "order": 905, "name": "jhonnfl", "count": 1, "languages": 1 }, { - "order": 904, + "order": 906, "name": "jarzatedev", "count": 1, "languages": 1 }, { - "order": 905, + "order": 907, "name": "brunom-93", "count": 1, "languages": 1 }, { - "order": 906, + "order": 908, "name": "alejandroruiz23", "count": 1, "languages": 1 }, { - "order": 907, + "order": 909, "name": "trollface77", "count": 1, "languages": 1 }, { - "order": 908, + "order": 910, "name": "jaimesoftdev", "count": 1, "languages": 1 }, { - "order": 909, + "order": 911, "name": "edm1ya", "count": 1, "languages": 1 }, { - "order": 910, + "order": 912, "name": "tartabullroberto", "count": 1, "languages": 1 }, { - "order": 911, + "order": 913, "name": "serg-pq", "count": 1, "languages": 1 }, { - "order": 912, + "order": 914, "name": "lara-vel-dev", "count": 1, "languages": 1 }, { - "order": 913, + "order": 915, "name": "alexisbarradev", "count": 1, "languages": 1 }, { - "order": 914, + "order": 916, "name": "kelvincb", "count": 1, "languages": 1 }, { - "order": 915, + "order": 917, "name": "carlostoledoe", "count": 1, "languages": 1 }, { - "order": 916, + "order": 918, "name": "gilbertho502", "count": 1, "languages": 1 }, { - "order": 917, + "order": 919, "name": "v0l0v", "count": 1, "languages": 1 }, { - "order": 918, + "order": 920, "name": "johao23", "count": 1, "languages": 1 }, { - "order": 919, + "order": 921, "name": "geridage", "count": 1, "languages": 1 }, { - "order": 920, + "order": 922, "name": "vmarialuzm", "count": 1, "languages": 1 }, { - "order": 921, + "order": 923, "name": "snowcardenas", "count": 1, "languages": 1 }, { - "order": 922, + "order": 924, "name": "and-y21", "count": 1, "languages": 1 }, { - "order": 923, + "order": 925, "name": "arturodlapaz17", "count": 1, "languages": 1 }, { - "order": 924, + "order": 926, "name": "manuu42", "count": 1, "languages": 1 }, { - "order": 925, + "order": 927, "name": "howlett9999", "count": 1, "languages": 1 }, { - "order": 926, + "order": 928, "name": "dkp-dev", "count": 1, "languages": 1 }, { - "order": 927, + "order": 929, "name": "hnaranjog", "count": 1, "languages": 1 }, { - "order": 928, + "order": 930, "name": "wallsified", "count": 1, "languages": 1 }, { - "order": 929, + "order": 931, "name": "lluistech", "count": 1, "languages": 1 }, { - "order": 930, + "order": 932, "name": "mamartinez14", "count": 1, "languages": 1 }, { - "order": 931, + "order": 933, "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { - "order": 932, + "order": 934, "name": "bassalex27", "count": 1, "languages": 1 }, { - "order": 933, + "order": 935, "name": "yetlanezils", "count": 1, "languages": 1 }, { - "order": 934, + "order": 936, "name": "ndepaul82", "count": 1, "languages": 1 }, { - "order": 935, + "order": 937, "name": "amitchellg", "count": 1, "languages": 1 }, { - "order": 936, + "order": 938, "name": "turudev1979", "count": 1, "languages": 1 }, { - "order": 937, + "order": 939, "name": "deivimiller", "count": 1, "languages": 1 }, { - "order": 938, + "order": 940, "name": "haroldalb", "count": 1, "languages": 1 }, { - "order": 939, + "order": 941, "name": "dakkaj", "count": 1, "languages": 1 }, { - "order": 940, + "order": 942, "name": "jheisonquiroga", "count": 1, "languages": 1 }, { - "order": 941, + "order": 943, "name": "juli-m4", "count": 1, "languages": 1 }, { - "order": 942, + "order": 944, "name": "sergiomhernandez", "count": 1, "languages": 1 }, { - "order": 943, + "order": 945, "name": "masenace", "count": 1, "languages": 1 }, { - "order": 944, + "order": 946, "name": "e-xtian", "count": 1, "languages": 1 }, { - "order": 945, + "order": 947, "name": "vickalck", "count": 1, "languages": 1 }, { - "order": 946, + "order": 948, "name": "gmedinat911", "count": 1, "languages": 1 }, { - "order": 947, + "order": 949, "name": "eljavi0", "count": 1, "languages": 1 }, { - "order": 948, + "order": 950, "name": "yeisongil", "count": 1, "languages": 1 }, { - "order": 949, + "order": 951, "name": "julioorozco05", "count": 1, "languages": 1 }, { - "order": 950, + "order": 952, "name": "fergz1988", "count": 1, "languages": 1 }, { - "order": 951, + "order": 953, "name": "marcos0803", "count": 1, "languages": 1 }, { - "order": 952, + "order": 954, "name": "xcortes", "count": 1, "languages": 1 }, { - "order": 953, + "order": 955, "name": "facundorsabia", "count": 1, "languages": 1 }, { - "order": 954, + "order": 956, "name": "nico70012", "count": 1, "languages": 1 }, { - "order": 955, + "order": 957, "name": "charly024", "count": 1, "languages": 1 }, { - "order": 956, + "order": 958, "name": "devjerez", "count": 1, "languages": 1 }, { - "order": 957, + "order": 959, "name": "copamire", "count": 1, "languages": 1 }, { - "order": 958, + "order": 960, "name": "gersonoroz", "count": 1, "languages": 1 }, { - "order": 959, + "order": 961, "name": "jafuma0320", "count": 1, "languages": 1 }, { - "order": 960, + "order": 962, "name": "g4nd4lf", "count": 1, "languages": 1 }, { - "order": 961, + "order": 963, "name": "obed-tc", "count": 1, "languages": 1 }, { - "order": 962, + "order": 964, "name": "devkenn", "count": 1, "languages": 1 }, { - "order": 963, + "order": 965, "name": "xalejandrow", "count": 1, "languages": 1 }, { - "order": 964, + "order": 966, "name": "henrydavidprimera", "count": 1, "languages": 1 }, { - "order": 965, + "order": 967, "name": "luceldasilva", "count": 1, "languages": 1 }, { - "order": 966, + "order": 968, "name": "mjordanaam", "count": 1, "languages": 1 }, { - "order": 967, + "order": 969, "name": "betulioo", "count": 1, "languages": 1 }, { - "order": 968, + "order": 970, "name": "judithernandez", "count": 1, "languages": 1 }, { - "order": 969, + "order": 971, "name": "dimanu-py", "count": 1, "languages": 1 }, { - "order": 970, + "order": 972, "name": "snowale", "count": 1, "languages": 1 }, { - "order": 971, + "order": 973, "name": "cd1974", "count": 1, "languages": 1 }, { - "order": 972, + "order": 974, "name": "acobo3", "count": 1, "languages": 1 }, { - "order": 973, + "order": 975, "name": "isaacdci", "count": 1, "languages": 1 }, { - "order": 974, + "order": 976, "name": "manueldenisdev", "count": 1, "languages": 1 }, { - "order": 975, + "order": 977, "name": "anexo01", "count": 1, "languages": 1 }, { - "order": 976, + "order": 978, "name": "yamiyugi25", "count": 1, "languages": 1 }, { - "order": 977, + "order": 979, "name": "gl-informatica", "count": 1, "languages": 1 }, { - "order": 978, + "order": 980, "name": "miguelmancebo", "count": 1, "languages": 1 }, { - "order": 979, + "order": 981, "name": "neusier101", "count": 1, "languages": 1 }, { - "order": 980, + "order": 982, "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { - "order": 981, + "order": 983, "name": "xhinto", "count": 1, "languages": 1 }, { - "order": 982, + "order": 984, "name": "dacaldev", "count": 1, "languages": 1 }, { - "order": 983, + "order": 985, "name": "juan-cruz01", "count": 1, "languages": 1 }, { - "order": 984, + "order": 986, "name": "juanalbornoz32", "count": 1, "languages": 1 }, { - "order": 985, + "order": 987, "name": "cisneros2404", "count": 1, "languages": 1 }, { - "order": 986, + "order": 988, "name": "neftalyr", "count": 1, "languages": 1 }, { - "order": 987, + "order": 989, "name": "latorredev", "count": 1, "languages": 1 }, { - "order": 988, + "order": 990, "name": "osneidert", "count": 1, "languages": 1 }, { - "order": 989, + "order": 991, "name": "jrgranadosb", "count": 1, "languages": 1 }, { - "order": 990, + "order": 992, "name": "vicvilla30", "count": 1, "languages": 1 }, { - "order": 991, + "order": 993, "name": "carlosbb70", "count": 1, "languages": 1 }, { - "order": 992, + "order": 994, "name": "pablom-2015", "count": 1, "languages": 1 }, { - "order": 993, + "order": 995, "name": "xtinarita", "count": 1, "languages": 1 }, { - "order": 994, + "order": 996, "name": "wilsonbarrera", "count": 1, "languages": 1 }, { - "order": 995, + "order": 997, "name": "jereaguilar", "count": 1, "languages": 1 }, { - "order": 996, + "order": 998, "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { - "order": 997, + "order": 999, "name": "danidan1214", "count": 1, "languages": 1 }, { - "order": 998, + "order": 1000, "name": "demegorash", "count": 1, "languages": 1 }, { - "order": 999, + "order": 1001, "name": "cris10026", "count": 1, "languages": 1 }, { - "order": 1000, + "order": 1002, "name": "davidgramiro", "count": 1, "languages": 1 }, { - "order": 1001, + "order": 1003, "name": "jgarteag", "count": 1, "languages": 1 }, { - "order": 1002, + "order": 1004, "name": "adcarret", "count": 1, "languages": 1 }, { - "order": 1003, + "order": 1005, "name": "natanaelzubiri", "count": 1, "languages": 1 }, { - "order": 1004, + "order": 1006, "name": "diegogomezcor4", "count": 1, "languages": 1 }, { - "order": 1005, + "order": 1007, "name": "perla-zg", "count": 1, "languages": 1 }, { - "order": 1006, + "order": 1008, "name": "neshurtado", "count": 1, "languages": 1 }, { - "order": 1007, + "order": 1009, + "name": "maxirica", + "count": 1, + "languages": 1 + }, + { + "order": 1010, "name": "marcelinoarias369", "count": 1, "languages": 1 }, { - "order": 1008, + "order": 1011, "name": "pushodev", "count": 1, "languages": 1 }, { - "order": 1009, + "order": 1012, "name": "sherkla12e", "count": 1, "languages": 1 }, { - "order": 1010, + "order": 1013, "name": "luisangeles20", "count": 1, "languages": 1 }, { - "order": 1011, + "order": 1014, "name": "johannmanrique", "count": 1, "languages": 1 }, { - "order": 1012, + "order": 1015, "name": "omar8102", "count": 1, "languages": 1 }, { - "order": 1013, + "order": 1016, "name": "eatsangels", "count": 1, "languages": 1 }, { - "order": 1014, + "order": 1017, "name": "alejarandro", "count": 1, "languages": 1 }, { - "order": 1015, + "order": 1018, "name": "tashidian", "count": 1, "languages": 1 }, { - "order": 1016, + "order": 1019, "name": "alejandro000", "count": 1, "languages": 1 }, { - "order": 1017, + "order": 1020, "name": "francgci", "count": 1, "languages": 1 }, { - "order": 1018, + "order": 1021, "name": "krisipo", "count": 1, "languages": 1 }, { - "order": 1019, + "order": 1022, "name": "jalonso76", "count": 1, "languages": 1 }, { - "order": 1020, + "order": 1023, "name": "leo18q", "count": 1, "languages": 1 }, { - "order": 1021, + "order": 1024, "name": "sofiamfernandez", "count": 1, "languages": 1 }, { - "order": 1022, + "order": 1025, "name": "jgregoris", "count": 1, "languages": 1 }, { - "order": 1023, + "order": 1026, "name": "josuelopez5", "count": 1, "languages": 1 }, { - "order": 1024, + "order": 1027, "name": "mrf1989", "count": 1, "languages": 1 }, { - "order": 1025, + "order": 1028, "name": "zeraven09", "count": 1, "languages": 1 }, { - "order": 1026, + "order": 1029, "name": "pr1de-23", "count": 1, "languages": 1 }, { - "order": 1027, + "order": 1030, "name": "kronoscba", "count": 1, "languages": 1 }, { - "order": 1028, + "order": 1031, "name": "erickcis", "count": 1, "languages": 1 }, { - "order": 1029, + "order": 1032, "name": "experthacker444", "count": 1, "languages": 1 }, { - "order": 1030, + "order": 1033, "name": "javirr4", "count": 1, "languages": 1 }, { - "order": 1031, + "order": 1034, "name": "ignacioskm", "count": 1, "languages": 1 }, { - "order": 1032, + "order": 1035, "name": "jchernandez87", "count": 1, "languages": 1 }, { - "order": 1033, + "order": 1036, "name": "ferngpv", "count": 1, "languages": 1 }, { - "order": 1034, + "order": 1037, "name": "kshields51", "count": 1, "languages": 1 }, { - "order": 1035, + "order": 1038, "name": "salas89", "count": 1, "languages": 1 }, { - "order": 1036, + "order": 1039, "name": "90dread", "count": 1, "languages": 1 }, { - "order": 1037, + "order": 1040, "name": "chema-dw", "count": 1, "languages": 1 }, { - "order": 1038, + "order": 1041, "name": "sbngl", "count": 1, "languages": 1 }, { - "order": 1039, + "order": 1042, "name": "m4xxdev", "count": 1, "languages": 1 }, { - "order": 1040, + "order": 1043, "name": "cristianvergaraf", "count": 1, "languages": 1 }, { - "order": 1041, + "order": 1044, + "name": "idiegorojas", + "count": 1, + "languages": 1 + }, + { + "order": 1045, "name": "lizzymaken", "count": 1, "languages": 1 }, { - "order": 1042, + "order": 1046, "name": "jandortiz", "count": 1, "languages": 1 }, { - "order": 1043, + "order": 1047, "name": "claudios1980", "count": 1, "languages": 1 }, { - "order": 1044, + "order": 1048, "name": "sergiovelayos", "count": 1, "languages": 1 }, { - "order": 1045, + "order": 1049, "name": "miguelangel861", "count": 1, "languages": 1 }, { - "order": 1046, + "order": 1050, "name": "marcosjarrin", "count": 1, "languages": 1 }, { - "order": 1047, + "order": 1051, "name": "jandresalvar", "count": 1, "languages": 1 }, { - "order": 1048, + "order": 1052, "name": "joferpg", "count": 1, "languages": 1 }, { - "order": 1049, + "order": 1053, "name": "jlrojano", "count": 1, "languages": 1 }, { - "order": 1050, + "order": 1054, "name": "ivanserran", "count": 1, "languages": 1 }, { - "order": 1051, + "order": 1055, "name": "dany3gs", "count": 1, "languages": 1 }, { - "order": 1052, + "order": 1056, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1053, + "order": 1057, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1054, + "order": 1058, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1055, + "order": 1059, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1056, + "order": 1060, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1057, + "order": 1061, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1058, + "order": 1062, "name": "bycris13", "count": 1, "languages": 1 }, { - "order": 1059, + "order": 1063, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1060, + "order": 1064, "name": "v1k770r", "count": 1, "languages": 1 }, { - "order": 1061, + "order": 1065, "name": "gianellannie", "count": 1, "languages": 1 }, { - "order": 1062, + "order": 1066, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1063, + "order": 1067, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1064, + "order": 1068, "name": "fredylopez01", "count": 1, "languages": 1 }, { - "order": 1065, + "order": 1069, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1066, + "order": 1070, "name": "lautimorales", "count": 1, "languages": 1 }, { - "order": 1067, + "order": 1071, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1068, + "order": 1072, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1069, + "order": 1073, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1070, + "order": 1074, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1075, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1076, "name": "adriansaint07", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1077, "name": "javiir", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1078, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1079, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1080, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1081, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1082, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1083, "name": "jrgim", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1084, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1085, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1086, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1087, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1088, "name": "robermejia", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1089, + "name": "nolemoon", + "count": 1, + "languages": 1 + }, + { + "order": 1090, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1091, "name": "reneguzman7", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1092, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1093, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1094, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1095, "name": "queralesdev", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1096, "name": "dovinhoyos", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1097, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1098, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1099, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1095, + "order": 1100, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1096, + "order": 1101, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1102, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1103, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1104, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1105, "name": "antoniojzp86", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1106, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1107, "name": "zyn7e", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1108, "name": "diegopardomontero", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1109, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1110, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1111, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1112, "name": "clespinosa2024", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1113, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1114, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1115, "name": "bellodeveloper", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1116, "name": "cdryampi", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1117, + "name": "bereverte", + "count": 1, + "languages": 1 + }, + { + "order": 1118, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1119, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1120, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1121, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1122, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1117, + "order": 1123, "name": "rawc1nnamon", "count": 1, "languages": 1 }, { - "order": 1118, + "order": 1124, "name": "mvidab", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1125, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1126, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1127, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1128, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1129, "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1130, "name": "orzefox", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1131, "name": "acirdeveloper", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1132, "name": "emiliordev", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1133, "name": "sve-nnn", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1134, "name": "edgarmedranoa", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1135, "name": "rafapg93", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1136, "name": "vickalc", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1137, "name": "riukac", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1138, "name": "rusian69", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1139, "name": "wijimenezz", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1140, "name": "albertovf", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1141, "name": "markayala13", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1142, "name": "rocha30", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1143, "name": "righelch", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1144, "name": "deathbat00", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1145, "name": "nicoloboo02", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1146, "name": "sergiopq", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1147, "name": "angeloro", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1148, "name": "jony-english22", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1149, "name": "tilordqwerty", "count": 1, "languages": 1 }, { - "order": 1144, + "order": 1150, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1145, + "order": 1151, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1152, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1153, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1148, + "order": 1154, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1149, + "order": 1155, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1150, + "order": 1156, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1151, + "order": 1157, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1152, + "order": 1158, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1153, + "order": 1159, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1154, + "order": 1160, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1155, + "order": 1161, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1156, + "order": 1162, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1157, + "order": 1163, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1158, + "order": 1164, "name": "willypaz243", "count": 1, "languages": 1 }, { - "order": 1159, + "order": 1165, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1160, + "order": 1166, "name": "arperezinf", "count": 1, "languages": 1 }, { - "order": 1161, + "order": 1167, "name": "alecraft8", "count": 1, "languages": 1 }, { - "order": 1162, + "order": 1168, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1163, + "order": 1169, "name": "juampaweb", "count": 1, "languages": 1 }, { - "order": 1164, + "order": 1170, "name": "girngoma", "count": 1, "languages": 1 }, { - "order": 1165, + "order": 1171, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1166, + "order": 1172, "name": "ddaniel27", "count": 1, "languages": 1 }, { - "order": 1167, + "order": 1173, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1168, + "order": 1174, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1169, + "order": 1175, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1170, + "order": 1176, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1171, + "order": 1177, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1172, + "order": 1178, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1173, + "order": 1179, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1174, + "order": 1180, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1175, + "order": 1181, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1176, + "order": 1182, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1177, + "order": 1183, "name": "ouendinga", "count": 1, "languages": 1 }, { - "order": 1178, + "order": 1184, "name": "melonconyogurt", "count": 1, "languages": 1 From 4940e0dd0afbb50ce1ce901d109cbf4055b1a5a6 Mon Sep 17 00:00:00 2001 From: ProTpuS98 Date: Tue, 17 Sep 2024 02:22:04 +0200 Subject: [PATCH 320/539] confirmacion --- .../c#/ProTpuS98.cs | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c#/ProTpuS98.cs b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c#/ProTpuS98.cs index 8b13789179..b7af82005b 100644 --- a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c#/ProTpuS98.cs +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c#/ProTpuS98.cs @@ -1 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PracticasLogicaProgramacion +{ + internal class Program + { + static void Main(string[] args) + { + //EJERCICIOS + //1. Crea un comentario en el código y coloca la URL del + //sitio web oficial del lenguaje de programación que has seleccionado. + + https://learn.microsoft.com/en-us/dotnet/csharp/ + + //2. Representa las diferentes sintaxis que existen de crear comentarios + //en el lenguaje (en una línea, varias...). + + //Este se utiliza para escribir comentarios de una sola linea. + /* + este se utiliza para escribir comentarios de varias lineas. + */ + + //3. Crea una variable (y una constante si el lenguaje lo soporta). + + private int num; + private const int numConst; + + //4. Crea variables representando todos los tipos de datos primitivos + //del lenguaje (cadenas de texto, enteros, booleanos...). + + //1. Enteros + private int num1; //numeros enteros de 32 bits. + private long num2; //numeros enteros de 64 bits. + private short num3; //numeros enteros de 16 bits. + private byte num4; //numeros enteros sin signo de 8 bits. + private sbyte num5; //numeros enteros con signo de 8 bits. + private uint num6; //numeros enteros sin signo de 32 bits, + private ulong num7; //numeros enteros sin signo de 64 bits. + private ushort num8; //numeros enteros sin signo de 16 bits. + + //2. Float + private float num9; //Números de punto flotante de precisión simple (32 bits). + private double num10; //Números de punto flotante de doble precisión (64 bits). + + //3. Decimal + private decimal num11; //Números decimales de alta precisión, generalmente usados para cálculos financieros (128 bits). + + //4. Booleanos + bool jump; // Representa valores booleanos (true o false). + + //5. Caracteres + private char Caracter; //Representa un carácter Unicode UTF-16 (16 bits). + + //6. Cadenas + private string name; //Secuencia de caracteres Unicode. + + //5. Imprime por terminal el texto: "¡Hola, [y el nombre de tu lenguaje]!" + EJERCICIO ejercicio = new EJERCICIO(); + ejercicio.saludo(); + + } + public class EJERCICIOS + { + public void Saludo() + { + Console.WriteLines("¡Hola, [C#]!") + } + + } + } +} From 946ba8b021c554bf43e0198f8a89d5e8b2d2b066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Heguaburu=20S=C3=A1nchez?= Date: Mon, 16 Sep 2024 22:38:26 -0300 Subject: [PATCH 321/539] #01-python --- .../python/NicoHeguaburu.py | 25 +++ .../python/NicoHeguaburu.py | 159 ++++++++++++++++++ 2 files changed, 184 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/NicoHeguaburu.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/NicoHeguaburu.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/NicoHeguaburu.py index e69de29bb2..8fd3725a09 100644 --- a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/NicoHeguaburu.py +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/NicoHeguaburu.py @@ -0,0 +1,25 @@ +# https://python.org/ + +# Comentario de una linea + +""" +Comentario en +varias lineas +""" + +''' +Otra opccion de +comentario en varias +lineas +''' + +variable = "Mi variable" + +CONSTANTE = "Mi constante" + +entero = 1 +decimal = 1,2 +booleano = False +texto = "Mi texto" + +print("Hola Python") \ No newline at end of file diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/NicoHeguaburu.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/NicoHeguaburu.py new file mode 100644 index 0000000000..c23473ebc3 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/NicoHeguaburu.py @@ -0,0 +1,159 @@ + + + +#aritmeticos +x = 3 +y = 6 + +suma = x + y +print (suma) + +resta = x - y +print (resta) + +dividir = x / y +print (dividir) + +multiplicar = x * y +print (resta) + +dividir_enteros = x // y +print(dividir_enteros) + +exponente = x ** y +print(exponente) + +resto = x % y +print(resto) + + +#logicos +#and +print (True and True) +print (False and False) +print (True and False) +print (False and True) + + +#or +print (True or True) +print (False or False) +print (True or False) +print (False or True) + + +#not +print (not True) +print (not False) + + +#comparacion +igual = 5 == 5 +print(igual) + +diferente = 5 != 5 +print(diferente) + +mayor = 5 > 3 +print(mayor) + +menor = 5 < 9 +print(menor) + +mayor_igual = 5 >= 5 +print(mayor_igual) + +menor_igual = 5<= 1 +print(menor_igual) + + +#asignacion + +#simple +z = 3 +print(z) + +#suma +z += 4 +print(z) + +#resta +z -= 8 +print(z) + +z *= 2 +print(z) + +z /= 2 +print(z) + +#identidad +a = 25 +b = 2 + +print(a is b) +print(a is not b) + + +#pertenecia +print("n" in "nicolás") +print("x" in "nicolás") + +print("n" not in "nicolás") +print("x" not in "nicolás") + +#bits +x = 5 # 5 = 101 en bit +y = 3 # 3 = 011 en bit + +print(x & y) #AND bit a bit +print(x | y) #OR bit a bit +print(x ^ y) #XOR bit a bit +print(~ x) #NOT bit a bit +print(x << 1) #dezplazar a la izq en bit +print(x >> 1) #dezplazar a la der en bit + + + + + +#ESTRUCTURAS DE CONTROL + +#condicionales +x = 10 +y = 20 +if x > y: + print("X ES MAYOR A Y") +elif x == y: + print("X ES IGUAL A Y") +else: + print("X ES MENOR A Y") + + +#iteraciones +for i in range(11): + print(i) + +y = 8 +while y <= 10: + print(y) + y += 1 + + +#excepciones +try: + print(10 / 10) +except: + print("hay un error") +finally: + print("se a completado la operacion") + + +#DIFICULTAD EXTRA +i = 10 +while i <= 55: + if i % 2 == 0 and i != 16 and i % 3 != 0: + print (i) + i += 1 + else: + i += 1 \ No newline at end of file From 8a5b9154506327d9cdf9bc610505459d0ac6223b Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Mon, 16 Sep 2024 20:54:35 -0500 Subject: [PATCH 322/539] Ejemplo sin ocp siguiendo el ejemplo del srp de la libreria --- Roadmap/27 - SOLID OCP/java/simonguzman.java | 45 ++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Roadmap/27 - SOLID OCP/java/simonguzman.java diff --git a/Roadmap/27 - SOLID OCP/java/simonguzman.java b/Roadmap/27 - SOLID OCP/java/simonguzman.java new file mode 100644 index 0000000000..e27356f486 --- /dev/null +++ b/Roadmap/27 - SOLID OCP/java/simonguzman.java @@ -0,0 +1,45 @@ + +import java.util.ArrayList; +import java.util.List; + +public class simonguzman { + public static void main(String[] args) { + libraryViolationOcp(); + } + + /*************************** Ejemplo sin ocp(Incorrecto) ***************************/ + static void libraryViolationOcp(){ + Library library = new Library(); + library.registerBook("El quijote"); + library.registerUser("Juan Perez"); + library.loanBook("El quijote", "Juan Perez"); + library.returnBook("El quijote", "Juan Perez"); + } + + static class Library{ + private List books = new ArrayList<>(); + private List users = new ArrayList<>(); + + public void registerBook(String book){ + books.add(book); + System.out.println("Libro registrado: " + book); + } + + public void registerUser(String user){ + users.add(user); + System.out.println("Usuario registrado: "+user); + } + + public void loanBook(String book, String user){ + if(books.contains(book)){ + System.out.println("Libro: " + book + " prestado a " + user); + }else{ + System.out.println("El libro no esta disponible"); + } + } + + public void returnBook(String book, String user){ + System.out.println("Libro: " + book + " devuelto por " + user); + } + } +} From 850e916d8ead7e18d9601dd96db189ac287d28bb Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Mon, 16 Sep 2024 21:27:10 -0500 Subject: [PATCH 323/539] Ejemplo con ocp con el enunciado de la libreria usado en srp --- Roadmap/27 - SOLID OCP/java/simonguzman.java | 115 ++++++++++++++++++- 1 file changed, 114 insertions(+), 1 deletion(-) diff --git a/Roadmap/27 - SOLID OCP/java/simonguzman.java b/Roadmap/27 - SOLID OCP/java/simonguzman.java index e27356f486..1436a3114c 100644 --- a/Roadmap/27 - SOLID OCP/java/simonguzman.java +++ b/Roadmap/27 - SOLID OCP/java/simonguzman.java @@ -4,9 +4,122 @@ public class simonguzman { public static void main(String[] args) { - libraryViolationOcp(); + //libraryViolationOcp(); + libraryFollowOCP(); } + /*************************** Ejemplo con ocp(Correcto) ***************************/ + static void libraryFollowOCP(){ + List books = new ArrayList<>(); + List users = new ArrayList<>(); + LibraryOcp library = new LibraryOcp(); + + LibraryOperation registerBook = new RegisterBookOperation("El Quijote", books); + library.performOperation(registerBook); + + LibraryOperation registerUser = new RegisterUserOperation("Juan Perez", users); + library.performOperation(registerUser); + + LibraryOperation loanBook = new LoanBookOperation("El Quijote", "Juan Perez", books); + library.performOperation(loanBook); + + LibraryOperation renewLoan = new RenewLoanOperation("El Quijote", "Juan Perez"); + library.performOperation(renewLoan); + } + + interface LibraryOperation{ + void execute(); + } + + static class RegisterBookOperation implements LibraryOperation{ + private String book; + private List books; + + public RegisterBookOperation(){ + + } + + public RegisterBookOperation(String book, List books){ + this.book = book; + this.books = books; + } + + @Override + public void execute() { + books.add(book); + System.out.println("Libro registrado: " + book); + } + } + + static class RegisterUserOperation implements LibraryOperation{ + private String user; + private List users; + + public RegisterUserOperation(){ + + } + + public RegisterUserOperation(String user, List users){ + this.user = user; + this.users = users; + } + @Override + public void execute() { + users.add(user); + System.out.println("Usuario registrado: "+user); + } + } + + static class LoanBookOperation implements LibraryOperation{ + private String book; + private String user; + private List books; + + public LoanBookOperation(){ + + } + + public LoanBookOperation(String book, String user, List books){ + this.book = book; + this.user = user; + this.books = books; + } + + @Override + public void execute() { + if(books.contains(book)){ + System.out.println("Libro: " + book + " usuario " + user); + }else{ + System.out.println("El libro no esta disponible."); + } + } + + } + + static class RenewLoanOperation implements LibraryOperation{ + private String book; + private String user; + + public RenewLoanOperation(){ + + } + + public RenewLoanOperation(String book, String user){ + this.book = book; + this.user = user; + } + + @Override + public void execute() { + System.out.println("El prestamo del libro " + book + " a sido renovado por " + user); + } + } + + static class LibraryOcp{ + public void performOperation(LibraryOperation operation){ + operation.execute(); + } + } /*************************** Ejemplo sin ocp(Incorrecto) ***************************/ static void libraryViolationOcp(){ Library library = new Library(); From 59e159c0c0581412daebfc32f0f26a68b6a2bc1b Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Mon, 16 Sep 2024 21:41:07 -0500 Subject: [PATCH 324/539] sintaxis para el ejercicio adicional sin osp --- Roadmap/27 - SOLID OCP/java/simonguzman.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Roadmap/27 - SOLID OCP/java/simonguzman.java b/Roadmap/27 - SOLID OCP/java/simonguzman.java index 1436a3114c..4e7a87d112 100644 --- a/Roadmap/27 - SOLID OCP/java/simonguzman.java +++ b/Roadmap/27 - SOLID OCP/java/simonguzman.java @@ -7,6 +7,19 @@ public static void main(String[] args) { //libraryViolationOcp(); libraryFollowOCP(); } + /*************************** Ejercicio adicional sin ocp(Incorrecto) ***************************/ + static class Calculator{ + public double calculate(String operation, double num1, double num2){ + switch (operation) { + case "sum": return num1 + num2; + case "substract": return num1 - num2; + case "multiply": return num1 * num2; + case "divide": return num1 / num2; + default: + throw new UnsupportedOperationException("Operacion no soportada"); + } + } + } /*************************** Ejemplo con ocp(Correcto) ***************************/ static void libraryFollowOCP(){ From c92c4148137609fb617f48c819136ffc877d25e7 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Mon, 16 Sep 2024 21:46:35 -0500 Subject: [PATCH 325/539] Ejercicio adicional con ocp puntos 1 y 2 completados --- Roadmap/27 - SOLID OCP/java/simonguzman.java | 40 ++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/Roadmap/27 - SOLID OCP/java/simonguzman.java b/Roadmap/27 - SOLID OCP/java/simonguzman.java index 4e7a87d112..646bac78c3 100644 --- a/Roadmap/27 - SOLID OCP/java/simonguzman.java +++ b/Roadmap/27 - SOLID OCP/java/simonguzman.java @@ -7,6 +7,46 @@ public static void main(String[] args) { //libraryViolationOcp(); libraryFollowOCP(); } + /*************************** Ejercicio adicional con ocp(Correcto) ***************************/ + interface Operation{ + double function(double num1, double num2); + } + + static class Addition implements Operation{ + @Override + public double function(double num1, double num2) { + return num1 + num2; + } + } + + static class Subtraction implements Operation{ + @Override + public double function(double num1, double num2) { + return num1 - num2; + } + } + + static class Multiplication implements Operation{ + @Override + public double function(double num1, double num2) { + return num1 * num2; + } + } + + static class Division implements Operation{ + @Override + public double function(double num1, double num2) { + return num1 / num2; + } + } + + static class CalculatorOCP{ + public double Calculate(Operation operation, double num1, double num2){ + return operation.function(num1, num2); + } + } + + /*************************** Ejercicio adicional sin ocp(Incorrecto) ***************************/ static class Calculator{ public double calculate(String operation, double num1, double num2){ From 387a00e19d33a2b46c34004a037393b2dbbed0cf Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Mon, 16 Sep 2024 21:47:43 -0500 Subject: [PATCH 326/539] Funcion para las potencias creada --- Roadmap/27 - SOLID OCP/java/simonguzman.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Roadmap/27 - SOLID OCP/java/simonguzman.java b/Roadmap/27 - SOLID OCP/java/simonguzman.java index 646bac78c3..ee2bf2a057 100644 --- a/Roadmap/27 - SOLID OCP/java/simonguzman.java +++ b/Roadmap/27 - SOLID OCP/java/simonguzman.java @@ -40,6 +40,13 @@ public double function(double num1, double num2) { } } + static class Power implements Operation{ + @Override + public double function(double num1, double num2) { + return Math.pow(num1, num2); + } + } + static class CalculatorOCP{ public double Calculate(Operation operation, double num1, double num2){ return operation.function(num1, num2); From 935827c49e58f965ee0ccc3118e22914378dfe03 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Mon, 16 Sep 2024 21:52:15 -0500 Subject: [PATCH 327/539] Ejercicio #27 completado --- Roadmap/27 - SOLID OCP/java/simonguzman.java | 45 +++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/Roadmap/27 - SOLID OCP/java/simonguzman.java b/Roadmap/27 - SOLID OCP/java/simonguzman.java index ee2bf2a057..95ace45d3e 100644 --- a/Roadmap/27 - SOLID OCP/java/simonguzman.java +++ b/Roadmap/27 - SOLID OCP/java/simonguzman.java @@ -5,9 +5,29 @@ public class simonguzman { public static void main(String[] args) { //libraryViolationOcp(); - libraryFollowOCP(); + //libraryFollowOCP(); + calculatorTest(); + calculatorOCPTest(); } /*************************** Ejercicio adicional con ocp(Correcto) ***************************/ + static void calculatorOCPTest(){ + CalculatorOCP calculator = new CalculatorOCP(); + + double resultAdd = calculator.Calculate(new Addition(), 10, 5); + System.out.println("Suma: " + resultAdd); + + double resultSub = calculator.Calculate(new Subtraction(), 10, 5); + System.out.println("Resta: " + resultSub); + + double resultMul = calculator.Calculate(new Multiplication(), 10, 5); + System.out.println("Multiplicación: " + resultMul); + + double resultDiv = calculator.Calculate(new Division(), 10, 5); + System.out.println("División: " + resultDiv); + + double resultPow = calculator.Calculate(new Power(), 2, 3); + System.out.println("Potencia: " + resultPow); + } interface Operation{ double function(double num1, double num2); } @@ -55,6 +75,29 @@ public double Calculate(Operation operation, double num1, double num2){ /*************************** Ejercicio adicional sin ocp(Incorrecto) ***************************/ + static void calculatorTest(){ + Calculator calculator = new Calculator(); + + double resultAdd = calculator.calculate("sum", 10, 5); + System.out.println("Suma: " + resultAdd); + + double resultSub = calculator.calculate("substract", 10, 5); + System.out.println("Resta: " + resultSub); + + double resultMul = calculator.calculate("multiply", 10, 5); + System.out.println("Multiplicación: " + resultMul); + + double resultDiv = calculator.calculate("divide", 10, 5); + System.out.println("División: " + resultDiv); + + try { + double resultPow = calculator.calculate("power", 2, 3); + System.out.println("Potencia: " + resultPow); + } catch (UnsupportedOperationException e) { + System.out.println("Error: " + e.getMessage()); + } + } + static class Calculator{ public double calculate(String operation, double num1, double num2){ switch (operation) { From 054a27adde0f81d9eaade0d1ae689e666d110e5e Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Mon, 16 Sep 2024 21:52:48 -0500 Subject: [PATCH 328/539] Descomentar todas las funciones para su prueba --- Roadmap/27 - SOLID OCP/java/simonguzman.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Roadmap/27 - SOLID OCP/java/simonguzman.java b/Roadmap/27 - SOLID OCP/java/simonguzman.java index 95ace45d3e..8e5c88f8b7 100644 --- a/Roadmap/27 - SOLID OCP/java/simonguzman.java +++ b/Roadmap/27 - SOLID OCP/java/simonguzman.java @@ -4,8 +4,8 @@ public class simonguzman { public static void main(String[] args) { - //libraryViolationOcp(); - //libraryFollowOCP(); + libraryViolationOcp(); + libraryFollowOCP(); calculatorTest(); calculatorOCPTest(); } From b9b3cdf20bee97c0864a017a44bbc6ae5a14de92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Heguaburu=20S=C3=A1nchez?= Date: Tue, 17 Sep 2024 00:06:35 -0300 Subject: [PATCH 329/539] #02-python --- .../python/NicoHeguaburu.py | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/python/NicoHeguaburu.py diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/python/NicoHeguaburu.py b/Roadmap/02 - FUNCIONES Y ALCANCE/python/NicoHeguaburu.py new file mode 100644 index 0000000000..a09dd989cc --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/python/NicoHeguaburu.py @@ -0,0 +1,117 @@ +#funciones basicas + +#simples +def saludar(): + print("Hola Python") + +saludar() + +#retorno +def funcion_de_retorno(): + return "retorno de funcion" + +print(funcion_de_retorno()) + +#con argumento + +def saludo_de_cumpleaños(años, nombre): + print(f"felicidades por tus {años} años {nombre}") + +saludo_de_cumpleaños(33, "mateo") + + +#con un argumento predeterminado +def saludo_de_cumpleaños_predeterminado(años, nombre="crack!"): + print(f"felicidades por tus {años} años {nombre}") + +saludo_de_cumpleaños_predeterminado(33) + + +#con retorno de varios valores + +def retorno_multiple(): + return "Hola","Maxi" + +saludo, nombre = retorno_multiple() +print(saludo) +print(nombre) + +#funciones con numero variable de argumentos + +def argumentos_multiples_variables(*names): + for name in names: + print(f"Hola, {name}!") + + +argumentos_multiples_variables("Nicolás", "Maxi", "Pepe", "Lorena", "Melani") + + +#con numero variable de argumentos con palabra clave + +def argumentos_multiples_variables(**names): + for key, value in names.items(): + print(f"{value} ({key})!") + + +argumentos_multiples_variables( + name = "Nicolás", + edad = 32, + idioma = "español", + nacionalidad = "uruguayo", + ) + + + + + +#FUNCIONES DENTRO DE FUNCIONES + +def funcion_contenedora(): + def funcion_contenida(): + print("soy una funcion interna") + funcion_contenida() + +funcion_contenedora() + + +#FUNCIONES YA CREADAS EN PYTHON + +print(len("Nicolás Heguaburu")) +print(type(32)) +print("nico".upper()) + + +# Variables locales y globales + +global_var = "python" + +print(global_var) + +def hola_python(): + local_var = "hola" #solo la puedo llamar en la funcion hola_python() + print(f"Hola {global_var}") + +hola_python() + + + +#EJERCICIO EXTRA + +def mi_funcion (str1, str2): + num = 0 + for i in range(1, 101): + if i % 3 == 0 and i % 5 == 0: + print(f"{str1} y {str2}") + elif i % 3 == 0: + print(str1) + elif i % 5 == 0: + print(str2) + else: + print(i) + num += 1 + return num + + + +print(mi_funcion("soy multiplo de 3", "soy multiplo de 5")) + From ea0b12dc342bbd036291fa573fd8a5c4960cc949 Mon Sep 17 00:00:00 2001 From: kenysdev Date: Mon, 16 Sep 2024 23:26:03 -0500 Subject: [PATCH 330/539] 38 - Python - winners in csv --- Roadmap/38 - MOUREDEV PRO/python/kenysdev.py | 80 ++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/kenysdev.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/kenysdev.py b/Roadmap/38 - MOUREDEV PRO/python/kenysdev.py new file mode 100644 index 0000000000..3d9860ed35 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/kenysdev.py @@ -0,0 +1,80 @@ +# _____________________________________ +# https://github.com/kenysdev +# 2024 - Python +# _____________________________________ +# 38 MOUREDEV PRO +# ------------------------------------ +""" + * He presentado mi proyecto más importante del año: mouredev pro. + * Un campus para la comunidad, que lanzaré en octubre, donde estudiar + * programación de una manera diferente. + * Cualquier persona suscrita a la newsletter de https://mouredev.pro + * accederá a sorteos mensuales de suscripciones, regalos y descuentos. + * + * Desarrolla un programa que lea los registros de un fichero .csv y + * seleccione de manera aleatoria diferentes ganadores. + * Requisitos: + * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + * o "inactivo" (y datos ficticios). + * Ejemplo: 1 | test@test.com | activo + * 2 | test2@test.com | inactivo + * (El .csv no debe subirse como parte de la corrección) + * 2. Recupera los datos desde el programa y selecciona email aleatorios. + * Acciones: + * 1. Accede al fichero .csv y selecciona de manera aleatoria un email + * ganador de una suscripción, otro ganador de un descuento y un último + * ganador de un libro (sólo si tiene status "activo" y no está repetido). + * 2. Muestra los emails ganadores y su id. + * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + * no debe tenerse en cuenta. +""" + +import csv +import random +from typing import Optional + +def read_csv(file_path) -> Optional[list]: + try: + with open(file_path, 'r') as file: + reader = csv.DictReader(file) + return list(reader) + except Exception as e: + print(f"Error reading '{file_path}': {e}") + return None + +def get_active_entries(entries) -> list: + active_entries = [] + + for entry in entries: + if entry['status'].lower() == "active": + active_entry = { + 'id': entry['id'], + 'email': entry['email'], + 'status': entry['status'] + } + active_entries.append(active_entry) + + return active_entries + +def select_winners(active_entries, num_winners) -> list: + return random.sample(active_entries, min(num_winners, len(active_entries))) + +def distribute_prizes(winners, prizes): + random.shuffle(prizes) + for winner, prize in zip(winners, prizes): + print(f"{prize:<11} -> Id({winner['id']}): {winner['email']}") + +if __name__ == "__main__": + print("Usuarios ganadores de 'MOUREDEV PRO:'") + csv_file = 'users.csv' + prizes = ["Suscripción", "Descuento", "Libro"] + + entries = read_csv(csv_file) + if entries: + active_entries = get_active_entries(entries) + winners = select_winners(active_entries, 3) + distribute_prizes(winners, prizes) + + else: + print("No se encontraron entradas activas.") + From 0c0770eafd12b9d827d7f0ed330d383212474e46 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Tue, 17 Sep 2024 01:02:52 -0400 Subject: [PATCH 331/539] 37 - JavaScript --- .../javascript/RicJDev.js | 94 +++++++------------ 1 file changed, 32 insertions(+), 62 deletions(-) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js index bc0b3644e4..e6b5f9853c 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js @@ -1,11 +1,13 @@ -/** - * Genera un token de acceso, necesario para hacer peticiones a la API de Spotify. - * - * @param {string} clientId - * @param {string} clientSecret - * - * @see https://developer.spotify.com/dashboard - */ +import { CLIENT_ID, CLIENT_SECRET } from './client.js' + +/* +IMPORTANTE: + +Estoy importando mis id's del archivo client.js, el cual no está subido al repo. +Si desea ejecutar este código deberá usar sus propias id's. +*/ + +// Creamos una función para obtener el token de acceso. async function getToken(clientId, clientSecret) { const token = await fetch('https://accounts.spotify.com/api/token', { @@ -18,89 +20,57 @@ async function getToken(clientId, clientSecret) { client_id: clientId, client_secret: clientSecret, }), - }).then((response) => response.json()) + }).then((response) => { + if (response.status !== 200) { + throw new Error(`Falla al obtener respuesta de la API. ${response.json()}`) + } - return token -} - -/* + return response.json() + }) -* IMPORTANTE * + return token['access_token'] +} -Estoy importando mis id's del archivo RicJDev_client.js (lo cual dará error, ya que no lo he subido al repo). -Si desea ejecutar este código deberá usar sus propias id's. +const accessToken = await getToken(CLIENT_ID, CLIENT_SECRET) -*/ +console.log(accessToken) -import { myClientId, myClientSecret } from './RicJDev_client.js' - -const token = await getToken(myClientId, myClientSecret) -const GET_requestMethod = { +const authorization = { method: 'GET', headers: { - Authorization: `${token.token_type} ${token.access_token}`, + Authorization: `Bearer ${accessToken}`, }, } -/** - * Retorna la información sobre un artista utilizando la API de Spotify. - * - * @param {string} artistId se obtiene de la página del artista en Spotify (https://open.spotify.com/intl-es/artist/ `artistId`). - * @returns {Promise} - * - * @see https://developer.spotify.com/dashboard - */ - async function getArtistData(artistId) { - const artistData = await fetch( - `https://api.spotify.com/v1/artists/${artistId}`, - GET_requestMethod - ).then((response) => response.json()) + const url = `https://api.spotify.com/v1/artists/${artistId}` + const artistData = await fetch(url, authorization).then((response) => response.json()) return artistData } -/** - * Retorna la data de los albums de un artista utilizando la API de Spotify. - * - * @param {string} artistId se obtiene de la página del artista en Spotify (https://open.spotify.com/intl-es/artist/ `artistId`). - * - * @see https://developer.spotify.com/dashboard - */ - async function getArtistAlbumsData(artistId) { - const artistData = await fetch( - `https://api.spotify.com/v1/artists/${artistId}/albums?include_groups=album,single&market=VE&limit=50`, - GET_requestMethod - ).then((response) => response.json()) + const url = `https://api.spotify.com/v1/artists/${artistId}/albums?include_groups=album,single&market=VE&limit=50` + const albumData = await fetch(url, authorization).then((response) => response.json()) - return artistData + return albumData } // Almacenamos las id's de Oasis y Linkin Park. const Oasis = { id: '2DaxqgrOhkeH0fpeiQq2f4', - - data: null, - - topTracks: null, - - albums: null, } const LinkinPark = { id: '6XyY86QOPPrYVGvF9ch6wz', - - data: null, - - topTracks: null, - - albums: null, } -Oasis.data = await getArtistData(Oasis.id, token) -LinkinPark.data = await getArtistData(Oasis.id, token) +Oasis.data = await getArtistData(Oasis.id) +LinkinPark.data = await getArtistData(Oasis.id) + +console.log(Oasis.data) +console.log(LinkinPark.data) /* TODO: From b07d257e967cf3d61a52f67064ce3990e253e549 Mon Sep 17 00:00:00 2001 From: Mario Barbero Date: Tue, 17 Sep 2024 10:23:07 +0200 Subject: [PATCH 332/539] Reto #07 - Python --- .../07 - PILAS Y COLAS/python/elbarbero.py | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 Roadmap/07 - PILAS Y COLAS/python/elbarbero.py diff --git a/Roadmap/07 - PILAS Y COLAS/python/elbarbero.py b/Roadmap/07 - PILAS Y COLAS/python/elbarbero.py new file mode 100644 index 0000000000..3716c552ad --- /dev/null +++ b/Roadmap/07 - PILAS Y COLAS/python/elbarbero.py @@ -0,0 +1,64 @@ +""" + * EJERCICIO: + * Implementa los mecanismos de introducción y recuperación de elementos propios de las + * pilas (stacks - LIFO) y las colas (queue - FIFO) utilizando una estructura de array + * o lista (dependiendo de las posibilidades de tu lenguaje). + * + * DIFICULTAD EXTRA (opcional): + * - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás + * de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle + * que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web. + * Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como + * el nombre de una nueva web. + * - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una + * impresora compartida que recibe documentos y los imprime cuando así se le indica. + * La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se + * interpretan como nombres de documentos. + """ + +from collections import deque + +def navigationWeb(): + webs = ["https://es.wikipedia.org/wiki/Wikipedia:Portada", "https://es.wikipedia.org/wiki/Gran_Premio_de_Abu_Dabi", "https://es.wikipedia.org/wiki/Lewis_Hamilton", "https://es.wikipedia.org/wiki/Fernando_Alonso", "https://es.wikipedia.org/wiki/Asturias"] + index = len(webs)-1 + print(f"Estás en la web {webs[index]}") + action = input("Introduce acción: ") + if action.lower() == "adelante": + index += 1 + elif action.lower() == "atras": + index -= 1 + else: + print("Comando incorrecto") + + if index > 0 and index <= len(webs)-1: + new_url = webs[index] + print(f"Estás en la web {new_url}") + else: + print("Has llegado al limite") + +def printer(): + docs = deque(["mi_Doc.docx", "mi_Doc_FINAL.docx", "mi_Doc_ELBUENO.docx", "mi_Doc_BUENO_FINAL.pdf"]) + action = input("Introduce acción: ") + if action.lower() == "imprimir": + print(f"Estás imprimiendo el documento {docs.popleft()}") + else: + print("Comando incorrecto") + +if __name__ == "__main__": + + # LIFO + stack = [5, 6, 14, 52] + stack.append(9) + print(f"LIFO in list {stack}-> {stack.pop()}") + + # FIFO + queue = deque([5, 6, 14, 52]) + queue.append(9) + print(f"FIFO in list {queue} -> {queue.popleft()}") + + # Navegador web + navigationWeb() + + # Impresion documentos + printer() + From 0c4caf17948fb1f4af27ddc3c67f920f572c550b Mon Sep 17 00:00:00 2001 From: miguelex Date: Tue, 17 Sep 2024 10:29:49 +0200 Subject: [PATCH 333/539] #37 - php --- .../javascript/miguelex.js | 116 ++++++++++++++ .../php/miguelex.php | 144 ++++++++++++++++++ 2 files changed, 260 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/javascript/miguelex.js create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/php/miguelex.php diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/miguelex.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/miguelex.js new file mode 100644 index 0000000000..fb97b16bab --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/miguelex.js @@ -0,0 +1,116 @@ +const readline = require('readline'); + +// Configurar la interfaz para leer la entrada de la terminal +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +const clientId = '4cc0a0d989f54e4f8e44da158cf646b0'; +const clientSecret = '05fa3d3be3c54a4d941d648c980ca228'; + +// Obtener el token de acceso de Spotify +async function getAccessToken() { + const response = await fetch('https://accounts.spotify.com/api/token', { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Authorization': 'Basic ' + btoa(clientId + ':' + clientSecret), + }, + body: 'grant_type=client_credentials' + }); + const data = await response.json(); + return data.access_token; +} + +// Obtener datos de una banda por su nombre +async function getArtistData(token, artistName) { + const response = await fetch(`https://api.spotify.com/v1/search?q=${artistName}&type=artist`, { + method: 'GET', + headers: { + 'Authorization': `Bearer ${token}` + } + }); + const data = await response.json(); + return data.artists.items[0]; // Retorna la primera coincidencia +} + +// Obtener las estadísticas principales +async function getArtistStats(artistId, token) { + const response = await fetch(`https://api.spotify.com/v1/artists/${artistId}`, { + method: 'GET', + headers: { + 'Authorization': `Bearer ${token}` + } + }); + const data = await response.json(); + return { + name: data.name, + followers: data.followers.total, + popularity: data.popularity, + genres: data.genres, + }; +} + +// Obtener las canciones más populares de un artista +async function getArtistTopTracks(artistId, token) { + const response = await fetch(`https://api.spotify.com/v1/artists/${artistId}/top-tracks?market=US`, { + method: 'GET', + headers: { + 'Authorization': `Bearer ${token}` + } + }); + const data = await response.json(); + const mostPopularTrack = data.tracks[0]; // La canción más popular es la primera + return { + name: mostPopularTrack.name, + playCount: mostPopularTrack.popularity, // Popularidad de la canción + album: mostPopularTrack.album.name + }; +} + +// Función para comparar las bandas introducidas por el usuario +async function compareBands(band1, band2) { + const token = await getAccessToken(); + + const band1Data = await getArtistData(token, band1); + const band2Data = await getArtistData(token, band2); + + const band1Stats = await getArtistStats(band1Data.id, token); + const band2Stats = await getArtistStats(band2Data.id, token); + + const band1TopTrack = await getArtistTopTracks(band1Data.id, token); + const band2TopTrack = await getArtistTopTracks(band2Data.id, token); + + console.log(`\n${band1} Stats:`, band1Stats); + console.log(`Canción más popular de ${band1}:`, band1TopTrack); + + console.log(`\n${band2} Stats:`, band2Stats); + console.log(`Canción más popular de ${band2}:`, band2TopTrack); + + // Comparar seguidores + const moreFollowers = (band1Stats.followers > band2Stats.followers) + ? band1 + : band2; + + // Comparar popularidad de las canciones + const morePopularTrack = (band1TopTrack.playCount > band2TopTrack.playCount) + ? band1 + : band2; + + console.log(`\nLa banda con más seguidores es: ${moreFollowers}`); + console.log(`La banda con la canción más popular es: ${morePopularTrack}`); +} + +// Capturar la entrada del usuario desde la terminal +rl.question('Introduce el nombre del primer grupo: ', (band1) => { + rl.question('Introduce el nombre del segundo grupo: ', (band2) => { + // Llamar a la función de comparación + compareBands(band1, band2).then(() => { + rl.close(); // Cerrar la interfaz de readline + }).catch(err => { + console.error('Error al comparar las bandas:', err); + rl.close(); + }); + }); +}); diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/php/miguelex.php b/Roadmap/37 - OASIS VS LINKIN PARK/php/miguelex.php new file mode 100644 index 0000000000..68e697bfce --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/php/miguelex.php @@ -0,0 +1,144 @@ + [ + 'header' => "Content-Type: application/x-www-form-urlencoded\r\n" . + "Authorization: Basic " . $auth . "\r\n", + 'method' => 'POST', + 'content' => http_build_query(['grant_type' => 'client_credentials']), + ] + ]; + + $context = stream_context_create($options); + $result = file_get_contents('https://accounts.spotify.com/api/token', false, $context); + + if ($result === FALSE) { + die('Error getting access token.'); + } + + $data = json_decode($result, true); + return $data['access_token']; +} + +function getArtistData($token, $artistName) { + $artistName = urlencode($artistName); + $options = [ + 'http' => [ + 'header' => "Authorization: Bearer " . $token . "\r\n", + 'method' => 'GET', + ] + ]; + + $context = stream_context_create($options); + $result = file_get_contents("https://api.spotify.com/v1/search?q=$artistName&type=artist", false, $context); + + if ($result === FALSE) { + die('Error getting artist data.'); + } + + $data = json_decode($result, true); + return $data['artists']['items'][0]; // Retorna la primera coincidencia +} + +// Función para obtener las estadísticas del artista +function getArtistStats($artistId, $token) { + $options = [ + 'http' => [ + 'header' => "Authorization: Bearer " . $token . "\r\n", + 'method' => 'GET', + ] + ]; + + $context = stream_context_create($options); + $result = file_get_contents("https://api.spotify.com/v1/artists/$artistId", false, $context); + + if ($result === FALSE) { + die('Error getting artist stats.'); + } + + $data = json_decode($result, true); + return [ + 'name' => $data['name'], + 'followers' => $data['followers']['total'], + 'popularity' => $data['popularity'], + 'genres' => $data['genres'], + ]; +} + +// Función para obtener la canción más popular de un artista +function getArtistTopTracks($artistId, $token) { + $options = [ + 'http' => [ + 'header' => "Authorization: Bearer " . $token . "\r\n", + 'method' => 'GET', + ] + ]; + + $context = stream_context_create($options); + $result = file_get_contents("https://api.spotify.com/v1/artists/$artistId/top-tracks?market=US", false, $context); + + if ($result === FALSE) { + die('Error getting top tracks.'); + } + + $data = json_decode($result, true); + $mostPopularTrack = $data['tracks'][0]; // La canción más popular es la primera + return [ + 'name' => $mostPopularTrack['name'], + 'playCount' => $mostPopularTrack['popularity'], // No se obtiene el número exacto de reproducciones + 'album' => $mostPopularTrack['album']['name'] + ]; +} + +function compareBands($band1, $band2) { + $token = getAccessToken(); + + $band1Data = getArtistData($token, $band1); + $band2Data = getArtistData($token, $band2); + + $band1Stats = getArtistStats($band1Data['id'], $token); + $band2Stats = getArtistStats($band2Data['id'], $token); + + $band1TopTrack = getArtistTopTracks($band1Data['id'], $token); + $band2TopTrack = getArtistTopTracks($band2Data['id'], $token); + + echo "\n{$band1} Stats:\n"; + print_r($band1Stats); + echo "Canción más popular de {$band1}: "; + print_r($band1TopTrack); + + echo "\n{$band2} Stats:\n"; + print_r($band2Stats); + echo "Canción más popular de {$band2}: "; + print_r($band2TopTrack); + + // Comparar seguidores + $moreFollowers = ($band1Stats['followers'] > $band2Stats['followers']) + ? $band1 + : $band2; + + // Comparar popularidad de las canciones + $morePopularTrack = ($band1TopTrack['playCount'] > $band2TopTrack['playCount']) + ? $band1 + : $band2; + + echo "\nLa banda con más seguidores es: {$moreFollowers}\n"; + echo "La banda con la canción más popular es: {$morePopularTrack}\n"; +} + +// Solicitar el nombre de las bandas al usuario +echo "Introduce el nombre del primer grupo: "; +$band1 = trim(fgets(STDIN)); + +echo "Introduce el nombre del segundo grupo: "; +$band2 = trim(fgets(STDIN)); + +compareBands($band1, $band2); \ No newline at end of file From d3272918ea9c4f85763c54576f2d5ff836400c13 Mon Sep 17 00:00:00 2001 From: miguelex Date: Tue, 17 Sep 2024 10:35:50 +0200 Subject: [PATCH 334/539] #37 - php --- .../java/miguelex.java | 131 ++++++++++++++++++ .../javascript/miguelex.js | 18 +-- .../php/miguelex.php | 16 +-- .../python/miguelex.py | 78 +++++++++++ .../typescript/miguelex.ts | 89 ++++++++++++ 5 files changed, 307 insertions(+), 25 deletions(-) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/java/miguelex.java create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/miguelex.py create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/typescript/miguelex.ts diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/java/miguelex.java b/Roadmap/37 - OASIS VS LINKIN PARK/java/miguelex.java new file mode 100644 index 0000000000..140457bb6b --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/java/miguelex.java @@ -0,0 +1,131 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.Base64; +import java.util.Scanner; +import org.json.JSONArray; +import org.json.JSONObject; + +public class SpotifyComparison { + + private static final String CLIENT_ID = "YOUR_CLIENT_ID"; + private static final String CLIENT_SECRET = "YOUR_CLIENT_SECRET"; + + public static void main(String[] args) throws Exception { + Scanner scanner = new Scanner(System.in); + + System.out.print("Introduce el nombre del primer grupo: "); + String band1 = scanner.nextLine(); + System.out.print("Introduce el nombre del segundo grupo: "); + String band2 = scanner.nextLine(); + + String token = getAccessToken(); + + JSONObject band1Data = getArtistData(token, band1); + JSONObject band2Data = getArtistData(token, band2); + + JSONObject band1Stats = getArtistStats(band1Data.getString("id"), token); + JSONObject band2Stats = getArtistStats(band2Data.getString("id"), token); + + JSONObject band1TopTrack = getArtistTopTrack(band1Data.getString("id"), token); + JSONObject band2TopTrack = getArtistTopTrack(band2Data.getString("id"), token); + + System.out.println("\n" + band1 + " Stats: " + band1Stats); + System.out.println("Canción más popular de " + band1 + ": " + band1TopTrack); + + System.out.println("\n" + band2 + " Stats: " + band2Stats); + System.out.println("Canción más popular de " + band2 + ": " + band2TopTrack); + + String moreFollowers = band1Stats.getInt("followers") > band2Stats.getInt("followers") ? band1 : band2; + String morePopularTrack = band1TopTrack.getInt("playCount") > band2TopTrack.getInt("playCount") ? band1 : band2; + + System.out.println("\nLa banda con más seguidores es: " + moreFollowers); + System.out.println("La banda con la canción más popular es: " + morePopularTrack); + } + + private static String getAccessToken() throws Exception { + String auth = CLIENT_ID + ":" + CLIENT_SECRET; + String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes()); + + URL url = new URL("https://accounts.spotify.com/api/token"); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Authorization", "Basic " + encodedAuth); + conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + conn.setDoOutput(true); + + String data = "grant_type=client_credentials"; + conn.getOutputStream().write(data.getBytes()); + + BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String inputLine; + StringBuilder response = new StringBuilder(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + JSONObject json = new JSONObject(response.toString()); + return json.getString("access_token"); + } + + private static JSONObject getArtistData(String token, String artistName) throws Exception { + URL url = new URL("https://api.spotify.com/v1/search?q=" + artistName + "&type=artist"); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Authorization", "Bearer " + token); + + BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String inputLine; + StringBuilder response = new StringBuilder(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + JSONObject json = new JSONObject(response.toString()); + JSONArray items = json.getJSONObject("artists").getJSONArray("items"); + return items.getJSONObject(0); + } + + private static JSONObject getArtistStats(String artistId, String token) throws Exception { + URL url = new URL("https://api.spotify.com/v1/artists/" + artistId); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Authorization", "Bearer " + token); + + BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String inputLine; + StringBuilder response = new StringBuilder(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + return new JSONObject(response.toString()); + } + + private static JSONObject getArtistTopTrack(String artistId, String token) throws Exception { + URL url = new URL("https://api.spotify.com/v1/artists/" + artistId + "/top-tracks?market=US"); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Authorization", "Bearer " + token); + + BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String inputLine; + StringBuilder response = new StringBuilder(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + JSONObject json = new JSONObject(response.toString()); + JSONArray tracks = json.getJSONArray("tracks"); + return tracks.getJSONObject(0); + } +} diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/miguelex.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/miguelex.js index fb97b16bab..527c061a48 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/miguelex.js +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/miguelex.js @@ -1,6 +1,5 @@ const readline = require('readline'); -// Configurar la interfaz para leer la entrada de la terminal const rl = readline.createInterface({ input: process.stdin, output: process.stdout @@ -9,7 +8,6 @@ const rl = readline.createInterface({ const clientId = '4cc0a0d989f54e4f8e44da158cf646b0'; const clientSecret = '05fa3d3be3c54a4d941d648c980ca228'; -// Obtener el token de acceso de Spotify async function getAccessToken() { const response = await fetch('https://accounts.spotify.com/api/token', { method: 'POST', @@ -23,7 +21,6 @@ async function getAccessToken() { return data.access_token; } -// Obtener datos de una banda por su nombre async function getArtistData(token, artistName) { const response = await fetch(`https://api.spotify.com/v1/search?q=${artistName}&type=artist`, { method: 'GET', @@ -32,10 +29,9 @@ async function getArtistData(token, artistName) { } }); const data = await response.json(); - return data.artists.items[0]; // Retorna la primera coincidencia + return data.artists.items[0]; } -// Obtener las estadísticas principales async function getArtistStats(artistId, token) { const response = await fetch(`https://api.spotify.com/v1/artists/${artistId}`, { method: 'GET', @@ -52,7 +48,6 @@ async function getArtistStats(artistId, token) { }; } -// Obtener las canciones más populares de un artista async function getArtistTopTracks(artistId, token) { const response = await fetch(`https://api.spotify.com/v1/artists/${artistId}/top-tracks?market=US`, { method: 'GET', @@ -61,15 +56,14 @@ async function getArtistTopTracks(artistId, token) { } }); const data = await response.json(); - const mostPopularTrack = data.tracks[0]; // La canción más popular es la primera + const mostPopularTrack = data.tracks[0]; return { name: mostPopularTrack.name, - playCount: mostPopularTrack.popularity, // Popularidad de la canción + playCount: mostPopularTrack.popularity, album: mostPopularTrack.album.name }; } -// Función para comparar las bandas introducidas por el usuario async function compareBands(band1, band2) { const token = await getAccessToken(); @@ -88,12 +82,10 @@ async function compareBands(band1, band2) { console.log(`\n${band2} Stats:`, band2Stats); console.log(`Canción más popular de ${band2}:`, band2TopTrack); - // Comparar seguidores const moreFollowers = (band1Stats.followers > band2Stats.followers) ? band1 : band2; - // Comparar popularidad de las canciones const morePopularTrack = (band1TopTrack.playCount > band2TopTrack.playCount) ? band1 : band2; @@ -102,12 +94,10 @@ async function compareBands(band1, band2) { console.log(`La banda con la canción más popular es: ${morePopularTrack}`); } -// Capturar la entrada del usuario desde la terminal rl.question('Introduce el nombre del primer grupo: ', (band1) => { rl.question('Introduce el nombre del segundo grupo: ', (band2) => { - // Llamar a la función de comparación compareBands(band1, band2).then(() => { - rl.close(); // Cerrar la interfaz de readline + rl.close(); }).catch(err => { console.error('Error al comparar las bandas:', err); rl.close(); diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/php/miguelex.php b/Roadmap/37 - OASIS VS LINKIN PARK/php/miguelex.php index 68e697bfce..659fafa960 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/php/miguelex.php +++ b/Roadmap/37 - OASIS VS LINKIN PARK/php/miguelex.php @@ -1,9 +1,8 @@ [ @@ -73,7 +71,6 @@ function getArtistStats($artistId, $token) { ]; } -// Función para obtener la canción más popular de un artista function getArtistTopTracks($artistId, $token) { $options = [ 'http' => [ @@ -90,10 +87,10 @@ function getArtistTopTracks($artistId, $token) { } $data = json_decode($result, true); - $mostPopularTrack = $data['tracks'][0]; // La canción más popular es la primera + $mostPopularTrack = $data['tracks'][0]; return [ 'name' => $mostPopularTrack['name'], - 'playCount' => $mostPopularTrack['popularity'], // No se obtiene el número exacto de reproducciones + 'playCount' => $mostPopularTrack['popularity'], 'album' => $mostPopularTrack['album']['name'] ]; } @@ -120,12 +117,10 @@ function compareBands($band1, $band2) { echo "Canción más popular de {$band2}: "; print_r($band2TopTrack); - // Comparar seguidores $moreFollowers = ($band1Stats['followers'] > $band2Stats['followers']) ? $band1 : $band2; - // Comparar popularidad de las canciones $morePopularTrack = ($band1TopTrack['playCount'] > $band2TopTrack['playCount']) ? $band1 : $band2; @@ -134,7 +129,6 @@ function compareBands($band1, $band2) { echo "La banda con la canción más popular es: {$morePopularTrack}\n"; } -// Solicitar el nombre de las bandas al usuario echo "Introduce el nombre del primer grupo: "; $band1 = trim(fgets(STDIN)); diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/miguelex.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/miguelex.py new file mode 100644 index 0000000000..b80c77cffc --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/miguelex.py @@ -0,0 +1,78 @@ +import base64 +import requests + +client_id = 'YOUR_CLIENT_ID' +client_secret = 'YOUR_CLIENT_SECRET' + +def get_access_token(): + auth = base64.b64encode(f"{client_id}:{client_secret}".encode()).decode() + headers = { + 'Authorization': f'Basic {auth}', + 'Content-Type': 'application/x-www-form-urlencoded' + } + data = { + 'grant_type': 'client_credentials' + } + response = requests.post('https://accounts.spotify.com/api/token', headers=headers, data=data) + return response.json()['access_token'] + +def get_artist_data(token, artist_name): + headers = { + 'Authorization': f'Bearer {token}' + } + response = requests.get(f"https://api.spotify.com/v1/search?q={artist_name}&type=artist", headers=headers) + return response.json()['artists']['items'][0] +def get_artist_stats(artist_id, token): + headers = { + 'Authorization': f'Bearer {token}' + } + response = requests.get(f"https://api.spotify.com/v1/artists/{artist_id}", headers=headers) + data = response.json() + return { + 'name': data['name'], + 'followers': data['followers']['total'], + 'popularity': data['popularity'], + 'genres': data['genres'] + } + +def get_artist_top_tracks(artist_id, token): + headers = { + 'Authorization': f'Bearer {token}' + } + response = requests.get(f"https://api.spotify.com/v1/artists/{artist_id}/top-tracks?market=US", headers=headers) + data = response.json() + most_popular_track = data['tracks'][0] + return { + 'name': most_popular_track['name'], + 'playCount': most_popular_track['popularity'], + 'album': most_popular_track['album']['name'] + } + +def compare_bands(band1, band2): + token = get_access_token() + + band1_data = get_artist_data(token, band1) + band2_data = get_artist_data(token, band2) + + band1_stats = get_artist_stats(band1_data['id'], token) + band2_stats = get_artist_stats(band2_data['id'], token) + + band1_top_track = get_artist_top_tracks(band1_data['id'], token) + band2_top_track = get_artist_top_tracks(band2_data['id'], token) + + print(f"\n{band1} Stats:", band1_stats) + print(f"Canción más popular de {band1}:", band1_top_track) + + print(f"\n{band2} Stats:", band2_stats) + print(f"Canción más popular de {band2}:", band2_top_track) + + more_followers = band1 if band1_stats['followers'] > band2_stats['followers'] else band2 + more_popular_track = band1 if band1_top_track['playCount'] > band2_top_track['playCount'] else band2 + + print(f"\nLa banda con más seguidores es: {more_followers}") + print(f"La banda con la canción más popular es: {more_popular_track}") + +band1 = input("Introduce el nombre del primer grupo: ") +band2 = input("Introduce el nombre del segundo grupo: ") + +compare_bands(band1, band2) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/typescript/miguelex.ts b/Roadmap/37 - OASIS VS LINKIN PARK/typescript/miguelex.ts new file mode 100644 index 0000000000..677728a229 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/typescript/miguelex.ts @@ -0,0 +1,89 @@ +import fetch from 'node-fetch'; +import readlineSync from 'readline-sync'; + +const clientId = 'YOUR_CLIENT_ID'; +const clientSecret = 'YOUR_CLIENT_SECRET'; + +async function getAccessToken(): Promise { + const response = await fetch('https://accounts.spotify.com/api/token', { + method: 'POST', + headers: { + 'Authorization': `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString('base64')}`, + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: 'grant_type=client_credentials', + }); + + const data = await response.json(); + return data.access_token; +} + +async function getArtistData(token: string, artistName: string) { + const response = await fetch(`https://api.spotify.com/v1/search?q=${encodeURIComponent(artistName)}&type=artist`, { + headers: { + 'Authorization': `Bearer ${token}` + } + }); + const data = await response.json(); + return data.artists.items[0]; +} + +async function getArtistStats(artistId: string, token: string) { + const response = await fetch(`https://api.spotify.com/v1/artists/${artistId}`, { + headers: { + 'Authorization': `Bearer ${token}` + } + }); + const data = await response.json(); + return { + name: data.name, + followers: data.followers.total, + popularity: data.popularity, + genres: data.genres + }; +} + +async function getArtistTopTracks(artistId: string, token: string) { + const response = await fetch(`https://api.spotify.com/v1/artists/${artistId}/top-tracks?market=US`, { + headers: { + 'Authorization': `Bearer ${token}` + } + }); + const data = await response.json(); + const mostPopularTrack = data.tracks[0]; + return { + name: mostPopularTrack.name, + playCount: mostPopularTrack.popularity, + album: mostPopularTrack.album.name + }; +} + +async function compareBands(band1: string, band2: string) { + const token = await getAccessToken(); + + const band1Data = await getArtistData(token, band1); + const band2Data = await getArtistData(token, band2); + + const band1Stats = await getArtistStats(band1Data.id, token); + const band2Stats = await getArtistStats(band2Data.id, token); + + const band1TopTrack = await getArtistTopTracks(band1Data.id, token); + const band2TopTrack = await getArtistTopTracks(band2Data.id, token); + + console.log(`${band1} Stats:`, band1Stats); + console.log(`Canción más popular de ${band1}:`, band1TopTrack); + + console.log(`${band2} Stats:`, band2Stats); + console.log(`Canción más popular de ${band2}:`, band2TopTrack); + + const moreFollowers = (band1Stats.followers > band2Stats.followers) ? band1 : band2; + const morePopularTrack = (band1TopTrack.playCount > band2TopTrack.playCount) ? band1 : band2; + + console.log(`\nLa banda con más seguidores es: ${moreFollowers}`); + console.log(`La banda con la canción más popular es: ${morePopularTrack}`); +} + +const band1 = readlineSync.question('Introduce el nombre del primer grupo: '); +const band2 = readlineSync.question('Introduce el nombre del segundo grupo: '); + +compareBands(band1, band2); From 93ea050128f965ea185c9f55aebd02b0bb95f31f Mon Sep 17 00:00:00 2001 From: fborjalv Date: Tue, 17 Sep 2024 11:28:36 +0200 Subject: [PATCH 335/539] #34 - Python --- .../python/fborjalv.py" | 159 ++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 "Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/fborjalv.py" diff --git "a/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/fborjalv.py" "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/fborjalv.py" new file mode 100644 index 0000000000..1547d1fce3 --- /dev/null +++ "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/python/fborjalv.py" @@ -0,0 +1,159 @@ +""" +/* + * EJERCICIO: + * ¡La Casa del Dragón ha finalizado y no volverá hasta 2026! + * ¿Alguien se entera de todas las relaciones de parentesco + * entre personajes que aparecen en la saga? + * Desarrolla un árbol genealógico para relacionarlos (o invéntalo). + * Requisitos: + * 1. Estará formado por personas con las siguientes propiedades: ✅ + * - Identificador único (obligatorio) + * - Nombre (obligatorio) + * - Pareja (opcional) + * - Hijos (opcional) + * 2. Una persona sólo puede tener una pareja (para simplificarlo). ✅ + * 3. Las relaciones deben validarse dentro de lo posible. + * Ejemplo: Un hijo no puede tener tres padres. + * Acciones: + * 1. Crea un programa que permita crear y modificar el árbol. + * - Añadir y eliminar personas + * - Modificar pareja e hijo + * 2. Podrás imprimir el árbol (de la manera que consideres). + * + * NOTA: Ten en cuenta que la complejidad puede ser alta si + * se implementan todas las posibles relaciones. Intenta marcar + * tus propias reglas y límites para que te resulte asumible. + */ + +""" + + +class Person: + + def __init__(self, id: int, name) -> None: + self.id = id + self.name = name + self.partner = None + self.children = [] + self.father = None + + def add_partner(self, partner): + if self.partner is None: + self.partner = partner + partner.partner =self.partner + else: + print("Esta persona ya tiene pareja") + + def add_child(self, child): + self.children.append(child) + +class PersonManagment: + def __init__(self) -> None: + self.person_list = {} + + def new_person(self): + name = input("Introduce el nombre de la persona: ") + id = input("Asigna un identificador: ") + new_person = Person(id, name) + self.person_list[f"{new_person.id}"] = new_person + + def show_all_person(self): + for id, person in self.person_list.items(): + print(f"{id}: {person.name}") + if person.partner != None: + print(f"Esta casado con {person.partner.name}") + else: + print("No tiene pareja") + if person.children: + print(f"Tiene hijos: {', '.join(child.name for child in person.children)}") + else: + print("No tiene hijos") + + def delete_person(self): + id = input("Introduce el identificador de la persona que quieres eliminar: ") + if id in self.person_list: + del self.person_list[id] + print("Persona eliminada correctamente") + else: + print("El identificador proporcionado no se corresponde con ninguna persona") + + def edit_person(self): + id = input("Introduce el identificador de la persona que quieres modificar: ") + if id in self.person_list: + name = input("Introduce el nuevo nombre: ") + self.person_list[id].name = name + else: + print("El identificador proporcionado no se corresponde con ninguna persona") + + def change_partner(self): + id = input("Introduce el Id de la persona que quieres modificar su pareja") + if id in self.person_list and self.person_list[id].partner != None: + id_partner = input("Introduce el id de su nueva pareja") + if id_partner in self.person_list: + self.person_list[id].partner = self.person_list[id_partner] + self.person_list[id_partner].partner = self.person_list[id] + print("Pareja añadida correctamente") + else: + print("El id introducido no se corresponde con ninguna persona") + else: + print("El id introducido no se corresponde con ninguna persona") + + def add_partner(self): + id = input("Introduce el Id de la persona a la que quieres añadir una pareja: ") + if id in self.person_list and self.person_list[id].partner is None: + id_partner = input("Introduce el Id de la pareja: ") + if id_partner in self.person_list and self.person_list[id_partner].partner is None: + self.person_list[id].partner = self.person_list[id_partner] + self.person_list[id_partner].partner = self.person_list[id] + else: + print("El id de la pareja no existe o ya tiene pareja") + else: + print("No se puede añadir una pareja. El Id no existe o ya tiene pareja") + + def add_child(self): + id = input("Introduce el id del padre: ") + id_child = input("Introduce le id del hijo: ") + if id in self.person_list and id_child in self.person_list: + self.person_list[id].children.append(self.person_list[id_child]) + else: + print("Los ids introducidos no son correctos") + +def main_menu(): + + person_managment = PersonManagment() + + while True: + print("\n--- Menú Principal ---") + print("1. Añadir persona✅") + print("2. Mostrar todas las personas✅") + print("3. Eliminar persona✅") + print("4. Editar persona") + print("5. Añadir pareja✅") + print("6. Cambiar pareja") + print("7. Añadir hij@✅") + print("8. Dibujar árbol genealógico") + print("9. Salir") + + option = input("Introduce una opción: ") + + match option: + case "1": + person_managment.new_person() + case "2": + person_managment.show_all_person() + case "3": + person_managment.delete_person() + case "4": + person_managment.edit_person() + case "5": + person_managment.add_partner() + case "6": + person_managment.change_partner() + case "7": + person_managment.add_child() + case "8": + break + + + +main_menu() \ No newline at end of file From 3d7e8a1ad604730b775714bd5b6417e156c5de47 Mon Sep 17 00:00:00 2001 From: IgnacioGM1973 Date: Tue, 17 Sep 2024 11:51:19 +0200 Subject: [PATCH 336/539] #[00] - [python] --- .../python/IgnacioGM1973.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/IgnacioGM1973.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/IgnacioGM1973.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/IgnacioGM1973.py new file mode 100644 index 0000000000..34d27bd1a5 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/IgnacioGM1973.py @@ -0,0 +1,28 @@ +''' +Esta es la la URL del sitio web oficial del lenguaje de programación que he seleccionado. +https://www.python.org/ +''' +# Comentario en un sola línea +''' + Comentario en varias líneas +''' + +MiPrimeraVariable = "Hola" +MI_PRIMERA_CONSTANTE = 3.1416 + +# Muestra de las variables tipo de datos primitivos + +# String(cadena) +cadena = "Hola Mundo" +print("cadena-->", type(cadena)) +# integer(entero) +numero = 10 +print("numero-->", type(numero)) +# float +numeroFloat = 4.5 +print("numeroFloat-->", type(numeroFloat)) +# nulo +resultado = None +print("resultado-->", type(numeroFloat)) + +print(f"Hola, python") From 1fae1bb023a5067499bc6359fc89b67a6aa10da7 Mon Sep 17 00:00:00 2001 From: Sauca Date: Tue, 17 Sep 2024 12:11:45 +0200 Subject: [PATCH 337/539] #00 - Pyhton --- .../python/13sauca13.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/13sauca13.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/13sauca13.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/13sauca13.py new file mode 100644 index 0000000000..c8ade57538 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/13sauca13.py @@ -0,0 +1,34 @@ +# www.python.org + +# Esto es un comentario de una sola linea, se realiza con # + +""" +Esto es un comentario multilinea +Puede escribirse en diferentes lineas +Se abre con tres comillas simples ( ''' ) o con tres dobles (como las usadas en este comentario) +Y se cierra de la misma manera + +OJO: se pueden usar dentro del bloque las comillas que no hayamos usado para abrir el bloque +Si usasemos las mismas cerrariamos el comentario sin querer +Por ejemplo en este puedo usar las simples sin problema ''''''' +""" + +''' +Aqui puedo usar comillas dobles si quiero """""""""""" +''' + + +# Tipos de datos primitivos +CONSTANTE = "esta es sólo la manera de escribir su nombre por convencion, Python no tiene constantes" +cadena = "esto es una string" +entero = 5 +flotante = 4.2 +complejo = 4j +booleano = False +lista = [1,dos,3] +tupla = (uno,2,tres) +diccionario = {"valor1":1,"valor2":"dos"} + + +# Imprimiendo el nombre del lenguaje +print("¡Hola, Python!") \ No newline at end of file From 8ba847e48d7b7c3f4c1759ef7e76c0eeac1fabfb Mon Sep 17 00:00:00 2001 From: Mario Barbero Date: Tue, 17 Sep 2024 12:40:38 +0200 Subject: [PATCH 338/539] Reto #08 - Python --- Roadmap/08 - CLASES/python/elbarbero.py | 108 ++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 Roadmap/08 - CLASES/python/elbarbero.py diff --git a/Roadmap/08 - CLASES/python/elbarbero.py b/Roadmap/08 - CLASES/python/elbarbero.py new file mode 100644 index 0000000000..824c570bc4 --- /dev/null +++ b/Roadmap/08 - CLASES/python/elbarbero.py @@ -0,0 +1,108 @@ +""" + * EJERCICIO: + * Explora el concepto de clase y crea un ejemplo que implemente un inicializador, + * atributos y una función que los imprima (teniendo en cuenta las posibilidades + * de tu lenguaje). + * Una vez implementada, créala, establece sus parámetros, modifícalos e imprímelos + * utilizando su función. + * + * DIFICULTAD EXTRA (opcional): + * Implementa dos clases que representen las estructuras de Pila y Cola (estudiadas + * en el ejercicio número 7 de la ruta de estudio) + * - Deben poder inicializarse y disponer de operaciones para añadir, eliminar, + * retornar el número de elementos e imprimir todo su contenido. + """ + +from collections import deque + +class MiClase: + def __init__(self): + self.n_reto = 8 + self.nombre_reto = "Clases" + self.url_web_retos = "https://retosdeprogramacion.com/roadmap/" + self.url_github = "https://github.com/mouredev/roadmap-retos-programacion/tree/main/Roadmap/08%20-%20CLASES" + + def print(self): + print(f""" + "-----------------DATOS del RETO----------------- + "Número del reto: {self.n_reto} + "Nombre del reto: {self.nombre_reto} + "Web de los retos: {self.url_web_retos} + "Github del reto: {self.url_github} + """) + +class Pila(list): + def __init__(self, *args): + self.__count = len(*args) + super().__init__(item for item in args) + + def add(self, element): + super().append(element) + self.__count += 1 + + def delLIFO(self): + super().pop() + self.__count -= 1 + + def delete(self, index): + try: + del self[0][index] + self.__count -= 1 + except IndexError as ex: + print("No existe ese indice en la colección") + + @property + def count(self): + return self.__count + + def print(self): + print(f"Tiene un total de {self.__count} elementos -> {self}") + + +class Cola(): + def __init__(self, *args): + self.cola = deque(*args) + + def add(self, element): + self.cola.append(element) + + def delFIFO(self): + print(f"El elemento borrado es: {self.cola.popleft()}") + + def delete(self, index): + try: + del self.cola[index] + except IndexError as ex: + print("No existe ese indice en la colección") + + def count(self): + return len(self.cola) + + def print(self): + print(f"Tiene un total de {self.count()} elementos -> {self.cola}") + +if __name__ == "__main__": + + print("----------------------CLASE----------------------------") + miclase = MiClase() + miclase.print() + + print("----------------------PILAS----------------------------") + webs = Pila(["https://es.wikipedia.org/wiki/Wikipedia:Portada", "https://es.wikipedia.org/wiki/Gran_Premio_de_Abu_Dabi", "https://es.wikipedia.org/wiki/Lewis_Hamilton", "https://es.wikipedia.org/wiki/Fernando_Alonso", "https://es.wikipedia.org/wiki/Asturias"]) + print(webs) + webs.add("www.google.es") + print(webs) + webs.delLIFO() + print(webs) + webs.delete(3) + webs.print() + + print("----------------------COLAS----------------------------") + numbers = Cola([1, 2, 3, 4, 5, 6]) + numbers.print() + print(numbers.cola) + numbers.delFIFO() + numbers.print() + numbers.delete(2) + numbers.print() + From c70d383ea93d5b270ad89e7a76296e5db03879df Mon Sep 17 00:00:00 2001 From: miguelex Date: Tue, 17 Sep 2024 12:51:52 +0200 Subject: [PATCH 339/539] #38 - php --- Roadmap/38 - MOUREDEV PRO/java/miguelex.java | 64 ++++++++++++++++++ .../38 - MOUREDEV PRO/javascript/miguelex.js | 52 +++++++++++++++ Roadmap/38 - MOUREDEV PRO/php/miguelex.php | 65 +++++++++++++++++++ Roadmap/38 - MOUREDEV PRO/python/miguelex.py | 33 ++++++++++ .../38 - MOUREDEV PRO/typescript/miguelex.ts | 57 ++++++++++++++++ 5 files changed, 271 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/java/miguelex.java create mode 100644 Roadmap/38 - MOUREDEV PRO/javascript/miguelex.js create mode 100644 Roadmap/38 - MOUREDEV PRO/php/miguelex.php create mode 100644 Roadmap/38 - MOUREDEV PRO/python/miguelex.py create mode 100644 Roadmap/38 - MOUREDEV PRO/typescript/miguelex.ts diff --git a/Roadmap/38 - MOUREDEV PRO/java/miguelex.java b/Roadmap/38 - MOUREDEV PRO/java/miguelex.java new file mode 100644 index 0000000000..2ea115a955 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/java/miguelex.java @@ -0,0 +1,64 @@ +import java.io.*; +import java.nio.file.*; +import java.util.*; +import java.util.stream.*; + +public class miguelex { + public static List obtenerSuscriptoresActivos(String archivoCsv) throws IOException { + List suscriptores = new ArrayList<>(); + + List lines = Files.readAllLines(Paths.get(archivoCsv)); + lines.remove(0); + + for (String line : lines) { + String[] data = line.split(","); + if (data[2].trim().equalsIgnoreCase("activo")) { + suscriptores.add(new Suscriptor(data[0].trim(), data[1].trim())); + } + } + + return suscriptores; + } + + public static List seleccionarGanadores(List suscriptores, int numeroGanadores) { + if (suscriptores.size() < numeroGanadores) { + return null; + } + + Collections.shuffle(suscriptores); + return suscriptores.subList(0, numeroGanadores); + } + + public static void main(String[] args) throws IOException { + String archivoCsv = "suscriptores.csv"; + List suscriptoresActivos = obtenerSuscriptoresActivos(archivoCsv); + + if (suscriptoresActivos.size() > 0) { + List ganadores = seleccionarGanadores(suscriptoresActivos, 3); + if (ganadores != null) { + System.out.println("Ganador de la suscripción: " + ganadores.get(0)); + System.out.println("Ganador del descuento: " + ganadores.get(1)); + System.out.println("Ganador del libro: " + ganadores.get(2)); + } else { + System.out.println("No hay suficientes suscriptores activos para seleccionar 3 ganadores."); + } + } else { + System.out.println("No hay suscriptores activos."); + } + } +} + +class Suscriptor { + String id; + String email; + + public Suscriptor(String id, String email) { + this.id = id; + this.email = email; + } + + @Override + public String toString() { + return "ID: " + id + " | Email: " + email; + } +} diff --git a/Roadmap/38 - MOUREDEV PRO/javascript/miguelex.js b/Roadmap/38 - MOUREDEV PRO/javascript/miguelex.js new file mode 100644 index 0000000000..3b89d94d06 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/javascript/miguelex.js @@ -0,0 +1,52 @@ +const fs = require('fs'); + +function obtenerSuscriptoresActivos(archivoCsv) { + const data = fs.readFileSync(archivoCsv, 'utf-8'); + const filas = data.split('\n').slice(1); // Saltar la primera fila (cabeceras) + + const suscriptores = []; + for (let fila of filas) { + const [id, email, status] = fila.split(','); + if (status.trim().toLowerCase() === 'activo') { + suscriptores.push({ id: id.trim(), email: email.trim() }); + } + } + + return suscriptores; +} + +function seleccionarGanadores(suscriptores, numeroGanadores) { + if (suscriptores.length < numeroGanadores) { + return null; + } + + const ganadores = []; + const indicesSeleccionados = new Set(); + + while (ganadores.length < numeroGanadores) { + const indiceAleatorio = Math.floor(Math.random() * suscriptores.length); + if (!indicesSeleccionados.has(indiceAleatorio)) { + ganadores.push(suscriptores[indiceAleatorio]); + indicesSeleccionados.add(indiceAleatorio); + } + } + + return ganadores; +} + +const archivoCsv = 'suscriptores.csv'; + +const suscriptoresActivos = obtenerSuscriptoresActivos(archivoCsv); + +if (suscriptoresActivos.length > 0) { + const ganadores = seleccionarGanadores(suscriptoresActivos, 3); + if (ganadores) { + console.log("Ganador de la suscripción:", ganadores[0]); + console.log("Ganador del descuento:", ganadores[1]); + console.log("Ganador del libro:", ganadores[2]); + } else { + console.log("No hay suficientes suscriptores activos para seleccionar 3 ganadores."); + } +} else { + console.log("No hay suscriptores activos."); +} diff --git a/Roadmap/38 - MOUREDEV PRO/php/miguelex.php b/Roadmap/38 - MOUREDEV PRO/php/miguelex.php new file mode 100644 index 0000000000..c85fbe6bdb --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/php/miguelex.php @@ -0,0 +1,65 @@ + $id, 'email' => $email]; + } + } + fclose($handle); + } + + return $suscriptores; +} + +function seleccionarGanadores($suscriptores, $numeroGanadores) { + if (count($suscriptores) < $numeroGanadores) { + return null; + } + + $ganadores = []; + $indicesSeleccionados = []; + + while (count($ganadores) < $numeroGanadores) { + $indiceAleatorio = rand(0, count($suscriptores) - 1); + + if (!in_array($indiceAleatorio, $indicesSeleccionados)) { + $ganadores[] = $suscriptores[$indiceAleatorio]; + $indicesSeleccionados[] = $indiceAleatorio; + } + } + + return $ganadores; +} + +$archivoCsv = 'suscriptores.csv'; + +$suscriptoresActivos = obtenerSuscriptoresActivos($archivoCsv); + +if (count($suscriptoresActivos) > 0) { + $ganadores = seleccionarGanadores($suscriptoresActivos, 3); + + if ($ganadores) { + echo "Ganador de la suscripción:\n"; + echo "ID: " . $ganadores[0]['id'] . " | Email: " . $ganadores[0]['email'] . "\n\n"; + + echo "Ganador del descuento:\n"; + echo "ID: " . $ganadores[1]['id'] . " | Email: " . $ganadores[1]['email'] . "\n\n"; + + echo "Ganador del libro:\n"; + echo "ID: " . $ganadores[2]['id'] . " | Email: " . $ganadores[2]['email'] . "\n\n"; + } else { + echo "No hay suficientes suscriptores activos para seleccionar 3 ganadores.\n"; + } +} else { + echo "No hay suscriptores activos.\n"; +} + diff --git a/Roadmap/38 - MOUREDEV PRO/python/miguelex.py b/Roadmap/38 - MOUREDEV PRO/python/miguelex.py new file mode 100644 index 0000000000..8ffcbb9ec1 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/miguelex.py @@ -0,0 +1,33 @@ +import csv +import random + +def obtener_suscriptores_activos(archivo_csv): + suscriptores = [] + with open(archivo_csv, newline='') as csvfile: + reader = csv.reader(csvfile) + next(reader) + for row in reader: + id_, email, status = row + if status.strip().lower() == 'activo': + suscriptores.append({'id': id_.strip(), 'email': email.strip()}) + return suscriptores + +def seleccionar_ganadores(suscriptores, numero_ganadores): + if len(suscriptores) < numero_ganadores: + return None + return random.sample(suscriptores, numero_ganadores) + +archivo_csv = 'suscriptores.csv' + +suscriptores_activos = obtener_suscriptores_activos(archivo_csv) + +if suscriptores_activos: + ganadores = seleccionar_ganadores(suscriptores_activos, 3) + if ganadores: + print(f"Ganador de la suscripción: {ganadores[0]}") + print(f"Ganador del descuento: {ganadores[1]}") + print(f"Ganador del libro: {ganadores[2]}") + else: + print("No hay suficientes suscriptores activos para seleccionar 3 ganadores.") +else: + print("No hay suscriptores activos.") diff --git a/Roadmap/38 - MOUREDEV PRO/typescript/miguelex.ts b/Roadmap/38 - MOUREDEV PRO/typescript/miguelex.ts new file mode 100644 index 0000000000..62d47078a3 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/typescript/miguelex.ts @@ -0,0 +1,57 @@ +import * as fs from 'fs'; + +interface Suscriptor { + id: string; + email: string; +} + +function obtenerSuscriptoresActivos(archivoCsv: string): Suscriptor[] { + const data = fs.readFileSync(archivoCsv, 'utf-8'); + const filas = data.split('\n').slice(1); // Saltar la primera fila (cabeceras) + + const suscriptores: Suscriptor[] = []; + for (const fila of filas) { + const [id, email, status] = fila.split(','); + if (status.trim().toLowerCase() === 'activo') { + suscriptores.push({ id: id.trim(), email: email.trim() }); + } + } + + return suscriptores; +} + +function seleccionarGanadores(suscriptores: Suscriptor[], numeroGanadores: number): Suscriptor[] | null { + if (suscriptores.length < numeroGanadores) { + return null; + } + + const ganadores: Suscriptor[] = []; + const indicesSeleccionados = new Set(); + + while (ganadores.length < numeroGanadores) { + const indiceAleatorio = Math.floor(Math.random() * suscriptores.length); + if (!indicesSeleccionados.has(indiceAleatorio)) { + ganadores.push(suscriptores[indiceAleatorio]); + indicesSeleccionados.add(indiceAleatorio); + } + } + + return ganadores; +} + +const archivoCsv = 'suscriptores.csv'; + +const suscriptoresActivos = obtenerSuscriptoresActivos(archivoCsv); + +if (suscriptoresActivos.length > 0) { + const ganadores = seleccionarGanadores(suscriptoresActivos, 3); + if (ganadores) { + console.log("Ganador de la suscripción:", ganadores[0]); + console.log("Ganador del descuento:", ganadores[1]); + console.log("Ganador del libro:", ganadores[2]); + } else { + console.log("No hay suficientes suscriptores activos para seleccionar 3 ganadores."); + } +} else { + console.log("No hay suscriptores activos."); +} From da1e142130a24f3f38e0ea5fc8db3e08e0c7e6d8 Mon Sep 17 00:00:00 2001 From: IgnacioGM1973 Date: Tue, 17 Sep 2024 13:26:56 +0200 Subject: [PATCH 340/539] 01 - python --- .../python/ignacioGM1973.py | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ignacioGM1973.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ignacioGM1973.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ignacioGM1973.py new file mode 100644 index 0000000000..085b44329a --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/ignacioGM1973.py @@ -0,0 +1,147 @@ +''' +/* + * EJERCICIO: + * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: + * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) + * - Utilizando las operaciones con operadores que tú quieras, crea ejemplos + * que representen todos los tipos de estructuras de control que existan + * en tu lenguaje: + * Condicionales, iterativas, excepciones... + * - Debes hacer print por consola del resultado de todos los ejemplos. + * + * DIFICULTAD EXTRA (opcional): + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + * + * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. + */ +''' +# 1º punto del ejercicio +''' +- Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: + * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) +''' + +a, b, resultado = 10, 30, 0 + +# suma +resultado = a + b +# resta +resultado = a - b +# multiplicacion +resultado = a * b +# division +resultado = a / b +# division entera +resultado = a // b +# resto +resultado = a % b +# exponente +resultado = a ** b + +# Comparacion +print(a == b) +# distinto +print(a != b) +# mayor +print(a > b) +# mayor igual +print(a >= b) +# menor +print(a < b) +# menor igual +print(a <= b) +# Operadores lógicos +a = True +b = False +# and +print(a and b) +# Or +print(a or b) +# not +print(not a) +print(not b) +# Operadores Bit a Bit (Bitwise) +x = 5 # 101 en binario +y = 3 # 011 en binario +print(x & y) # 001 → 1 +print(x | y) # 111 → 7 +print(x ^ y) # 110 → 6 +print(~x) # Complemento a 2 → -6 +print(x << 1) # Desplazamiento a la izquierda → 1010 → 10 +print(x >> 1) # Desplazamiento a la derecha → 10 → 2 +# Operadores de Identidad +x = [1, 2, 3] +y = x +z = [1, 2, 3] +print(x is y) # True (son el mismo objeto) +print(x is z) # False (tienen los mismos valores, pero son objetos distintos) +print(x is not z) # True +# Operadores de Pertenencia +lista = [1, 2, 3, 4] +print(2 in lista) # True +print(5 not in lista) # True + +# 2º punto del ejercicio +''' +- Utilizando las operaciones con operadores que tú quieras, crea ejemplos + * que representen todos los tipos de estructuras de control que existan + * en tu lenguaje: + * Condicionales, iterativas, excepciones... + * - Debes hacer print por consola del resultado de todos los ejemplos. +''' +# Comparar +a = 10 +b = 30 +if a > b: + print("A es mayor que B") +else: + print("A es menor que B") + +lista = [1, 7, 8, 50, 6, 3] +# buscar número más alto bucle For. +n = lista[0] +for i in lista: + if i > n: + n = i +print(f"El número más alta de la lista es: {n}") + +# bucle While +r = 1 +print("**** Imprimo la tabla del 7 ****") +while r <= 10: + print(f"7 * {r} = {7*r}") + r += 1 + +# Control de excepciones +try: + texto = int(input("Introduce un texto: ")) + print("Lo que ha introducido No es un caracter. No es Correcto") +except ValueError: + print("Lo que ha introducido es un caracter. Es correcto") + +# 3º punto del ejercicio +''' + * DIFICULTAD EXTRA (opcional): + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. +''' +# Altenativa estandar +print("\nAlternativa estandar:\n") +for i in range(10, 56): + if i % 2 == 0 and i != 16 and (i % 3 != 0): + print(i) + +# version por compresión +numeros_validos = [i for i in range( + 10, 56) if i % 2 == 0 and i != 16 and i % 3 != 0] +print(f"\nVersión por compresion: {numeros_validos}\n") + +# Alternativa usando continue +print("\nAlternativa usando continue:\n") +for i in range(10, 56): + if i == 16 or i % 2 != 0 or i % 3 == 0: + continue + print(i) From ba9b5d1c6220fc9d5cce0ca2c2dd0c6bd93de5bd Mon Sep 17 00:00:00 2001 From: resbaloso <134111217+raynerpv2022@users.noreply.github.com> Date: Tue, 17 Sep 2024 15:33:51 +0200 Subject: [PATCH 341/539] #19 Python and GO --- Roadmap/19 - ENUMERACIONES/go/raynerpv2022.go | 221 ++++++++++++++++++ .../19 - ENUMERACIONES/python/raynerpv2022.py | 195 ++++++++++++++++ 2 files changed, 416 insertions(+) create mode 100644 Roadmap/19 - ENUMERACIONES/go/raynerpv2022.go create mode 100644 Roadmap/19 - ENUMERACIONES/python/raynerpv2022.py diff --git a/Roadmap/19 - ENUMERACIONES/go/raynerpv2022.go b/Roadmap/19 - ENUMERACIONES/go/raynerpv2022.go new file mode 100644 index 0000000000..90a5444832 --- /dev/null +++ b/Roadmap/19 - ENUMERACIONES/go/raynerpv2022.go @@ -0,0 +1,221 @@ +package main + +import ( + "fmt" + "time" +) + +// /* +// +// # * 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). +type WeekDay int + +const ( + monday WeekDay = iota + tuesday + wednesday + thrusday + friday + saturday + sunday +) + +func (w WeekDay) String() string { + days := [...]string{"", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"} + return days[w] +} + +func getDay(index int) WeekDay { + return WeekDay(index) +} + +type Estado int + +const ( + PENDIENTE Estado = iota + 1 + ENVIADO + ENTREGADO + CANCELADO +) + +func (e Estado) String() string { + switch e { + case PENDIENTE: + return "PENDIENTE" + case ENVIADO: + return "ENVIADO" + case ENTREGADO: + return "ENTREGADO" + case CANCELADO: + return "CANCELADO" + default: + return "UNKNOWN" + } +} + +type Pedido struct { + Serial string + ID Estado +} + +func (p *Pedido) Enviar() { + if p.ID == PENDIENTE { + p.ID = ENVIADO + fmt.Printf("Pedido %s ha sido enviado\n", p.Serial) + } else if p.ID == CANCELADO { + fmt.Printf("Pedido %s está Cancelado\n", p.Serial) + } else { + fmt.Printf("Pedido %s no puede ser Enviado porque no está pendiente\n", p.Serial) + } +} + +func (p *Pedido) MostrarEstado() string { + return fmt.Sprintf("El estado actual del pedido %s es: %s", p.Serial, p.ID) +} + +func (p *Pedido) Cancelar() { + if p.ID == CANCELADO { + fmt.Printf("Pedido %s ya está Cancelado\n", p.Serial) + } else if p.ID != ENTREGADO { + p.ID = CANCELADO + fmt.Printf("Pedido %s ha sido Cancelado\n", p.Serial) + } else { + fmt.Printf("Pedido %s no puede ser Cancelado porque ya se entregó\n", p.Serial) + } +} + +func (p *Pedido) Entregar() { + if p.ID == ENVIADO { + p.ID = ENTREGADO + fmt.Printf("Pedido %s ha sido Entregado\n", p.Serial) + } else if p.ID == CANCELADO { + fmt.Printf("Pedido %s está Cancelado\n", p.Serial) + } else { + fmt.Printf("Pedido %s no puede ser Entregado porque no se ha enviado\n", p.Serial) + } +} + +func clearScreen() { + // Clear the screen (works for Unix-like systems) + fmt.Print("\033[H\033[J") +} + +func buscarPedido(pedidos []*Pedido, serial string) int { + for i, pedido := range pedidos { + if pedido.Serial == serial { + return i + } + } + return -1 +} +func seleccionarProducto(pedidos []*Pedido, serial string) { + index := buscarPedido(pedidos, serial) + if index == -1 { + fmt.Println("Pedido no encontrado") + return + } + + clearScreen() + eliminar := false + for { + fmt.Println("1 - Ver Estado", serial) + fmt.Println("2 - Enviar Pedido", serial) + fmt.Println("3 - Cancelar Pedido", serial) + fmt.Println("4 - Entregar Pedido", serial) + fmt.Println("5 - Salir del Producto", serial) + + var s string + fmt.Scanln(&s) + switch s { + case "1": + fmt.Println("Mostrando Estado") + fmt.Println(pedidos[index].MostrarEstado()) + case "2": + fmt.Println("Enviando Producto") + pedidos[index].Enviar() + case "3": + fmt.Println("Cancelando Producto") + pedidos[index].Cancelar() + eliminar = true + case "4": + fmt.Println("Entregando Producto") + pedidos[index].Entregar() + case "5": + fmt.Println("Saliendo del Producto") + if eliminar { + fmt.Printf("Pedido %s Eliminado\n", pedidos[index].Serial) + fmt.Println(pedidos[:index]) + fmt.Println(pedidos[index+1:]) + + pedidos = append(pedidos[:index], pedidos[index+1:]...) //bug al eliminar repite el ultimo elemento + } + break + default: + fmt.Println("Opción Inválida") + } + + if s == "5" { + break + } + } +} +func main() { + pedidos1 := []int{0, 1, 2, 3, 4, 5} + index := 3 + pedidos1 = append(pedidos1[:index], pedidos1[index+1:]...) + fmt.Println(pedidos1) + + fmt.Println(getDay(7)) + + fmt.Println("EXTRA") + + var pedidos []*Pedido + serial := 100 + + for { + fmt.Println("Seleccione opción") + fmt.Println("1 - Crear Pedido") + fmt.Println("2 - Mostrar todos Pedidos") + fmt.Println("3 - Seleccionar Pedido") + fmt.Println("4 - Salir") + + var op string + fmt.Scanln(&op) + + switch op { + case "1": + serial++ + pedidos = append(pedidos, &Pedido{ + Serial: fmt.Sprintf("%dA", serial), + ID: PENDIENTE, + }) + case "2": + fmt.Println("Mostrando Todos los Pedidos") + for _, pedido := range pedidos { + fmt.Printf("Pedido: %s Estado: %s\n", pedido.Serial, pedido.ID) + } + case "3": + fmt.Println("Indique serial del pedido") + var serialInput string + fmt.Scanln(&serialInput) + seleccionarProducto(pedidos, serialInput) + case "4": + fmt.Println("Saliendo...") + for i := 10; i > 0; i-- { + fmt.Print(i, " ") + time.Sleep(time.Second) + } + fmt.Println("\nPrograma terminado") + return + default: + fmt.Println("Opción no válida, 1-4") + } + } + +} diff --git a/Roadmap/19 - ENUMERACIONES/python/raynerpv2022.py b/Roadmap/19 - ENUMERACIONES/python/raynerpv2022.py new file mode 100644 index 0000000000..4016328640 --- /dev/null +++ b/Roadmap/19 - ENUMERACIONES/python/raynerpv2022.py @@ -0,0 +1,195 @@ +# /* +# * 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). + +from enum import Enum + +class Week_days(Enum): + monday = 1 + tuesday = 2 + wednesday =3 + thrusday = 4 + friday = 5 + saturday = 6 + sunday = 7 + + + +def get_week(index): + return Week_days(index).name + + + +print(Week_days(1)) +print(Week_days.monday.name) +print(Week_days.monday.value) +print(get_week(3)) + + + +# * +# * 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. +# */ + +import time +import os + +class Pedido : + + def __init__(self, serial=1) -> None: + self.serial = serial + self.ID = self.Estado.PENDIENTE.name + + + class Estado (Enum): + PENDIENTE = 1 + ENVIADO = 2 + ENTREGADO = 3 + CANCELADO = 4 + + def Enviar(self): + if self.ID == self.Estado.PENDIENTE.name: + self.ID = self.Estado.ENVIADO.name + print(f"Pedido {self.serial} ha sido enviado ") + elif self.ID == self.Estado.CANCELADO.name: + print(f"Pedido {self.serial} esta Cancelado") + else: + print(f"Pedido {self.serial} no puede ser Enviado porque porque no esta pendiente") + + def MostrarEstado(self): + return f"el Estado actual del pedido {self.serial} es : {self.ID}" + + def Cancelar(self): + if self.ID == self.Estado.CANCELADO.name: + print(f"Pedido {self.serial} ya esta Cancelado") + return True + + elif self.ID != self.Estado.ENTREGADO.name: + self.ID = self.Estado.CANCELADO.name + print(f"Pedido {self.serial} ha sido Cancelado ") + else: + print(f"Pedido {self.serial} no puede ser Cancelado porque ya se entrego") + return False + + def Entregar(self): + if self.ID == self.Estado.ENVIADO.name: + self.ID = self.Estado.ENTREGADO.name + print(f"Pedido {self.serial} ha sido Entregado ") + elif self.ID == self.Estado.CANCELADO.name: + print(f"Pedido {self.serial} esta Cancelado") + else: + print(f"Pedido {self.serial} no puede ser ENtregado porque no se ha enviado") + + + +def buscar_pedido(ped): + for i in pedidos: + if i.serial == ped: + return pedidos.index(i) + return -1 + + + +def seleccionar_producto(ped): + index = buscar_pedido(ped) + if index == -1: + print(f"Pedido no encontrado") + return + + os.system("clear") + eliminar = False + while True: + + print(f"1 - Ver Estado {ped} ") + print(f"2 - Enviar Pedido {ped} ") + print(f"3 - Cancelar Pedido {ped} ") + print(f"4 - ENtregar Pedido {ped} ") + print(f"5 - Salir del Producto {ped} ") + s = input("") + match s: + case "1": + print("MOstrando Estado") + print(pedidos[index].ID) + case "2": + print("Enviando Producto ") + pedidos[index].Enviar() + case "3": + print("Cancelando Producto ") + if pedidos[index].Cancelar(): + eliminar = True + + case "4": + print("Entregando Producto ") + pedidos[index].Entregar() + case "5": + print("Saliendo del Producto ") + if eliminar: + print(f"Pedido {pedidos.pop(index).serial} Eliminado") + break + case _: + print("Opcion Invalida") + + + + + + + + + + +pedidos = [] +serial = 100 +while True: + + print("Seleccione opcion") + print("1 - Crear Pedido ") + print("2 - Mostrar todos Pedido") + print("3 - Seleccionar Pedido") + print("4 - Salir") + op = input("") + + match op: + case "1": + serial +=1 + pedidos.append(Pedido(f"{serial}A")) + + case "2": + print("Mostrando Todos los Pedidos") + for i in pedidos: + print(f"Pedido: {i.serial} Estado: {i.ID}") + + case "3": + print("Indique serial del pedido") + serial = input("") + seleccionar_producto(serial) + + case "4": + print("Saliendo...") + for i in range (10,0,-1): + print(i,end=" ", flush=True) + time.sleep(1) + print() + print("Programa terminado") + break + case _: + print("Opcion no valida, 1-6 ") + + + From b8f6e8e1fa75ce2161abd0a0482235f8e6c6f309 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Tue, 17 Sep 2024 10:05:18 -0400 Subject: [PATCH 342/539] 37 - JavaScript --- .../javascript/RicJDev.js | 96 ++++++++++++------- 1 file changed, 62 insertions(+), 34 deletions(-) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js index e6b5f9853c..a3caec131c 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js @@ -28,59 +28,87 @@ async function getToken(clientId, clientSecret) { return response.json() }) - return token['access_token'] + return token.access_token } +// Nos almacenamos el metodo de autenticacion que usaremos para las peticiones. + const accessToken = await getToken(CLIENT_ID, CLIENT_SECRET) +const authorization = { headers: { Authorization: `Bearer ${accessToken}` } } -console.log(accessToken) +// Creamos una funcion para aprovechar el sitema de busqueda de la API. -const authorization = { - method: 'GET', - headers: { - Authorization: `Bearer ${accessToken}`, - }, -} +async function getArtistId(artist) { + const url = `https://api.spotify.com/v1/search?q=${artist}&type=artist&limit=1` + const results = await fetch(url, authorization).then((response) => { + if (!response.ok) { + throw new Error(`Error al obtener el artista`) + } -async function getArtistData(artistId) { - const url = `https://api.spotify.com/v1/artists/${artistId}` - const artistData = await fetch(url, authorization).then((response) => response.json()) + return response.json() + }) + + if (!results.artists.items) { + throw new Error(`Artista ${artist} no ha sido encontrado.`) + } - return artistData + return results.artists.items[0].id } -async function getArtistAlbumsData(artistId) { - const url = `https://api.spotify.com/v1/artists/${artistId}/albums?include_groups=album,single&market=VE&limit=50` - const albumData = await fetch(url, authorization).then((response) => response.json()) +// E iremos almacenando la informacion de nuestros artistas. - return albumData +const LinkinPark = { + id: await getArtistId('Linkin Park'), } -// Almacenamos las id's de Oasis y Linkin Park. - const Oasis = { - id: '2DaxqgrOhkeH0fpeiQq2f4', + id: await getArtistId('Oasis'), } -const LinkinPark = { - id: '6XyY86QOPPrYVGvF9ch6wz', +// Creamos una funcion que nos retorne los datos del artista desde la API. + +async function getArtistData(artistId) { + const url = `https://api.spotify.com/v1/artists/${artistId}` + const results = await fetch(url, authorization).then((response) => { + if (response.status !== 200) { + throw new Error(`Error al obtener datos del artista`) + } + + return response.json() + }) + + return { + name: results.name, + followers: results.followers.total, + popularity: results.popularity, + } } +LinkinPark.data = await getArtistData(LinkinPark.id) Oasis.data = await getArtistData(Oasis.id) -LinkinPark.data = await getArtistData(Oasis.id) -console.log(Oasis.data) -console.log(LinkinPark.data) +// Creamos otra funcion para obtener la cancion mas escuchada de la semana. -/* -TODO: +async function getArtistTopTrack(artistId) { + const url = `https://api.spotify.com/v1/artists/${artistId}/top-tracks?market=VE` + const results = await fetch(url, authorization).then((response) => { + if (response.status !== 200) { + throw new Error(`Error al obtener cancion mas popular.`) + } -Acciones: -1. Accede a las estadísticas de las dos bandas. - Por ejemplo: número total de seguidores, escuchas mensuales, - canción con más reproducciones... -2. Compara los resultados de, por lo menos, 3 endpoint. -3. Muestra todos los resultados por consola para notificar al usuario. -4. Desarrolla un criterio para seleccionar qué banda es más popular. + return response.json() + }) -*/ + return { + name: results.tracks[0].name, + popularity: results.tracks[0].popularity, + album: results.tracks[0].album.name, + } +} + +LinkinPark.topTrack = await getArtistTopTrack(LinkinPark.id) +Oasis.topTrack = await getArtistTopTrack(Oasis.id) + +// Aqui empezamos a comparar. + +//TODO From 1be4bc54acbcac74fbdcd36034bbd1e2592d5873 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Tue, 17 Sep 2024 10:16:07 -0400 Subject: [PATCH 343/539] 37 - JavaScript --- .../javascript/RicJDev.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js index a3caec131c..8de327da40 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js @@ -31,18 +31,18 @@ async function getToken(clientId, clientSecret) { return token.access_token } -// Nos almacenamos el metodo de autenticacion que usaremos para las peticiones. +// Nos almacenamos el método de autenticación que usaremos para las peticiones. const accessToken = await getToken(CLIENT_ID, CLIENT_SECRET) const authorization = { headers: { Authorization: `Bearer ${accessToken}` } } -// Creamos una funcion para aprovechar el sitema de busqueda de la API. +// Creamos una función para aprovechar el sitema de búsqueda de la API. async function getArtistId(artist) { const url = `https://api.spotify.com/v1/search?q=${artist}&type=artist&limit=1` const results = await fetch(url, authorization).then((response) => { - if (!response.ok) { - throw new Error(`Error al obtener el artista`) + if (response.status !== 200) { + throw new Error(`Error al obtener el artista ${artist}`) } return response.json() @@ -55,7 +55,7 @@ async function getArtistId(artist) { return results.artists.items[0].id } -// E iremos almacenando la informacion de nuestros artistas. +// E iremos almacenando la información de nuestros artistas. const LinkinPark = { id: await getArtistId('Linkin Park'), @@ -65,7 +65,7 @@ const Oasis = { id: await getArtistId('Oasis'), } -// Creamos una funcion que nos retorne los datos del artista desde la API. +// Creamos una función que nos retorne los datos del artista desde la API. async function getArtistData(artistId) { const url = `https://api.spotify.com/v1/artists/${artistId}` @@ -87,7 +87,7 @@ async function getArtistData(artistId) { LinkinPark.data = await getArtistData(LinkinPark.id) Oasis.data = await getArtistData(Oasis.id) -// Creamos otra funcion para obtener la cancion mas escuchada de la semana. +// Creamos otra función para obtener la canción más escuchada de la semana. async function getArtistTopTrack(artistId) { const url = `https://api.spotify.com/v1/artists/${artistId}/top-tracks?market=VE` @@ -109,6 +109,6 @@ async function getArtistTopTrack(artistId) { LinkinPark.topTrack = await getArtistTopTrack(LinkinPark.id) Oasis.topTrack = await getArtistTopTrack(Oasis.id) -// Aqui empezamos a comparar. +// Aquí empezamos a comparar. //TODO From e9b040b16f21eebdfe22cc6eb2fcd10e46a242eb Mon Sep 17 00:00:00 2001 From: sarismejiasanchez <93800332+sarismejiasanchez@users.noreply.github.com> Date: Tue, 17 Sep 2024 15:09:43 +0000 Subject: [PATCH 344/539] #04 - Python --- .../python/sarismejiasanchez.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Roadmap/04 - CADENAS DE CARACTERES/python/sarismejiasanchez.py diff --git a/Roadmap/04 - CADENAS DE CARACTERES/python/sarismejiasanchez.py b/Roadmap/04 - CADENAS DE CARACTERES/python/sarismejiasanchez.py new file mode 100644 index 0000000000..72e73be907 --- /dev/null +++ b/Roadmap/04 - CADENAS DE CARACTERES/python/sarismejiasanchez.py @@ -0,0 +1,36 @@ +""" +* DIFICULTAD EXTRA (opcional): +* Crea un programa que analice dos palabras diferentes y realice comprobaciones +* para descubrir si son: +* - Palíndromos +* - Anagramas +* - Isogramas +""" + +from collections import Counter + +def check_words(word_1, word_2): + # Convertimos las palabras a minúsculas para evitar diferencias entre mayúsculas y minúsculas + word_1, word_2 = word_1.lower(), word_2.lower() + + # Palíndromos + # Palabras que se leen igual de izquierda a derecha y viceversa. + print(f"¿{word_1} es Palindromo?: {word_1 == word_1[::-1]}") + print(f"¿{word_2} es Palindromo?: {word_2 == word_2[::-1]}") + + # Anagramas + # Ambas palabras tienen las mismas letras, solo en diferente orden. + """ + Counter crea un diccionario donde las claves son los caracteres y los valores son las frecuencias de esos caracteres. + """ + print(f"¿{word_1} y {word_2} son Anagramas?: {Counter(word_1) == Counter(word_2)}") + + # Isogramas + # Palabras en las que ninguna letra se repite. + print(f"¿{word_1} es Isograma?: {len(word_1) == len(set(word_1))}") + print(f"¿{word_2} es Isograma?: {len(word_2) == len(set(word_2))}") + + +check_words("oso", "reconocer") +check_words("acto", "taco") +check_words("cielo", "mundo") \ No newline at end of file From 50a08062cfceb5e8c86392214c58b87e688c64ed Mon Sep 17 00:00:00 2001 From: Berta Date: Tue, 17 Sep 2024 17:29:22 +0200 Subject: [PATCH 345/539] =?UTF-8?q?soluci=C3=B3n=20python=20#38?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Roadmap/38 - MOUREDEV PRO/python/bereverte.py | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/bereverte.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/bereverte.py b/Roadmap/38 - MOUREDEV PRO/python/bereverte.py new file mode 100644 index 0000000000..aaaa3d6751 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/bereverte.py @@ -0,0 +1,46 @@ +import csv +import random + +def seleccionar_activos(csvfile): + + activos = [] + emails_activos = [] + + with open(csvfile) as file: + csv_reader = csv.reader(file, delimiter=',') + + next(csv_reader) # saltar la cabecera + + for row in csv_reader: + id, email, status = row + if status == "activo" and email not in emails_activos: + emails_activos.append(email) # evitar correos duplicados + activos.append((id, email)) # añadir la tupla (id, email) de los usuarios activos + + return activos + +def seleccionar_ganadores(activos, cantidad_ganadores=3): + + if len(activos) >= cantidad_ganadores: + ganadores = random.sample(activos, cantidad_ganadores) # seleccionar de manera aleatoria + + ganador_suscripcion = ganadores[0] + ganador_descuento = ganadores[1] + ganador_libro = ganadores[2] + + print(f"\nGanador/a de la suscripción:") + print(f"id: {ganador_suscripcion[0]}, email: {ganador_suscripcion[1]}") + print(f"\nGanador/a del descuento:") + print(f"id: {ganador_descuento[0]}, email: {ganador_descuento[1]}") + print(f"\nGanador/a del libro:") + print(f"id: {ganador_libro[0]}, email: {ganador_libro[1]}") + return ganadores + + else: + print("No hay suficientes usuarios activos para seleccionar 3 ganadores.") + return [] + + +if __name__ == '__main__': + + seleccionar_ganadores(activos=seleccionar_activos('registros.csv')) \ No newline at end of file From 92202e934233c982b34cbd44b9ef4495d87ce5a2 Mon Sep 17 00:00:00 2001 From: javitron100 <86791160+javitron100@users.noreply.github.com> Date: Tue, 17 Sep 2024 18:48:02 +0200 Subject: [PATCH 346/539] #02 - Python --- .../python/javitron100.py | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/python/javitron100.py diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/python/javitron100.py b/Roadmap/02 - FUNCIONES Y ALCANCE/python/javitron100.py new file mode 100644 index 0000000000..09fce7e76c --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/python/javitron100.py @@ -0,0 +1,58 @@ +# Funciones y alcance + +variable_global = "Hola Python!" + +def imprime_diez(): + print("Diez") + +def suma(num1, num2): + print(num1+num2) + +def resta(num1, num2): + return num1 - num2 + +def multiplicacion(num1, num2): + producto = num1 * num2 + + def imprime_valor_por_diez(v): + print(v * 10) + + imprime_valor_por_diez(producto) + +def division(): + var_local1 = 10 + var_local2 = 12 + print(var_local1 / var_local2) + +# Dificultad extra + +def dificultad_extra(str3, str5): + contador = 0 + for index in range(1, 101): + if (index % 3 == 0) and (index % 5 == 0): + print(f"{index} " + str3 + " y " + str5) + elif index % 3 == 0: + print(f"{index} " + str3) + elif index % 5 == 0: + print(f"{index} " + str5) + else: + print(index) + contador += 1 + + + return contador + + + +imprime_diez() +suma(10, 20) +print(resta(20, 10)) +multiplicacion(10, 10) +print(len(variable_global)) +division() +numero_de_veces = dificultad_extra("Multiplo de 3", "Multiplo de 5") +print(f"Números no multiplos de 3 y/o de 5: {numero_de_veces}") + + + + From dae2e6ff644dcc5879bf1912f528cdc43fd12517 Mon Sep 17 00:00:00 2001 From: Bruce <88008233+Roswell468@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:24:05 -0300 Subject: [PATCH 347/539] Rename d1d4cdev.c to d1d4cum.c --- .../c/{d1d4cdev.c => d1d4cum.c} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/{d1d4cdev.c => d1d4cum.c} (100%) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cdev.c b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cum.c similarity index 100% rename from Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cdev.c rename to Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cum.c From ae61a5d678f40f56c1135c2f61d97f1d365f7af4 Mon Sep 17 00:00:00 2001 From: Bruce <88008233+Roswell468@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:24:22 -0300 Subject: [PATCH 348/539] Rename d1d4cdev.c to d1d4cum.c --- .../c/{d1d4cdev.c => d1d4cum.c} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/{d1d4cdev.c => d1d4cum.c} (100%) diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/d1d4cdev.c b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/d1d4cum.c similarity index 100% rename from Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/d1d4cdev.c rename to Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/d1d4cum.c From 41859b8d3ee17b3544c9307172eb50dd763d7538 Mon Sep 17 00:00:00 2001 From: Bruce <88008233+Roswell468@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:24:47 -0300 Subject: [PATCH 349/539] Rename d1d4cdev.c to d1d4cum.c --- Roadmap/02 - FUNCIONES Y ALCANCE/c/{d1d4cdev.c => d1d4cum.c} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/02 - FUNCIONES Y ALCANCE/c/{d1d4cdev.c => d1d4cum.c} (100%) diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/c/d1d4cdev.c b/Roadmap/02 - FUNCIONES Y ALCANCE/c/d1d4cum.c similarity index 100% rename from Roadmap/02 - FUNCIONES Y ALCANCE/c/d1d4cdev.c rename to Roadmap/02 - FUNCIONES Y ALCANCE/c/d1d4cum.c From 8477f627b08320b7cfad14c7d943ccadf10256a9 Mon Sep 17 00:00:00 2001 From: Niko Zen Date: Tue, 17 Sep 2024 14:31:59 -0430 Subject: [PATCH 350/539] #03 - javascript --- .../javascript/duendeintemporal.js | 443 ++++++++++++++++++ 1 file changed, 443 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/duendeintemporal.js diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/duendeintemporal.js b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/duendeintemporal.js new file mode 100644 index 0000000000..16b7569df8 --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/duendeintemporal.js @@ -0,0 +1,443 @@ +/* #3 ESTRUCTURAS DE DATOS */ +//I use Professional JavaScript for web developers by Matt Frisbie (z-lib.org) for give acurate information in some coments. +//Also use GPT + +/* In JavaScript, there are several built-in data structures that you can use to store and manipulate data. Here’s a list of the most common ones: */ + +let log = console.log.bind(console); + +/* Primitive Data Types */ + //Number: Represents both integer and floating-point numbers. +/* Perhaps the most interesting data type in ECMAScript is Number, which uses the IEEE–754 format +to represent both integers and floating-point values (also called double–precision values in some languages). To support the various types of numbers, there are several different number literal formats. */ + let age = 35; // Integer + let total = 118.87; // Floating-point + log('age: ', age + ', total: ', total)// age: 35, total: 118.87 + log(.3)// 0.3 +//To define a floating-point value, you must include a decimal point and at least one number after the decimal point. Although an integer is not necessary before a decimal point, it is recommended. + + let octNum = 045; + log(octNum)// 37 + + let hexNum = 0x2f; + log(hexNum)// 47 +//Note: Numbers created using octal or hexadecimal format are treated as decimal numbers in all arithmetic operations. + +/* There is a special numeric value called NaN, short for Not a Number, which is used to indicate when an operation intended to return a number has failed (as opposed to throwing an error). For exam- +ple, dividing any number by 0 typically causes an error in other programming languages, halting +code execution. In ECMAScript, dividing a number by 0 returns NaN, which allows other processing +to continue. */ + +/* The value NaN has a couple of unique properties. First, any operation involving NaN always returns NaN (for instance, NaN /10), which can be problematic in the case of multistep computations. Second, NaN is not equal to any value, including NaN. For example, the following returns false: */ + + log('Hi man how you doing?' * 4)// NaN + log(NaN == NaN); // false + +//For this reason, ECMAScript provides the isNaN() function. + + log(isNaN("04"))// false cause can be converted to NaN + +//Note: there is a particular difference between the Number() and parseInt() function when they are used to convert types(you can search for more information) + + //String: Represents a sequence of characters. The String data type represents a sequence of zero or more 16-bit Unicode characters. Strings can be delineated by either double quotes ("), single quotes ('), or backticks (`) + + let dreamyGirl = "Lucy"; + let song = dreamyGirl + ' in the sky with dimonds'; + let song_info = `"${song}" is a song from The Beatles that allude to the LSD` + log(song_info)// "Lucy in the sky with dimonds" is a song from The Beatles that allude to the LSD + + /* Character Literals +The String data type includes several character literals to represent nonprintable or otherwise useful characters: */ +/* LITERAL MEANING +\n New line +\t Tab +\b Backspace +\r Carriage return +\f Form feed +\\ Backslash (\) +\' Single quote (')—used when the string is delineated by single quotes. Example: 'He +said, \'hey.\''. +\" Double quote (")—used when the string is delineated by double quotes. Example: +"He said, \"hey.\"". +\` Backtick (`)—used when the string is delineated by backticks. Example: `He said, +\`hey.\``. +\xnn A character represented by hexadecimal code nn (where n is a hexadecimal digit +0-F). Example: \x41 is equivalent to "A". +\unnnn A Unicode character represented by the hexadecimal code nnnn (where n is a +hexadecimal digit 0-F). Example: \u03a3 is equivalent to the Greek character Σ. */ + +//Template literals also support the ability to define tag functions + let num1 = 40; + let num2 = 80; + + let sum = `${num1} + ${num2} = ${num1 + num2}`; + log(sum)// "40 + 80 = 120" + +/* Raw Strings +It is also possible to use template literals to give you access to the raw template literal contents without being converted into actual character representations, such as a new line or Unicode character. This can be done by using the String.raw tag function, which is available by default. */ +// Unicode demo +// \u57A8 is the 垨 character. + +/* Info: The character 𗞨 (yǐ) is often associated with the meaning of "to be" or "to exist." However, it is important to note that this character is quite rare and may not be found in everyday usage or standard dictionaries. It may appear in historical texts or specific contexts.(gpt brings me this last info, I type an aleatory unicode secuence) */ + + log(`\u57A8`); // 垨 or ? if you run in Console with Node + log(String.raw`\u57A8`); // \u57A8 +// Newline demo + log(`first line\nsecond line`); +// first line +// second line + log(String.raw`first line\nsecond line`); // "first line\nsecond line" + + + /* Boolean: Represents a logical entity and can have two values: `true` and `false`. The Boolean type is one of the most frequently used types in ECMAScript and has only two literalvalues: true and false. These values are distinct from numeric values, so true is not equal to 1, and false is not equal to 0. */ + let isChecked = true; + log(!isChecked)// false + //Note that the Boolean literals true and false are case–sensitive, so True and False (and other mixings of uppercase and lowercase) are valid as identifiers but not as Boolean values. + + //Undefined: A variable that has been declared but has not yet been assigned a value. + let somebody; + log(somebody)// undefined + let explicitlyUndefined = void(0); + log(explicitlyUndefined)// undefined + //Note: the use of void(0) is deprecated cause allow some javascript injection that can cause vulnerabilities in the structure of the code. + + //Null: Represents the intentional absence of any object value. Is common to initialize objects with null value. That way, you can explicitly check for the value null to determine if the variable has been filled with an object reference at a later time. + let animals = null; + log(animals)// null + + //Symbol: A unique and immutable primitive value, often used as object property keys. The purpose is guaranteed unique identifier that does not risk property collision. + const Id = Symbol('xm'); + const otherid = Symbol('xm'); + log('equal symbols: ', Id == otherid)// false + + /* You can also use symbols as object's properties .We'll use a common property name like email, but we'll use a symbol to ensure that this property is unique and not easily accessible or overridden. */ + + +// Create a unique symbol for the email property +const emailSymbol = Symbol('email'); + +class User { + constructor(name, email) { + this.name = name; + this[emailSymbol] = email; // Use the symbol as the key for the email property + } + + // Method to get the email + getEmail() { + return this[emailSymbol]; + } +} + +// Create a new user +const user1 = new User('Barbarella', 'softbaby@something.com'); + +console.log(user1.name); // Barbarella +console.log(user1.getEmail()); // softbaby@something.com + +// Trying to access the email property directly +console.log(user1[emailSymbol]); // softbaby@something.com +console.log(user1.email); // undefined, as 'email' is not a property of the object + + + //BigInt: Represents integers with arbitrary precision. + let bigNumber = BigInt(765466743212345679874653358945321); + log(bigNumber)// 765466743212345679874653358945321 + + /* Note: Many modern cryptographic libraries and implementations do use BigInt or similar constructs to handle large integers, especially for operations that involve large prime numbers, modular arithmetic, and other mathematical computations common in cryptography. */ + + +/* Reference Data Types */ + + // Object: A collection of key-value pairs. Objects can store multiple values as properties and methods who can interact with that properties. + + let debian = { + name: 'Debian', + description: 'Ardilla parlante cuyo nucleo esta basado en un Sistema Operativo del mismo nombre, lucha contra el Sistema establecido y habita más alla del Borde(el Universo conocido)', + location: 'No Found', + + speak: ()=> { + console.log(this.description) + } + } + + log(debian.description)// Ardilla parlante cuyo nucleo esta basado en un Sistema Operativo del mismo nombre, lucha contra el Sistema establecido y habita más alla del Borde(el Universo conocido) + + // Array: A special type of object used to store ordered collections of values. Arrays can hold elements of any type and are indexed numerically. + + let friends = ['Susan', 'Maryatta','Denise','Luna', 'Kena', 'Maria'] + log(friends) + // Function: A special type of object that can be called to perform a specific task. Functions can also be stored in variables, passed as arguments, and returned from other functions. + + let from = 4, to = 12; + const randomValue = (from, to)=> { + return Math.floor(Math.random() * (to - from + 1)) + from; + } + + let count = from; + while(count < to){ + log('random value: ', randomValue(from, to)); + count++; + } +//Logs: numbers between 4 and 12 inclusive +/* Specialized Data Structures */ + //Set: A collection of unique values. Sets can store any type of value, and duplicate values are automatically removed. + + let uniqueNumbers = new Set([4, 4, 3, 5, 8, 1, 8, 1, 7]); + log(uniqueNumbers); // Set {4, 3, 5, 8, 1, 7 } + + //Map: A collection of key-value pairs where keys can be of any type. Maps maintain the insertion order of their elements. + + let map = new Map(); + map.set('gopi_name', 'Khamala'); + map.set('age', 35); + log(map.get('gopi_name')); // Khamala + + //WeakSet: Similar to a Set, but it holds "weak" references to its values, allowing for garbage collection if there are no other references to the object. + + let weakSet = new WeakSet(); + let obj = {}; + weakSet.add(obj); + log(weakSet.has(obj)); // true + + //WeakMap: Similar to a Map, but it holds "weak" references to its keys, allowing for garbage collection if there are no other references to the key object. + + let weakMap = new WeakMap(); + let keyObj = {}; + weakMap.set(keyObj, "crasylady"); + log(weakMap.get(keyObj)); // crazylady + + //Note: garbage collection allow memory management by automatically allocating what is needed and reclaiming memory that is no longer being used. + + /* Typed Arrays */ + /* Typed arrays in JavaScript provide a way to work with binary data directly in memory. They are particularly useful for handling raw binary data, such as in scenarios involving graphics, audio, and network communications. + They provide a way to work with binary data in a more efficient manner. Examples include `Int8Array`, `Uint8Array`, `Float32Array`, etc. */ + + //int8Array: Represents an array of 8-bit integers. + let int8Array = new Int8Array([-3, 5, -8, 99, 76]); + log(int8Array)// [-3, 5, -8, 99, 76] + + //Uint8Array: Represents an array of 8-bit unsigned integers. + let uint8Array = new Uint8Array([1, 2, 3]); + + //Uint8ClampedArray: Represents an array of 8-bit unsigned integers clamped to the range [0, 255]. + let uint8ClampedArray = new Uint8ClampedArray([-1, 256, 100]); + + + //Int16Array: Represents an array of 16-bit signed integers. + let int16Array = new Int16Array([1, -2, 3]); + + // Uint16Array: Represents an array of 16-bit unsigned integers. + let uint16Array = new Uint16Array([1, 2, 3]); + + // Int32Array: Represents an array of 32-bit signed integers. + let int32Array = new Int32Array([1, -2, 3]); + + //Uint32Array: Represents an array of 32-bit unsigned integers. + let uint32Array = new Uint32Array([1, 2, 3]); + + // Float32Array: Represents an array of 32-bit floating-point numbers. + let float32Array = new Float32Array([1.5, 2.5, 3.5]); + + // Float64Array: Represents an array of 64-bit floating-point numbers. + let float64Array = new Float64Array([1.5, 2.5, 3.5]); + + // BigInt64Array: Represents an array of 64-bit signed integers (BigInt). + let bigInt64Array = new BigInt64Array([1n, 2n, 3n]); + + // BigUint64Array: Represents an array of 64-bit unsigned integers (BigInt). + let bigUint64Array = new BigUint64Array([1n, 2n, 3n]); + log(bigUint64Array)/* Logs: + BigUint64Array(3) [ {}, {}, {} ] + 0: 1n + 1: 2n + 2: 3n + buffer: ArrayBuffer { byteLength: 24 } + byteLength: 24 + byteOffset: 0 + length: 3 + : BigUint64Array.prototype { … } */ + + window.addEventListener('load', function(){ + const body = document.querySelector('body'); + const title = document.createElement('h1'); + + body.style.setProperty('background', '#000'); + body.style.setProperty('text-align', 'center'); + + title.textContent = 'Retosparaprogramadores #3.'; + title.style.setProperty('font-size', '3.5vmax') + title.style.setProperty('color', '#fff'); + title.style.setProperty('line-height', '100vh'); + + body.appendChild(title); + + alert('Retosparaprogramadores #3. Please open the Browser Developer Tools.'); + log( 'Retosparaprogramadores #3')// this will be logged at the end cause the nature of window event +}); + + + + + +/* EXTRA DIFFICULTY (optional): + Create a contact book via the terminal. + You must implement functionalities for searching, inserting, updating, and deleting contacts. + Each contact must have a name and a phone number. + The program first asks which operation you want to perform, and then the necessary data to carry it out. + The program cannot allow the input of non-numeric phone numbers and those with more than 11 digits (or the number of digits you choose). + An option to terminate the program should also be provided. +*/ + +//Node.js was used to achieve interaction with the console. +//Then you should copy the exercise, save it with a .js extension, and run it in a terminal using the command node plus the name of the file. +/* + const rl = require('readline').createInterface({ + input: process.stdin, + output: process.stdout +}); + +let contacts = []; + +function showMenu(){ + console.log("--- List of Contacts ---"); + console.log("1. Insert Contact"); + console.log("2. Buscar Contact"); + console.log("3. Update Contact"); + console.log("4. Delate Contact"); + console.log("5. Exit"); + rl.question("Chose and Option: ", (option) => { + switch (option) { + case '1': + insertContact(); + break; + case '2': + searchContact(); + break; + case '3': + updateContact(); + break; + case '4': + delateContact(); + break; + case '5': + console.log("living the program..."); + rl.close(); + break; + default: + console.log("No Valid Option. Try again."); + showMenu(); + } + }); +} + + +function askQuestion(query){ + return new Promise(resolve => { + rl.question(query, resolve); + }); +} + +async function insertContact(){ + try { + const name = await askQuestion("Type the contact name: "); + + const telefone = await askQuestion("Type the telephone number (11 digits): "); + if (!/^\d{11}$/.test(telefone)) { + console.log("Invalid telephone number. Must be a numeric value and have 11 digits."); + return showMenu(); + } + + const email = await askQuestion("Type the email of the contact: "); + const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; + if (!emailRegex.test(email)) { + console.log("Invalid email. Must be a valid email address."); + return showMenu(); + } + + contacts.push({ name, telefone, email }); + console.log(`Contact ${name} added.`); + + } catch (error) { + console.error("An error occurred:", error.message); + } finally { + showMenu(); + } +} + +function searchContact(){ + rl.question("Ingrese el name del contact a search: ", (name) => { + const contact = contacts.find(c => c.name.toLowerCase() === name.toLowerCase()); + if (contact) { + console.log(`Contact found: ${contact.name}, Telefone: ${contact.telefone}, Email: ${contact.email}`); + } else { + console.log("Contact not found."); + } + showMenu(); + }); +} + +async function updateContact(){ + try { + const name = await askQuestion("Type the name of the contact to update: "); + const contact = contacts.find(c => c.name.toLowerCase() === name.toLowerCase()); + + if (contact) { + const telefone = await askQuestion("Type the new number of telephone (11 digits): "); + if (/^\d{11}$/.test(telefone)) { + contact.telefone = telefone; + console.log(`Contact ${name} updated with new number.`); + } else { + console.log("Invalid telephone number. Must be a numeric value and have 11 digits."); + } + + const email = await askQuestion("Type the email of the contact: "); + const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; + if (emailRegex.test(email)) { + contact.email = email; + console.log(`Contact ${name} updated with new email.`); + } else { + console.log("Invalid email. Must be a valid email address."); + } + } else { + console.log("Contact not found."); + } + } catch (error) { + console.error("An error occurred:", error.message); + } finally { + showMenu(); + } +} + + +function delateContact(){ + rl.question("Type the name of the contact to delate: ", (name) => { + const index = contacts.findIndex(c => c.name.toLowerCase() === name.toLowerCase()); + if (index !== -1) { + contacts.splice(index, 1); + console.log(`Contact ${nombre} delated.`); + } else { + console.log("Contact not found."); + } + showMenu(); + }); +} + +showMenu(); + +*/ + /* /^(?=.{1,254}$)(?=.{1,64}@)([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+)(? Date: Tue, 17 Sep 2024 16:30:18 -0300 Subject: [PATCH 351/539] #03-python --- .../python/NicoHeguaburu.py | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/python/NicoHeguaburu.py diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/python/NicoHeguaburu.py b/Roadmap/03 - ESTRUCTURAS DE DATOS/python/NicoHeguaburu.py new file mode 100644 index 0000000000..7f4d83dec6 --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/python/NicoHeguaburu.py @@ -0,0 +1,111 @@ +# #ESTRUCTURA DE DATOS +# #lista (list) +# lista = [1,2,3,4,5] +# lista.append(6) #agregar un elemento a la lista +# print(lista) +# lista.remove(2) #eliminacion del elemento +# print(lista) +# lista[0] = 7 #actualizacion del elemento +# print(lista) +# lista.sort() #orden de los elementos +# print(lista) + +# #tupla (tuple) +# tupla = (1,2,3,4) #son inmutables no se pueden modificar +# print (tupla) + +# #diccionario (dict) +# diccionario = { +# "Nombre": "Nicolás", +# "Edad": 22, +# "Estatura": 1.87 +# } +# diccionario["Ciudad"] = "Montevideo" #agregar un elemento clave-valor +# print(diccionario) +# diccionario["Edad"] = 23 #actualizacion del valor +# print(diccionario["Edad"]) +# del diccionario["Estatura"] #eliminacion de clave-valor +# print(diccionario) + +# #Conjunto (set) +# conjunto = {1,2,3,4,5} #estructuras desordenadas sin duplicados +# conjunto.add(9) #agregar un elemento +# print(conjunto) +# conjunto.remove(4) +# print(conjunto) + + + + +#DIFICULTAD EXTRA +#AGENDA + +mi_agenda = {} + +def agendar(): + nombre = input("nombre:") + numero = int(input("numero:")) + while len(str(numero)) != 8: + print("numero incorrecto") + numero = int(input("numero:")) + agendado = {"Nombre": nombre, "Numero": numero} + mi_agenda[nombre] = agendado + print("se a agendado correctamente el contacto") + + + +def actualizar(): + nombre_actualizar = input("nombre de contacto a actualizar: ") + if nombre_actualizar in mi_agenda: + nuevo_numero = input("Nuevo numero:") + if len(str(nuevo_numero)) == 8: + mi_agenda[nombre_actualizar]["Numero"] = nuevo_numero + else: + print("numero incorrecto") + else: + print("no existe el contacto") + + +def eliminar(): + nombre_eliminar = input("nombre de contacto a eliminar: ") + if nombre_eliminar in mi_agenda: + del mi_agenda[nombre_eliminar] + print(f"Se a elmiminado el contacto {nombre_eliminar}") + else: + print("no existe el contacto") + +def busqueda(): + nombre_buscar = input("nombre de contacto a buscar: ") + if nombre_buscar in mi_agenda: + print(mi_agenda[nombre_buscar]) + else: + print("no existe el contacto") + + +def menu(): + print("Menu de la agenda") + print("1----------Agendar contacto") + print("2----------Eliminar contacto") + print("3----------Buscar contacto") + print("4----------Actualizar contacto") + print("----------Salir") + + accion = input() + if accion == "1": + agendar() + elif accion == "2": + eliminar() + elif accion == "3": + busqueda() + elif accion == "4": + actualizar() + elif accion == "5": + exit() + else: + print("Digite un numero valido") + menu() + + +menu() + + From dd23374b1897ff97a765f650b1e8f2a0874689b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Heguaburu=20S=C3=A1nchez?= Date: Tue, 17 Sep 2024 16:36:14 -0300 Subject: [PATCH 352/539] 04-python --- .../python/NicoHeguaburu.py | 84 +++++++++---------- .../python/NicoHeguaburu.py | 0 2 files changed, 42 insertions(+), 42 deletions(-) create mode 100644 Roadmap/04 - CADENAS DE CARACTERES/python/NicoHeguaburu.py diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/python/NicoHeguaburu.py b/Roadmap/03 - ESTRUCTURAS DE DATOS/python/NicoHeguaburu.py index 7f4d83dec6..a3bcc13e18 100644 --- a/Roadmap/03 - ESTRUCTURAS DE DATOS/python/NicoHeguaburu.py +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/python/NicoHeguaburu.py @@ -1,44 +1,44 @@ -# #ESTRUCTURA DE DATOS -# #lista (list) -# lista = [1,2,3,4,5] -# lista.append(6) #agregar un elemento a la lista -# print(lista) -# lista.remove(2) #eliminacion del elemento -# print(lista) -# lista[0] = 7 #actualizacion del elemento -# print(lista) -# lista.sort() #orden de los elementos -# print(lista) - -# #tupla (tuple) -# tupla = (1,2,3,4) #son inmutables no se pueden modificar -# print (tupla) - -# #diccionario (dict) -# diccionario = { -# "Nombre": "Nicolás", -# "Edad": 22, -# "Estatura": 1.87 -# } -# diccionario["Ciudad"] = "Montevideo" #agregar un elemento clave-valor -# print(diccionario) -# diccionario["Edad"] = 23 #actualizacion del valor -# print(diccionario["Edad"]) -# del diccionario["Estatura"] #eliminacion de clave-valor -# print(diccionario) - -# #Conjunto (set) -# conjunto = {1,2,3,4,5} #estructuras desordenadas sin duplicados -# conjunto.add(9) #agregar un elemento -# print(conjunto) -# conjunto.remove(4) -# print(conjunto) - - - - -#DIFICULTAD EXTRA -#AGENDA +#ESTRUCTURA DE DATOS +#lista (list) +lista = [1,2,3,4,5] +lista.append(6) #agregar un elemento a la lista +print(lista) +lista.remove(2) #eliminacion del elemento +print(lista) +lista[0] = 7 #actualizacion del elemento +print(lista) +lista.sort() #orden de los elementos +print(lista) + +#tupla (tuple) +tupla = (1,2,3,4) #son inmutables no se pueden modificar +print (tupla) + +#diccionario (dict) +diccionario = { + "Nombre": "Nicolás", + "Edad": 22, + "Estatura": 1.87 + } +diccionario["Ciudad"] = "Montevideo" #agregar un elemento clave-valor +print(diccionario) +diccionario["Edad"] = 23 #actualizacion del valor +print(diccionario["Edad"]) +del diccionario["Estatura"] #eliminacion de clave-valor +print(diccionario) + +#Conjunto (set) +conjunto = {1,2,3,4,5} #estructuras desordenadas sin duplicados +conjunto.add(9) #agregar un elemento +print(conjunto) +conjunto.remove(4) +print(conjunto) + + + + +# DIFICULTAD EXTRA +# AGENDA mi_agenda = {} @@ -88,7 +88,7 @@ def menu(): print("2----------Eliminar contacto") print("3----------Buscar contacto") print("4----------Actualizar contacto") - print("----------Salir") + print("5----------Salir") accion = input() if accion == "1": diff --git a/Roadmap/04 - CADENAS DE CARACTERES/python/NicoHeguaburu.py b/Roadmap/04 - CADENAS DE CARACTERES/python/NicoHeguaburu.py new file mode 100644 index 0000000000..e69de29bb2 From e89083a0b7f95be142f6342d50d6b6e234dc955f Mon Sep 17 00:00:00 2001 From: raulG91 <=> Date: Tue, 17 Sep 2024 22:48:41 +0200 Subject: [PATCH 353/539] #38 - python --- Roadmap/38 - MOUREDEV PRO/python/raulG91.py | 36 +++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/raulG91.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/raulG91.py b/Roadmap/38 - MOUREDEV PRO/python/raulG91.py new file mode 100644 index 0000000000..0ac2bc2a78 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/raulG91.py @@ -0,0 +1,36 @@ +import csv +import os +import random + +def read_csv(filename): + values = [] + try: + with open(filename,newline='') as csvfile: + reader = csv.reader(csvfile,delimiter="|") + for index,row in enumerate(reader): + if index != 0 and row[2].lower()=="activo": + values.append(row) + except: + print("Error opening the file") + return values + + +#Get path for the file +path = os.path.join(os.path.dirname(__file__),"file.csv") +#Read csv values from the file +values = read_csv(path) + +if len(values)>=3: + #Get 3 random elements from the list + list_winners = random.sample(values,k=3) + + #First one win a subscription + print(f'Ganadaor de la subscripcion {list_winners[0][1]} con id: {list_winners[0][0]}') + + #Second wins a discount + print(f'Ganador del descuento {list_winners[1][1]} con id {list_winners[1][0]}') + + #Third one wins a book + print(f'Ganador del libro {list_winners[2][1]} con id {list_winners[2][0]}') +else: + print("Debe haber al menos 3 usuarios") \ No newline at end of file From e7910f9b429ef6bb40bfbe49874fd63edbfcf0b9 Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Tue, 17 Sep 2024 23:38:31 +0200 Subject: [PATCH 354/539] #09 - Java --- Roadmap/09 - HERENCIA/java/Qv1ko.java | 62 +++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Roadmap/09 - HERENCIA/java/Qv1ko.java diff --git a/Roadmap/09 - HERENCIA/java/Qv1ko.java b/Roadmap/09 - HERENCIA/java/Qv1ko.java new file mode 100644 index 0000000000..4ef3ee5a5b --- /dev/null +++ b/Roadmap/09 - HERENCIA/java/Qv1ko.java @@ -0,0 +1,62 @@ +public class Qv1ko { + + public static void main(String[] args) { + + Dog dog = new Dog(); + dog.setName("Rex"); + + Cat cat = new Cat(); + cat.setName("Whiskers"); + + animalSound(dog); + animalSound(cat); + + } + + public static void animalSound(Animal animal) { + System.out.println(animal.getName() + " makes the sound: "); + animal.makeSound(); + } + +} + +class Animal { + + String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void makeSound() { + System.out.println("Unknown sound"); + } + + @Override + public String toString() { + return name; + } + +} + +class Dog extends Animal { + + @Override + public void makeSound() { + System.out.println("Guau Guau"); + } + +} + +class Cat extends Animal { + + @Override + public void makeSound() { + System.out.println("Miau Miau"); + } + +} From 0767a87e513114fcc71aa2710c5670d23dd95619 Mon Sep 17 00:00:00 2001 From: sarismejiasanchez <93800332+sarismejiasanchez@users.noreply.github.com> Date: Tue, 17 Sep 2024 22:03:09 +0000 Subject: [PATCH 355/539] #04 - Python --- .../python/sarismejiasanchez.py | 150 +++++++++++++++++- 1 file changed, 149 insertions(+), 1 deletion(-) diff --git a/Roadmap/04 - CADENAS DE CARACTERES/python/sarismejiasanchez.py b/Roadmap/04 - CADENAS DE CARACTERES/python/sarismejiasanchez.py index 72e73be907..593ac74016 100644 --- a/Roadmap/04 - CADENAS DE CARACTERES/python/sarismejiasanchez.py +++ b/Roadmap/04 - CADENAS DE CARACTERES/python/sarismejiasanchez.py @@ -1,3 +1,151 @@ +# #04 CADENAS DE CARACTERES +""" + * EJERCICIO: + * Muestra ejemplos de todas las operaciones que puedes realizar con cadenas de caracteres + * en tu lenguaje. Algunas de esas operaciones podrían ser (busca todas las que puedas): + * - Acceso a caracteres específicos, subcadenas, longitud, concatenación, repetición, recorrido, + * conversión a mayúsculas y minúsculas, reemplazo, división, unión, interpolación, +verificación... + * +""" +# Creando un string +print("Creando un string".upper()) + +letter = "S" # Un string puede ser un caracter o múltiples cadenas de texto +print(letter) # S +print(type(letter)) # + +name = "Sara Mejia" # Se pueden definir con comillas dobles " " +print(name) # Sara +print(type(name)) # +alias = 'srismejiasanchez' # Se pueden definir con comillas simples ' ' +print(type(alias)) # + +multiline_string = """\nEste es un string +con multiples +lineas\n""" +print(multiline_string) # String multilinea con caracter de escape para salto de linea + +multiline_string = '''Este también +es un string +con multiples +lineas''' +print(multiline_string) + +# Acceso a caracteres específicos +print("\nAcceso a caracteres específicos".upper()) + +language = "Python" +# En programación los índices comienzan en cero +print(language[0]) # P +print(language[2]) # t +print(f"Último carácter: {language[-1]}") # El recorrido inverso comienza en -1 + +# Subcadenas +print("\nSubcadenas".upper()) +text = "Roadmap Retos de Programacion" +text_slice = text[7::] # Retos de Programacion +print(f"Texto original: {text}") +print(f"Slicing: {text_slice}") + +# Longitud +print("\nLongitud".upper()) +text = "Thirty Days Of Python" +print(f"La longitud de la cadena {text} es {len(text)} caracteres.") + +# Concatenación +print("\nConcatenación".upper()) +name = "Sara" +surname = "Mejia" +age = 31 + +full_name = name, surname +print("Mi nombre es:", name , surname) # Mi nombre es: Sara Mejia + +information = "Nombre: " + name + ", Apellido: " + surname + ", Edad: " + str(age) +print(information) # Nombre: Sara, Apellido: Mejia, Edad: 31 + +information = f"Mi nombre es {name} {surname}, y tengo {age} años." +print(information) # Mi nombre es Sara Mejia, y tengo 31 años. + +print("\n --Secuencias de Escape--".upper()) +print("(\\n) Salto de línea: \nHola!") # Salto de línea +print("(\\t) Esto es un \t tabulador.") # Tabulación (4 espacios) +print('(\\) Símbolo backslash (\\)') # Simbolo backslash +print('Asi se incluye un texto entre comillas: "Hello, World!\"') # Comillas dobles dentro de comillas simples + +# Repetición +print("\nRepetición".upper()) +text = "Hello, Python! " +print(text * 4) # Hello, Python! Hello, Python! Hello, Python! Hello, Python! + +# Recorrido +print("\nRecorrido".upper()) +language = "Python" + +# Recorrido de izquierda a derecha +for letter in language: + print(letter) + +# Recorrido inverso y paso a mayúscula +for letter in language[::-1]: + print(letter.upper()) + + +# Conversión a mayúsculas y minúsculas +print("\nConversión a mayúsculas y minúsculas.. y métodos adicionales".upper()) +course = "Roadmap Retos Programación" +print(f"Mayúscula: {course.upper()}") +print(f"Minúscula: {course.lower()}") +# Convierte el primer caracter del string a letra capital +print(f"Letra Capital: {course.capitalize()}") # Roadmap retos programacion +text = "texto para titulo" +# Convierte a mayúscula inicial cada letra inicial del texto +print(f"Titulo: {text.title()}") # Texto Para Titulo + + +# Reemplazo +print("\nReemplazo".upper()) +# Replace the word coding in the string 'Coding For All' to Python. +text = "Coding For All" +print(text.replace("Coding", "Python")) + +# División +print("\nDivisión".upper()) +text = "Roadmap Retos Programacion" +print(text.split(" ")) # Separa la cadena por espacios en blanco +text = "Manzana,Naranja,Platano" +print(text.split(",")) # Separa la cadena por comas + +# Tambien podríamos convertir el string a lista +text = list(text) +print(f"String a lista: \n{text}") + +# Unión +print("\nUnión".upper()) + +languages = ['Python', 'JavaScript', 'Java', 'C#'] +result = ', '.join(languages) +print(f"Lenguajes: {languages}") +print(f"Unión: {result}") + +# Interpolación +print("\nInterpolación".upper()) + +# f-strings +name = "Sara" +surname = "Mejia" +saludo = f"Hola {name} {surname}! ¿Cómo estás?" +print(result) # Hola Sara Mejia! ¿Cómo estás? + +# format +saludo = "Hola {} {}! ¿Cómo estás?".format(name, surname) +print(saludo) + +# % +saludo = "Hola %s %s. ¿Cómo estás?" % (name, surname) # %s strings +print(saludo) # Hola Sara Mejia. ¿Cómo estás? + """ * DIFICULTAD EXTRA (opcional): * Crea un programa que analice dos palabras diferentes y realice comprobaciones @@ -6,7 +154,7 @@ * - Anagramas * - Isogramas """ - +print("\nDIFICULTAD EXTRA") from collections import Counter def check_words(word_1, word_2): From edf79929ee9d43a6ae2d3f2f8cf8294efcf8be12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Harold=20Albi=C3=B1ana?= Date: Wed, 18 Sep 2024 00:36:13 +0200 Subject: [PATCH 356/539] envio de 01 roadmap --- .../python/haroldAlb.py | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/haroldAlb.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/haroldAlb.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/haroldAlb.py new file mode 100644 index 0000000000..27d7433ecb --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/haroldAlb.py @@ -0,0 +1,123 @@ +# Operadores Aritméticos +print('Operadores Aritméticos') +num= 2 + 2 # suma +print(num) +print(num - 1) # resta +print(num * 2) # multiplicación +print(num / 3) # división +print(num % 2) # módulo; Devuelve el resto de la división +print(num ** 2) # exponente +print(num // 3) # Devuelve el entero del resultado de la división, sin decimales. + +# Operadores de Comparación +print('Operadores de Comparación') +num2= 8 +print(num == num2) # igual a +print(num != num2) # diferente a +print(num > num2) # mayor que +print(num < num2) # menor que +print(num >= num2) # mayor o igual que +print(num <= num2) # menor o igual que + +# Operadores de Asignación +print('Operadores de Asignación') +num3= 9 # Asigna un valor a un elemento. Puede ser variable, lista, diccionario, tupla, etc. +print(num3) +num3 += 1 # Suma uno a num3 y lo guarda en num3 +print(num3) +num2 -= 1 # Resta uno a num2 y lo guarda en num2 +print(num2) +num2 *= 2 # Multiplica por 2 a num2 y lo guarda en num2 +print(num2) +num2 /= 2 # Divide entre 2 a num2 y lo guarda en num2 +print(num2) +num2 %= 2 # Divide entre 2 a num2 y el resto lo guarda en num2 +print(num2) +num3 **= 2 # Eleva num3 a 2 y lo guarda en num3 +print(num3) + +# Operadores Lógicos +print('Operadores Lógicos') +print(10 > 5 and 3 < 5) # Es verdadero cuando TODAS las expresiones son ciertas. +print(10 > 5 or 3 < 2) # Es verdadero cuando al menos una expresión sea verdadera. +print(not 10 < 5) # Será verdadera cuando la expresión sea falsa y viceversa. + +# Operadores Pertenencia - si un valor está presente dentro de una secuencia (como una cadena, lista, tupla, o un conjunto). +print('Operadores Pertenencia') +hay_letra= ('n' in 'Python') +print(hay_letra) +hay_letra= ('a' not in 'Python') +print(hay_letra) + +# Operadores Identidad - Verifica si dos variables se refieren al mismo objeto en la memoria. +print('Operadores de Identidad') +num = 100 +num2 = num + +print(num is num2) +print(num is not num2) + +# Operadores Bitwise +print('Operadores Bitwise') +a = 10 # 1010 en binario +b = 3 # 0011 en binario +print(a and b) # and(&) 1010 & 0011 = 0010 (decimal 2) +print(a or b) # or(|) 1010 | 0011 = 1011 (decimal 11) +print(a ^ b) # xor(^) 1010 ^ 0011 = 1001 (decimal 9) + +# ESTRUCTURAS DE CONTROL https://www.luisllamas.es/python-condicionales/ +print('ESTRUCTURAS DE CONTROL') +# if, elif y else +print('if, elif y else') +x= 10 +y= 5 +z= 30 +if x < y: # ejecuta un bloque de código si una condición es verdadera + print('x es menos que y') +elif y == z: # se ejecuta si la anterior condicion es falsa y esta es verdadera + print('y es igual a z') +else: # Se ejecuta si todas las anteriores condiciones son falsas + print('Las anteriores son falsas') + +#Bucle for +print('Bucle for') +word= 'Python' +for char in word: + print(char) +nombres= ['Edu', 'Kike', 'Toni', 'Isa', 'Mónica', 'Bego'] +for nombre in nombres: + print(nombre) +for num in range(2,25,2): + print(num) + +# Bucle While +print('Bucle While') +count=0 +while count < 6: + print(count) + count += 1 + +print('Bucle While con Break') +while count < 13: + print(count) + if count == 10: + break # Cuando se ejecute el BREAK, se detendrá el bucle + count += 1 + +print('Bucle while con continue') +while count < 20: + if count % 2 == 0: + count += 1 + continue + print(count) + count += 1 + +print('EJERCICIO OPCIONAL') +# Crea un programa que imprima por consola todos los números comprendidos +# entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + +for num in range(10,56,2): + if num == 16 or num % 3 == 0: + continue + else: + print(num) \ No newline at end of file From dec88fb15a4b681e774c9ef012e520495836aa65 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Tue, 17 Sep 2024 18:02:56 -0500 Subject: [PATCH 357/539] #11 - Java --- .../java/martinbohorquez.java | 315 ++++++++++++++++++ 1 file changed, 315 insertions(+) create mode 100644 Roadmap/11 - MANEJO DE FICHEROS/java/martinbohorquez.java diff --git a/Roadmap/11 - MANEJO DE FICHEROS/java/martinbohorquez.java b/Roadmap/11 - MANEJO DE FICHEROS/java/martinbohorquez.java new file mode 100644 index 0000000000..be37a98029 --- /dev/null +++ b/Roadmap/11 - MANEJO DE FICHEROS/java/martinbohorquez.java @@ -0,0 +1,315 @@ +import java.io.*; +import java.util.LinkedList; +import java.util.List; +import java.util.Scanner; + +import static java.lang.Double.parseDouble; + +/** + * #11 MANEJO DE FICHEROS + * + * @author martinbohorquez + */ +public class martinbohorquez { + private static final FileOperation operation = new FileOperation(); + private static final Scanner scanner = new Scanner(System.in); + private static File venta; + + public static void main(String[] args) { + String stringFile = "src/data.txt"; + String string = """ + Nombre: Martin + Edad: 29 + Lenguaje de programación: Java + """; + testFile(stringFile, string); + + /* + * DIFICULTAD EXTRA + */ + String fileString = "src/venta.txt"; + salesManager(fileString); + } + + private static void testFile(String stringFile, String string) { + File file = operation.create(stringFile); + operation.write(file, string); + operation.read(file); + operation.delete(file); + } + + private static void salesManager(String fileString) { + boolean flag = true; + while (flag) { + System.out.print(""" + ========================================= + ***** PROGRAMA DE GESTIÓN DE VENTAS ***** + 1. Añadir producto + 2. Mostar productos + 3. Consultar producto + 4. Actualizar producto + 5. Borrar producto + 6. Calcular venta total + 7. Calcular venta por producto + 8. Salir + """); + System.out.print("Selecciona la opción (1, 2, 3, 4, 5, 6, 7, 8): "); + String option = scanner.next(); + Product product = new Product(); + switch (option) { + case "1" -> product.add(fileString); + case "2" -> product.read(venta); + case "3" -> product.consultar(venta); + case "4" -> product.update(venta); + case "5" -> product.delete(venta); + case "6" -> product.calcularVentaTotal(venta); + case "7" -> product.calcularVenta(venta); + case "8" -> { + product.deleteAll(venta); + System.out.println("Saliendo del programa de gestión de ventas!"); + flag = false; + } + default -> System.out.println("Debe seleccionar un número de opción válido!"); + } + } + } + + private static void printFileEmpty() { + System.out.println("El archivo se encuentra vacío, no tiene registros!"); + } + + private static void printfException(IOException e, String process) { + System.out.printf("Error al '%s' en el archivo: '%s'%n", process, e.getMessage()); + } + + protected static class FileOperation { + + private File create(String string) { + File file = new File(string); + if (file.getParentFile() != null) file.getParentFile().mkdirs();// Crear la carpeta si no existe + return file; + } + + private void write(File file, String string) { + try (FileWriter writer = new FileWriter(file, true); Scanner reader = new Scanner(file)) { + writer.append(string).append(System.lineSeparator()); + if (!reader.hasNext()) System.out.printf("Archivo '%s' creado!%n", file); + else System.out.printf("Archivo '%s' modificado!%n", file); + } catch (IOException e) { + printfException(e, "escribir"); + } + } + + private void read(File file) { + if (file == null || file.length() == 0) printFileEmpty(); + else { + try (Scanner reader = new Scanner(file)) { + System.out.println("Contenido del archivo: "); + while (reader.hasNext()) System.out.println(reader.nextLine()); + } catch (FileNotFoundException e) { + printfException(e, "leer"); + } + } + } + + private void delete(File file) { + if (file != null && file.delete()) { + if (file.getParentFile() != null && file.getParentFile().delete()) + System.out.printf("Folder '\\%s' eliminado correctamente!%n", file.getParentFile().toString()); + System.out.printf("Archivo '%s' eliminado correctamente!%n", file); + } + } + } + + private static class Product { + private String name; + private Integer quantity; + private Float price; + + private static void printProductNotFind(String name) { + System.out.printf("El producto '%s' no se encuentra en el registro de ventas!%n", name); + } + + private static void printWrongOperation(String name) { + System.out.printf("La operación '%s' no es válida en este método!%n", name); + } + + public Float getPrice() { + return price; + } + + public void setPrice(Float price) { + this.price = price; + } + + public Integer getQuantity() { + return quantity; + } + + public void setQuantity(Integer quantity) { + this.quantity = quantity; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return getName() + ", " + getQuantity() + ", " + getPrice(); + } + + public void add(String fileString) { + setNameScanner("registrar"); + add(fileString, getName()); + } + + public void add(String fileString, String name) { + if (!contains(venta, name)) { + if (venta == null) venta = operation.create(fileString); + setName(name); + setQuantityAndPriceScan(); + operation.write(venta, toString()); + } else System.out.printf("El producto %s ya está registrado, usar la opción de actualizar!%n", name); + } + + private void read(File venta) { + if (venta == null || venta.length() == 0) printFileEmpty(); + else operation.read(venta); + } + + private void consultar(File venta) { + if (venta == null || venta.length() == 0) printFileEmpty(); + else { + try (Scanner reader = new Scanner(venta)) { + boolean flag = true; + setNameScanner("consultar"); + while (flag && reader.hasNext()) { + String productF = reader.nextLine(); + String productNameF = productF.split(", ")[0]; + if (productNameF.equals(getName())) { + System.out.println(productF); + flag = false; + } + } + if (flag) printProductNotFind(getName()); + } catch (FileNotFoundException e) { + printfException(e, "consultar"); + } + } + } + + private void update(File venta) { + updateOrDelete(venta, "actualizar"); + } + + public void delete(File venta) { + updateOrDelete(venta, "eliminar"); + } + + public void calcularVentaTotal(File venta) { + if (venta == null || venta.length() == 0) printFileEmpty(); + else { + try (Scanner reader = new Scanner(venta)) { + double calcularTotal = 0.0; + while (reader.hasNext()) { + String[] components = reader.nextLine().split(", "); + calcularTotal += parseDouble(components[1]) * parseDouble(components[2]); + } + System.out.printf("La venta total: %.2f%n", calcularTotal); + } catch (FileNotFoundException e) { + printfException(e, "calcularVentaTotal"); + } + } + } + + public void calcularVenta(File venta) { + if (venta == null || venta.length() == 0) printFileEmpty(); + else { + try (Scanner reader = new Scanner(venta)) { + setNameScanner("consultar"); + double calcular = 0.0; + while (reader.hasNext()) { + String[] components = reader.nextLine().split(", "); + if (components[0].equals(getName())) + calcular = parseDouble(components[1]) * parseDouble(components[2]); + } + System.out.printf("La venta total del producto '%s': %.2f%n", getName(), calcular); + } catch (FileNotFoundException e) { + printfException(e, "calcularVenta"); + } + } + } + + private void deleteAll(File venta) { + operation.delete(venta); + } + + private void updateOrDelete(File venta, String operation) { + boolean operationFlag = operation.matches("actualizar|eliminar"); + if (!operationFlag) printWrongOperation(operation); + if (venta == null || venta.length() == 0) printFileEmpty(); + if (venta != null && operationFlag) { + boolean flag = false; + boolean flagUpdate = operation.equals("actualizar"); + List fileContent = new LinkedList<>(); + setNameScanner(operation); + try (BufferedReader reader = new BufferedReader(new FileReader(venta))) { + String line; + if (flagUpdate) setQuantityAndPriceScan(); + while ((line = reader.readLine()) != null) { + String productNameF = line.split(", ")[0]; + if (productNameF.equals(getName())) { + line = flagUpdate ? toString() : null; + flag = true; + } + fileContent.add(line); // Actualizamos la linea de la lista + } + } catch (IOException e) { + printfException(e, operation); + } + if (flag) { + // Reescribimos el archivo con el contenido actualizado + try (BufferedWriter writer = new BufferedWriter(new FileWriter(venta))) { + for (String line : fileContent) { + if (line != null) writer.append(line).append(System.lineSeparator()); + } + System.out.printf("El producto '%s' se ha '%so' correctamente!%n", + getName(), operation.substring(0, operation.length() - 2)); + } catch (IOException e) { + printfException(e, operation); + } + } else printProductNotFind(getName()); + } + } + + private void setNameScanner(String operation) { + System.out.printf("Introduce el nombre de producto que desea %s: ", operation); + setName(scanner.next()); + } + + private void setQuantityAndPriceScan() { + System.out.print("Ingresar la cantidad vendida(unidades): "); + setQuantity(scanner.nextInt()); + System.out.print("Ingresar el precio unitario de producto($): "); + setPrice(scanner.nextFloat()); + } + + private boolean contains(File venta, String productName) { + if (venta == null || venta.length() == 0) return false; + try (Scanner reader = new Scanner(venta)) { + while (reader.hasNext()) { + String productNameF = reader.nextLine().split(", ")[0]; + if (productNameF.equals(productName)) return true; + } + } catch (FileNotFoundException e) { + printfException(e, "contains"); + } + return false; + } + } +} \ No newline at end of file From d5a430a933c94fa348724cf64e9a48e0a092215f Mon Sep 17 00:00:00 2001 From: mouredev Date: Wed, 18 Sep 2024 00:15:18 +0000 Subject: [PATCH 358/539] Update stats --- Roadmap/stats.json | 2184 ++++++++++++++++++++++---------------------- 1 file changed, 1107 insertions(+), 1077 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index ca08fe5421..6c80ca5205 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,23 +1,23 @@ { "challenges_total": 39, "languages_total": 48, - "files_total": 7073, - "users_total": 1184, + "files_total": 7110, + "users_total": 1189, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1286 + "count": 1290 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 781 + "count": 786 }, { "order": 3, "name": "02 - FUNCIONES Y ALCANCE", - "count": 597 + "count": 598 }, { "order": 4, @@ -32,32 +32,32 @@ { "order": 6, "name": "06 - RECURSIVIDAD", - "count": 315 + "count": 317 }, { "order": 7, "name": "05 - VALOR Y REFERENCIA", - "count": 289 + "count": 294 }, { "order": 8, "name": "07 - PILAS Y COLAS", - "count": 245 + "count": 247 }, { "order": 9, "name": "08 - CLASES", - "count": 229 + "count": 231 }, { "order": 10, "name": "09 - HERENCIA", - "count": 221 + "count": 222 }, { "order": 11, "name": "10 - EXCEPCIONES", - "count": 182 + "count": 183 }, { "order": 12, @@ -87,7 +87,7 @@ { "order": 17, "name": "15 - ASINCRON\u00cdA", - "count": 125 + "count": 126 }, { "order": 18, @@ -117,7 +117,7 @@ { "order": 23, "name": "22 - FUNCIONES DE ORDEN SUPERIOR", - "count": 82 + "count": 83 }, { "order": 24, @@ -137,12 +137,12 @@ { "order": 27, "name": "26 - SOLID SRP", - "count": 64 + "count": 65 }, { "order": 28, "name": "27 - SOLID OCP", - "count": 61 + "count": 62 }, { "order": 29, @@ -157,12 +157,12 @@ { "order": 31, "name": "32 - BATALLA DEADPOOL Y WOLVERINE", - "count": 50 + "count": 51 }, { "order": 32, "name": "30 - SOLID DIP", - "count": 48 + "count": 49 }, { "order": 33, @@ -172,17 +172,17 @@ { "order": 34, "name": "36 - EL SOMBRERO SELECCIONADOR", - "count": 41 + "count": 42 }, { "order": 35, "name": "31 - SIMULADOR JUEGOS OL\u00cdMPICOS", - "count": 41 + "count": 42 }, { "order": 36, "name": "35 - REPARTIENDO LOS ANILLOS DE PODER", - "count": 40 + "count": 41 }, { "order": 37, @@ -197,63 +197,63 @@ { "order": 39, "name": "38 - MOUREDEV PRO", - "count": 0 + "count": 5 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 3047, - "percentage": 43.08 + "count": 3064, + "percentage": 43.09 }, { "order": 2, "name": "javascript", - "count": 1397, - "percentage": 19.75 + "count": 1400, + "percentage": 19.69 }, { "order": 3, "name": "java", - "count": 646, - "percentage": 9.13 + "count": 654, + "percentage": 9.2 }, { "order": 4, "name": "typescript", - "count": 316, + "count": 318, "percentage": 4.47 }, { "order": 5, "name": "c#", - "count": 255, + "count": 257, "percentage": 3.61 }, { "order": 6, "name": "kotlin", "count": 220, - "percentage": 3.11 + "percentage": 3.09 }, { "order": 7, "name": "go", "count": 216, - "percentage": 3.05 + "percentage": 3.04 }, { "order": 8, "name": "swift", "count": 167, - "percentage": 2.36 + "percentage": 2.35 }, { "order": 9, "name": "php", - "count": 158, - "percentage": 2.23 + "count": 159, + "percentage": 2.24 }, { "order": 10, @@ -265,13 +265,13 @@ "order": 11, "name": "rust", "count": 114, - "percentage": 1.61 + "percentage": 1.6 }, { "order": 12, "name": "c", - "count": 67, - "percentage": 0.95 + "count": 70, + "percentage": 0.98 }, { "order": 13, @@ -289,7 +289,7 @@ "order": 15, "name": "vb.net", "count": 38, - "percentage": 0.54 + "percentage": 0.53 }, { "order": 16, @@ -301,7 +301,7 @@ "order": 17, "name": "ruby", "count": 33, - "percentage": 0.47 + "percentage": 0.46 }, { "order": 18, @@ -317,13 +317,13 @@ }, { "order": 20, - "name": "arduino", - "count": 12, - "percentage": 0.17 + "name": "sql", + "count": 13, + "percentage": 0.18 }, { "order": 21, - "name": "sql", + "name": "arduino", "count": 12, "percentage": 0.17 }, @@ -331,13 +331,13 @@ "order": 22, "name": "cobol", "count": 11, - "percentage": 0.16 + "percentage": 0.15 }, { "order": 23, "name": "nasm", "count": 11, - "percentage": 0.16 + "percentage": 0.15 }, { "order": 24, @@ -500,7 +500,7 @@ { "order": 2, "name": "kenysdev", - "count": 152, + "count": 153, "languages": 4 }, { @@ -547,34 +547,34 @@ }, { "order": 10, + "name": "eulogioep", + "count": 63, + "languages": 6 + }, + { + "order": 11, "name": "rantamhack", "count": 63, "languages": 3 }, { - "order": 11, + "order": 12, "name": "cesar-ch", "count": 62, "languages": 6 }, { - "order": 12, + "order": 13, "name": "agusrosero", "count": 61, "languages": 5 }, { - "order": 13, + "order": 14, "name": "sac-corts", "count": 61, "languages": 2 }, - { - "order": 14, - "name": "eulogioep", - "count": 58, - "languages": 6 - }, { "order": 15, "name": "jesusantonioeescamilla", @@ -662,20 +662,20 @@ { "order": 29, "name": "neslarra", - "count": 39, + "count": 40, "languages": 2 }, { "order": 30, - "name": "alexdevrep", - "count": 38, - "languages": 3 + "name": "oriaj3", + "count": 39, + "languages": 1 }, { "order": 31, - "name": "oriaj3", + "name": "alexdevrep", "count": 38, - "languages": 1 + "languages": 3 }, { "order": 32, @@ -703,46 +703,46 @@ }, { "order": 36, - "name": "asjordi", + "name": "soohav", "count": 37, "languages": 1 }, { "order": 37, + "name": "asjordi", + "count": 37, + "languages": 1 + }, + { + "order": 38, "name": "qv1ko", "count": 36, "languages": 4 }, { - "order": 38, + "order": 39, "name": "n0hagonada", "count": 36, "languages": 3 }, { - "order": 39, + "order": 40, "name": "avcenal", "count": 36, "languages": 1 }, { - "order": 40, + "order": 41, "name": "rigo93acosta", "count": 36, "languages": 1 }, { - "order": 41, + "order": 42, "name": "raynerpv2022", "count": 35, "languages": 2 }, - { - "order": 42, - "name": "soohav", - "count": 35, - "languages": 1 - }, { "order": 43, "name": "angelsanchezt", @@ -769,40 +769,40 @@ }, { "order": 47, + "name": "adra-dev", + "count": 33, + "languages": 1 + }, + { + "order": 48, "name": "juandaherrera", "count": 32, "languages": 5 }, { - "order": 48, + "order": 49, "name": "pedroomar23", "count": 32, "languages": 3 }, { - "order": 49, + "order": 50, "name": "pyramsd", "count": 32, "languages": 1 }, { - "order": 50, + "order": 51, "name": "ronipg", "count": 31, "languages": 4 }, { - "order": 51, + "order": 52, "name": "marcode24", "count": 30, "languages": 3 }, - { - "order": 52, - "name": "adra-dev", - "count": 30, - "languages": 1 - }, { "order": 53, "name": "alanshakir", @@ -829,49 +829,49 @@ }, { "order": 57, + "name": "simonguzman", + "count": 28, + "languages": 1 + }, + { + "order": 58, "name": "thegera4", "count": 27, "languages": 2 }, { - "order": 58, + "order": 59, "name": "isilanes", "count": 27, "languages": 1 }, { - "order": 59, + "order": 60, "name": "lucasrebuffo", "count": 27, "languages": 1 }, { - "order": 60, + "order": 61, "name": "isaacus98", "count": 26, "languages": 4 }, { - "order": 61, + "order": 62, "name": "nightblockchain30", "count": 26, "languages": 2 }, - { - "order": 62, - "name": "caverobrandon", - "count": 26, - "languages": 1 - }, { "order": 63, - "name": "ggilperez", + "name": "caverobrandon", "count": 26, "languages": 1 }, { "order": 64, - "name": "simonguzman", + "name": "ggilperez", "count": 26, "languages": 1 }, @@ -925,37 +925,37 @@ }, { "order": 73, - "name": "victor-casta", - "count": 22, - "languages": 3 + "name": "juandaw37", + "count": 23, + "languages": 1 }, { "order": 74, - "name": "ycanas", + "name": "victor-casta", "count": 22, - "languages": 2 + "languages": 3 }, { "order": 75, - "name": "emedevelopa", + "name": "ycanas", "count": 22, - "languages": 1 + "languages": 2 }, { "order": 76, - "name": "jptxaya", + "name": "emedevelopa", "count": 22, "languages": 1 }, { "order": 77, - "name": "gordo-master", + "name": "jptxaya", "count": 22, "languages": 1 }, { "order": 78, - "name": "juandaw37", + "name": "gordo-master", "count": 22, "languages": 1 }, @@ -1159,91 +1159,91 @@ }, { "order": 112, + "name": "juanchernandezdev", + "count": 15, + "languages": 1 + }, + { + "order": 113, "name": "sniker1223", "count": 14, "languages": 4 }, { - "order": 113, + "order": 114, "name": "redom69", "count": 14, "languages": 4 }, { - "order": 114, + "order": 115, "name": "jesuses1312", "count": 14, "languages": 3 }, { - "order": 115, + "order": 116, "name": "andresgcastillo", "count": 14, "languages": 2 }, { - "order": 116, + "order": 117, "name": "ygriegasb", "count": 14, "languages": 2 }, { - "order": 117, + "order": 118, "name": "gonzadev28", "count": 14, "languages": 2 }, - { - "order": 118, - "name": "elmer125", - "count": 14, - "languages": 1 - }, { "order": 119, - "name": "vincentrodriguezr", + "name": "deathwing696", "count": 14, - "languages": 1 + "languages": 2 }, { "order": 120, - "name": "juanchernandezdev", + "name": "elmer125", "count": 14, "languages": 1 }, { "order": 121, - "name": "mikelm2020", + "name": "vincentrodriguezr", "count": 14, "languages": 1 }, { "order": 122, - "name": "paula2409", + "name": "mikelm2020", "count": 14, "languages": 1 }, { "order": 123, - "name": "volumidev", - "count": 13, - "languages": 3 + "name": "paula2409", + "count": 14, + "languages": 1 }, { "order": 124, - "name": "diegoibb", + "name": "volumidev", "count": 13, "languages": 3 }, { "order": 125, - "name": "manjaitan", + "name": "diegoibb", "count": 13, - "languages": 2 + "languages": 3 }, { "order": 126, - "name": "deathwing696", + "name": "manjaitan", "count": 13, "languages": 2 }, @@ -1303,745 +1303,745 @@ }, { "order": 136, - "name": "keltoi-dev", + "name": "martinbohorquez", "count": 12, "languages": 2 }, { "order": 137, - "name": "andresmcardenas", + "name": "keltoi-dev", "count": 12, "languages": 2 }, { "order": 138, - "name": "a-mayans", + "name": "andresmcardenas", "count": 12, "languages": 2 }, { "order": 139, + "name": "a-mayans", + "count": 12, + "languages": 2 + }, + { + "order": 140, "name": "pancratzia", "count": 12, "languages": 1 }, { - "order": 140, + "order": 141, "name": "jeronimocardu", "count": 12, "languages": 1 }, { - "order": 141, + "order": 142, "name": "evilpotato04", "count": 12, "languages": 1 }, { - "order": 142, + "order": 143, "name": "javierjoyera", "count": 12, "languages": 1 }, { - "order": 143, + "order": 144, "name": "dataciriano", "count": 12, "languages": 1 }, { - "order": 144, + "order": 145, "name": "josealberto13", "count": 12, "languages": 1 }, { - "order": 145, + "order": 146, "name": "clmiranda", "count": 12, "languages": 1 }, { - "order": 146, + "order": 147, "name": "andrewcodev", "count": 12, "languages": 1 }, { - "order": 147, + "order": 148, "name": "javierfiestasbotella", "count": 12, "languages": 1 }, { - "order": 148, + "order": 149, "name": "pipe281", "count": 12, "languages": 1 }, { - "order": 149, + "order": 150, "name": "jchavescaceres", "count": 11, "languages": 2 }, { - "order": 150, + "order": 151, "name": "switchdays", "count": 11, "languages": 2 }, { - "order": 151, + "order": 152, "name": "arkmiguel379", "count": 11, "languages": 2 }, { - "order": 152, + "order": 153, "name": "ialmontedr0", "count": 11, "languages": 1 }, { - "order": 153, + "order": 154, "name": "charlerodriguez3", "count": 11, "languages": 1 }, { - "order": 154, + "order": 155, "name": "oleojake", "count": 11, "languages": 1 }, { - "order": 155, + "order": 156, "name": "alainmartz", "count": 11, "languages": 1 }, { - "order": 156, + "order": 157, "name": "warclimb", "count": 11, "languages": 1 }, { - "order": 157, + "order": 158, "name": "mirandayuber", "count": 11, "languages": 1 }, { - "order": 158, + "order": 159, "name": "m1l0j05", "count": 11, "languages": 1 }, { - "order": 159, + "order": 160, "name": "59822", "count": 11, "languages": 1 }, { - "order": 160, + "order": 161, "name": "majinka10", "count": 11, "languages": 1 }, { - "order": 161, + "order": 162, "name": "jeigar2", "count": 11, "languages": 1 }, { - "order": 162, + "order": 163, "name": "abelade", "count": 11, "languages": 1 }, { - "order": 163, + "order": 164, "name": "gustavogomez19", "count": 11, "languages": 1 }, { - "order": 164, + "order": 165, "name": "evanz2608", "count": 11, "languages": 1 }, { - "order": 165, + "order": 166, "name": "bertomp", "count": 10, "languages": 5 }, { - "order": 166, + "order": 167, "name": "othamae", "count": 10, "languages": 3 }, { - "order": 167, + "order": 168, "name": "vixxtory", "count": 10, "languages": 2 }, { - "order": 168, + "order": 169, "name": "rianojnicolas", "count": 10, "languages": 2 }, { - "order": 169, + "order": 170, "name": "m-doce", "count": 10, "languages": 2 }, { - "order": 170, + "order": 171, "name": "natalyjoanna", "count": 10, "languages": 1 }, { - "order": 171, + "order": 172, "name": "glitzypanic", "count": 10, "languages": 1 }, { - "order": 172, + "order": 173, "name": "popmaquin", "count": 10, "languages": 1 }, { - "order": 173, + "order": 174, "name": "k-90", "count": 10, "languages": 1 }, { - "order": 174, + "order": 175, "name": "marcose-ferretoe", "count": 10, "languages": 1 }, { - "order": 175, + "order": 176, "name": "thonys07", "count": 10, "languages": 1 }, { - "order": 176, + "order": 177, "name": "daparradom", "count": 10, "languages": 1 }, { - "order": 177, + "order": 178, "name": "josecox13", "count": 10, "languages": 1 }, { - "order": 178, + "order": 179, "name": "xemita007", "count": 10, "languages": 1 }, { - "order": 179, + "order": 180, "name": "littlemabbit", "count": 10, "languages": 1 }, { - "order": 180, + "order": 181, "name": "kleyner098", "count": 10, "languages": 1 }, { - "order": 181, + "order": 182, "name": "teren91", "count": 10, "languages": 1 }, { - "order": 182, + "order": 183, "name": "mauricio-leyva", "count": 10, "languages": 1 }, { - "order": 183, + "order": 184, "name": "julianbuitragocharry-dev", "count": 9, "languages": 3 }, { - "order": 184, + "order": 185, "name": "joseesmil04", "count": 9, "languages": 2 }, { - "order": 185, + "order": 186, "name": "djsurgeon", "count": 9, "languages": 2 }, { - "order": 186, + "order": 187, "name": "luisolivaresj", "count": 9, "languages": 2 }, { - "order": 187, + "order": 188, + "name": "d1d4cum", + "count": 9, + "languages": 2 + }, + { + "order": 189, "name": "karys4", "count": 9, "languages": 1 }, { - "order": 188, + "order": 190, "name": "cmejiajulian", "count": 9, "languages": 1 }, { - "order": 189, + "order": 191, "name": "omarland", "count": 9, "languages": 1 }, { - "order": 190, + "order": 192, "name": "brockar", "count": 9, "languages": 1 }, { - "order": 191, + "order": 193, "name": "jcdm60", "count": 9, "languages": 1 }, { - "order": 192, + "order": 194, "name": "troynebula", "count": 9, "languages": 1 }, { - "order": 193, + "order": 195, "name": "yoezequiel", "count": 9, "languages": 1 }, { - "order": 194, + "order": 196, "name": "gjbecerrae", "count": 9, "languages": 1 }, { - "order": 195, + "order": 197, "name": "sperezsa", "count": 9, "languages": 1 }, { - "order": 196, + "order": 198, "name": "angel-delg", "count": 8, "languages": 4 }, { - "order": 197, + "order": 199, "name": "pakiuh", "count": 8, "languages": 4 }, { - "order": 198, + "order": 200, "name": "pcosin", "count": 8, "languages": 2 }, { - "order": 199, + "order": 201, "name": "ansuzgs", "count": 8, "languages": 2 }, { - "order": 200, + "order": 202, "name": "xmunder", "count": 8, "languages": 2 }, { - "order": 201, - "name": "martinbohorquez", - "count": 8, - "languages": 2 - }, - { - "order": 202, + "order": 203, "name": "matitc", "count": 8, "languages": 1 }, { - "order": 203, + "order": 204, "name": "srvariable", "count": 8, "languages": 1 }, { - "order": 204, + "order": 205, "name": "isj-code", "count": 8, "languages": 1 }, { - "order": 205, + "order": 206, "name": "westwbn", "count": 8, "languages": 1 }, { - "order": 206, + "order": 207, "name": "jaxi86", "count": 8, "languages": 1 }, { - "order": 207, + "order": 208, "name": "vid92", "count": 8, "languages": 1 }, { - "order": 208, + "order": 209, "name": "toral24", "count": 8, "languages": 1 }, { - "order": 209, + "order": 210, "name": "jtrujilloalcocer", "count": 8, "languages": 1 }, { - "order": 210, + "order": 211, "name": "linerlander", "count": 8, "languages": 1 }, { - "order": 211, + "order": 212, "name": "zequy40", "count": 8, "languages": 1 }, { - "order": 212, + "order": 213, "name": "abelperezcollado", "count": 8, "languages": 1 }, { - "order": 213, + "order": 214, "name": "cyberdidac", "count": 8, "languages": 1 }, { - "order": 214, + "order": 215, "name": "bytecodesky", "count": 8, "languages": 1 }, { - "order": 215, + "order": 216, "name": "darubiano", "count": 7, "languages": 7 }, { - "order": 216, + "order": 217, "name": "cubandeveloper89", "count": 7, "languages": 3 }, { - "order": 217, + "order": 218, "name": "nwpablodeveloper", "count": 7, "languages": 3 }, { - "order": 218, + "order": 219, "name": "h4ckxel", "count": 7, "languages": 2 }, { - "order": 219, + "order": 220, "name": "danielbelenguer", "count": 7, "languages": 2 }, { - "order": 220, + "order": 221, "name": "younes0-0", "count": 7, "languages": 2 }, { - "order": 221, + "order": 222, "name": "hectordbh", "count": 7, "languages": 1 }, { - "order": 222, + "order": 223, "name": "18miguelgalarza", "count": 7, "languages": 1 }, { - "order": 223, + "order": 224, "name": "marinaortells", "count": 7, "languages": 1 }, { - "order": 224, + "order": 225, "name": "abrahamraies", "count": 7, "languages": 1 }, { - "order": 225, + "order": 226, "name": "ocandodev", "count": 7, "languages": 1 }, { - "order": 226, + "order": 227, "name": "franvozzi", "count": 7, "languages": 1 }, { - "order": 227, + "order": 228, "name": "dgrex", "count": 7, "languages": 1 }, { - "order": 228, + "order": 229, "name": "albertomorilla", "count": 7, "languages": 1 }, { - "order": 229, + "order": 230, "name": "alextc35", "count": 7, "languages": 1 }, { - "order": 230, + "order": 231, "name": "ldre3", "count": 7, "languages": 1 }, { - "order": 231, + "order": 232, "name": "mtirador", "count": 7, "languages": 1 }, { - "order": 232, + "order": 233, "name": "curtobrull", "count": 6, "languages": 3 }, { - "order": 233, + "order": 234, "name": "fidelysla", "count": 6, "languages": 3 }, { - "order": 234, + "order": 235, "name": "adrs1166ma", "count": 6, "languages": 2 }, { - "order": 235, + "order": 236, "name": "devknn", "count": 6, "languages": 2 }, { - "order": 236, + "order": 237, "name": "danilo0203", "count": 6, "languages": 2 }, { - "order": 237, + "order": 238, "name": "isaias-alt", "count": 6, "languages": 2 }, { - "order": 238, + "order": 239, "name": "luterfloyd", "count": 6, "languages": 2 }, { - "order": 239, + "order": 240, "name": "kronstadt-lambda", "count": 6, "languages": 2 }, { - "order": 240, + "order": 241, "name": "troleomotor10", "count": 6, "languages": 2 }, { - "order": 241, + "order": 242, "name": "oixild", "count": 6, "languages": 2 }, { - "order": 242, + "order": 243, "name": "luisk0706", "count": 6, "languages": 2 }, { - "order": 243, + "order": 244, "name": "rserradev", "count": 6, "languages": 2 }, { - "order": 244, + "order": 245, "name": "roswer13", "count": 6, "languages": 2 }, - { - "order": 245, - "name": "glossypath", - "count": 6, - "languages": 1 - }, { "order": 246, - "name": "guillemduno", + "name": "glossypath", "count": 6, "languages": 1 }, { "order": 247, - "name": "mxtrar23", + "name": "guillemduno", "count": 6, "languages": 1 }, { "order": 248, - "name": "dannymarperone", + "name": "mxtrar23", "count": 6, "languages": 1 }, { "order": 249, - "name": "facundo-muoio", + "name": "dannymarperone", "count": 6, "languages": 1 }, { "order": 250, - "name": "lazar171717ech", + "name": "facundo-muoio", "count": 6, "languages": 1 }, { "order": 251, - "name": "eduhumanes91", + "name": "lazar171717ech", "count": 6, "languages": 1 }, { "order": 252, - "name": "abascal92", + "name": "eduhumanes91", "count": 6, "languages": 1 }, { "order": 253, - "name": "blancowilson", + "name": "abascal92", "count": 6, "languages": 1 }, { "order": 254, - "name": "eamartin96", + "name": "blancowilson", "count": 6, "languages": 1 }, { "order": 255, - "name": "dafi02", + "name": "eamartin96", "count": 6, "languages": 1 }, { "order": 256, - "name": "gliadev", + "name": "dafi02", "count": 6, "languages": 1 }, { "order": 257, - "name": "wolffcode", + "name": "gliadev", "count": 6, "languages": 1 }, { "order": 258, - "name": "yeisonagm", + "name": "wolffcode", "count": 6, "languages": 1 }, { "order": 259, - "name": "d1d4cum", + "name": "yeisonagm", "count": 6, "languages": 1 }, @@ -2821,4776 +2821,4806 @@ }, { "order": 389, - "name": "mellamoomar", + "name": "elbarbero", "count": 3, "languages": 1 }, { "order": 390, - "name": "oscar503sv", + "name": "mellamoomar", "count": 3, "languages": 1 }, { "order": 391, - "name": "alejomazov", + "name": "oscar503sv", "count": 3, "languages": 1 }, { "order": 392, - "name": "bryanalzate007", + "name": "alejomazov", "count": 3, "languages": 1 }, { "order": 393, - "name": "ivanpelu7", + "name": "bryanalzate007", "count": 3, "languages": 1 }, { "order": 394, - "name": "dmauricio4", + "name": "ivanpelu7", "count": 3, "languages": 1 }, { "order": 395, - "name": "davidr1594", + "name": "dmauricio4", "count": 3, "languages": 1 }, { "order": 396, - "name": "vandresca", + "name": "davidr1594", "count": 3, "languages": 1 }, { "order": 397, - "name": "marlonleon2023", + "name": "vandresca", "count": 3, "languages": 1 }, { "order": 398, - "name": "nikorasu-d", + "name": "marlonleon2023", "count": 3, "languages": 1 }, { "order": 399, - "name": "barbafebles", + "name": "nikorasu-d", "count": 3, "languages": 1 }, { "order": 400, - "name": "heliercamejo", + "name": "barbafebles", "count": 3, "languages": 1 }, { "order": 401, - "name": "aggranadoss", + "name": "heliercamejo", "count": 3, "languages": 1 }, { "order": 402, - "name": "dannyvera1234", + "name": "aggranadoss", "count": 3, "languages": 1 }, { "order": 403, - "name": "axelsparta", + "name": "dannyvera1234", "count": 3, "languages": 1 }, { "order": 404, - "name": "gitperalta", + "name": "axelsparta", "count": 3, "languages": 1 }, { "order": 405, - "name": "samuelarandia", + "name": "gitperalta", "count": 3, "languages": 1 }, { "order": 406, - "name": "jaimerocel96", + "name": "samuelarandia", "count": 3, "languages": 1 }, { "order": 407, - "name": "sitnestic", + "name": "jaimerocel96", "count": 3, "languages": 1 }, { "order": 408, - "name": "matteozhao98", + "name": "sitnestic", "count": 3, "languages": 1 }, { "order": 409, - "name": "tebaah", + "name": "matteozhao98", "count": 3, "languages": 1 }, { "order": 410, - "name": "sebasgrdev", + "name": "tebaah", "count": 3, "languages": 1 }, { "order": 411, - "name": "14davidnkt", + "name": "sebasgrdev", "count": 3, "languages": 1 }, { "order": 412, - "name": "legs30011", + "name": "14davidnkt", "count": 3, "languages": 1 }, { "order": 413, - "name": "dariorfm", + "name": "legs30011", "count": 3, "languages": 1 }, { "order": 414, - "name": "orlas135", + "name": "dariorfm", "count": 3, "languages": 1 }, { "order": 415, - "name": "arbenisacosta", + "name": "orlas135", "count": 3, "languages": 1 }, { "order": 416, - "name": "hectoriglesias", + "name": "arbenisacosta", "count": 3, "languages": 1 }, { "order": 417, - "name": "matrix-miguel", + "name": "hectoriglesias", "count": 3, "languages": 1 }, { "order": 418, - "name": "jacarrillob", + "name": "matrix-miguel", "count": 3, "languages": 1 }, { "order": 419, - "name": "jelozanov", + "name": "jacarrillob", "count": 3, "languages": 1 }, { "order": 420, - "name": "andyfg0289", + "name": "jelozanov", "count": 3, "languages": 1 }, { "order": 421, - "name": "daniback95", + "name": "andyfg0289", "count": 3, "languages": 1 }, { "order": 422, - "name": "r4kso", + "name": "daniback95", "count": 3, "languages": 1 }, { "order": 423, - "name": "singularpigeon", + "name": "r4kso", "count": 3, "languages": 1 }, { "order": 424, - "name": "sandracalatayud", + "name": "singularpigeon", "count": 3, "languages": 1 }, { "order": 425, - "name": "andresargote", + "name": "sandracalatayud", "count": 3, "languages": 1 }, { "order": 426, - "name": "fernandog25", + "name": "andresargote", "count": 3, "languages": 1 }, { "order": 427, - "name": "agusbelp", + "name": "fernandog25", "count": 3, "languages": 1 }, { "order": 428, - "name": "uyarra73", + "name": "agusbelp", "count": 3, "languages": 1 }, { "order": 429, - "name": "asaelz", + "name": "uyarra73", "count": 3, "languages": 1 }, { "order": 430, - "name": "davidb313", + "name": "asaelz", "count": 3, "languages": 1 }, { "order": 431, - "name": "fdcorreadev", + "name": "davidb313", "count": 3, "languages": 1 }, { "order": 432, - "name": "magupe09", + "name": "fdcorreadev", "count": 3, "languages": 1 }, { "order": 433, - "name": "nathaliamf", + "name": "magupe09", "count": 3, "languages": 1 }, { "order": 434, - "name": "victorsschz", + "name": "nathaliamf", "count": 3, "languages": 1 }, { "order": 435, - "name": "hatorob", + "name": "victorsschz", "count": 3, "languages": 1 }, { "order": 436, - "name": "zuluangel", + "name": "hatorob", "count": 3, "languages": 1 }, { "order": 437, - "name": "matiascba27", + "name": "zuluangel", "count": 3, "languages": 1 }, { "order": 438, - "name": "faga01", + "name": "matiascba27", "count": 3, "languages": 1 }, { "order": 439, - "name": "ahinar", + "name": "faga01", "count": 3, "languages": 1 }, { "order": 440, - "name": "migueltfangche", + "name": "ahinar", "count": 3, "languages": 1 }, { "order": 441, - "name": "erysnell", + "name": "migueltfangche", "count": 3, "languages": 1 }, { "order": 442, - "name": "duendeintemporal", + "name": "erysnell", "count": 3, "languages": 1 }, { "order": 443, - "name": "josueeeee", + "name": "duendeintemporal", "count": 3, "languages": 1 }, { "order": 444, - "name": "emaenriquez", + "name": "josueeeee", "count": 3, "languages": 1 }, { "order": 445, - "name": "sebascmb", + "name": "emaenriquez", "count": 3, "languages": 1 }, { "order": 446, - "name": "gpinedaoviedo", + "name": "sebascmb", "count": 3, "languages": 1 }, { "order": 447, - "name": "blfuentes", + "name": "gpinedaoviedo", "count": 3, "languages": 1 }, { "order": 448, - "name": "javiearth", + "name": "blfuentes", "count": 3, "languages": 1 }, { "order": 449, - "name": "atienzar", + "name": "javiearth", "count": 3, "languages": 1 }, { "order": 450, - "name": "coshiloco", + "name": "atienzar", "count": 3, "languages": 1 }, { "order": 451, - "name": "crisvigas", + "name": "coshiloco", "count": 3, "languages": 1 }, { "order": 452, - "name": "tomytsa", + "name": "crisvigas", "count": 3, "languages": 1 }, { "order": 453, - "name": "rocallejas", + "name": "tomytsa", "count": 3, "languages": 1 }, { "order": 454, - "name": "guido2288", + "name": "rocallejas", "count": 3, "languages": 1 }, { "order": 455, - "name": "githjuan", + "name": "guido2288", "count": 3, "languages": 1 }, { "order": 456, - "name": "jeyker-dev", + "name": "githjuan", "count": 3, "languages": 1 }, { "order": 457, - "name": "eliskopun", + "name": "jeyker-dev", "count": 3, "languages": 1 }, { "order": 458, - "name": "ramon-almeida", + "name": "eliskopun", "count": 3, "languages": 1 }, { "order": 459, - "name": "danielperezrubio", + "name": "ramon-almeida", "count": 3, "languages": 1 }, { "order": 460, - "name": "minn09", + "name": "danielperezrubio", "count": 3, "languages": 1 }, { "order": 461, - "name": "elkin-dev", + "name": "minn09", "count": 3, "languages": 1 }, { "order": 462, - "name": "bertolini-victor", + "name": "elkin-dev", "count": 3, "languages": 1 }, { "order": 463, - "name": "jorgegarcia-dev", + "name": "bertolini-victor", "count": 3, "languages": 1 }, { "order": 464, - "name": "suescun845", + "name": "jorgegarcia-dev", "count": 3, "languages": 1 }, { "order": 465, - "name": "carlosalberto05", + "name": "suescun845", "count": 3, "languages": 1 }, { "order": 466, - "name": "mmacalli", + "name": "carlosalberto05", "count": 3, "languages": 1 }, { "order": 467, - "name": "ggtorca", + "name": "mmacalli", "count": 3, "languages": 1 }, { "order": 468, - "name": "mstaz4", + "name": "ggtorca", "count": 3, "languages": 1 }, { "order": 469, - "name": "emilianohoyos", + "name": "mstaz4", "count": 3, "languages": 1 }, { "order": 470, - "name": "rgeditv1", + "name": "emilianohoyos", "count": 3, "languages": 1 }, { "order": 471, - "name": "elder202", + "name": "rgeditv1", "count": 3, "languages": 1 }, { "order": 472, - "name": "dandrusco", + "name": "elder202", "count": 3, "languages": 1 }, { "order": 473, - "name": "mizadlogcia", + "name": "dandrusco", "count": 3, "languages": 1 }, { "order": 474, - "name": "antii16", + "name": "mizadlogcia", "count": 3, "languages": 1 }, { "order": 475, - "name": "strooplab", + "name": "antii16", "count": 3, "languages": 1 }, { "order": 476, - "name": "marcoh2325", + "name": "strooplab", "count": 3, "languages": 1 }, { "order": 477, - "name": "frostbitepy", + "name": "marcoh2325", "count": 3, "languages": 1 }, { "order": 478, - "name": "zzepu", + "name": "frostbitepy", "count": 3, "languages": 1 }, { "order": 479, - "name": "tekatoki", + "name": "zzepu", "count": 3, "languages": 1 }, { "order": 480, - "name": "yeam-10", + "name": "tekatoki", "count": 3, "languages": 1 }, { "order": 481, - "name": "exanderguitar", + "name": "yeam-10", "count": 3, "languages": 1 }, { "order": 482, - "name": "camilo-zuluaga", + "name": "exanderguitar", "count": 3, "languages": 1 }, { "order": 483, - "name": "macova96", + "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { "order": 484, - "name": "betzadev", + "name": "macova96", "count": 3, "languages": 1 }, { "order": 485, - "name": "monikgbar", + "name": "betzadev", "count": 3, "languages": 1 }, { "order": 486, - "name": "guillesese", + "name": "monikgbar", "count": 3, "languages": 1 }, { "order": 487, - "name": "artdugarte", + "name": "guillesese", "count": 3, "languages": 1 }, { "order": 488, - "name": "jofedev", + "name": "artdugarte", "count": 3, "languages": 1 }, { "order": 489, - "name": "oscarhub90", + "name": "jofedev", "count": 3, "languages": 1 }, { "order": 490, - "name": "tonywarcode", + "name": "oscarhub90", "count": 3, "languages": 1 }, { "order": 491, - "name": "oscargeovannyrincon", + "name": "tonywarcode", "count": 3, "languages": 1 }, { "order": 492, - "name": "joandevpy", + "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { "order": 493, - "name": "estelacode", + "name": "joandevpy", "count": 3, "languages": 1 }, { "order": 494, - "name": "xurxogz", + "name": "estelacode", "count": 3, "languages": 1 }, { "order": 495, - "name": "freedainew", + "name": "xurxogz", "count": 3, "languages": 1 }, { "order": 496, - "name": "swifty0705", + "name": "freedainew", "count": 3, "languages": 1 }, { "order": 497, - "name": "marce1084", + "name": "swifty0705", "count": 3, "languages": 1 }, { "order": 498, - "name": "rubioj17", + "name": "marce1084", "count": 3, "languages": 1 }, { "order": 499, - "name": "kingsaul22", + "name": "rubioj17", "count": 3, "languages": 1 }, { "order": 500, - "name": "ainoaran", + "name": "kingsaul22", "count": 3, "languages": 1 }, { "order": 501, - "name": "francofmv", + "name": "ainoaran", "count": 3, "languages": 1 }, { "order": 502, - "name": "marianoemir", + "name": "francofmv", "count": 3, "languages": 1 }, { "order": 503, - "name": "davidsorroche", + "name": "marianoemir", "count": 3, "languages": 1 }, { "order": 504, - "name": "david-quinones", + "name": "davidsorroche", "count": 3, "languages": 1 }, { "order": 505, - "name": "fluna29", + "name": "david-quinones", "count": 3, "languages": 1 }, { "order": 506, - "name": "natalinacn", + "name": "fluna29", "count": 3, "languages": 1 }, { "order": 507, - "name": "kine-jdf", + "name": "natalinacn", "count": 3, "languages": 1 }, { "order": 508, - "name": "yaretzyrb", + "name": "kine-jdf", "count": 3, "languages": 1 }, { "order": 509, - "name": "confley", + "name": "yaretzyrb", "count": 3, "languages": 1 }, { "order": 510, - "name": "beonzj", + "name": "confley", "count": 3, "languages": 1 }, { "order": 511, - "name": "davidvilem", + "name": "beonzj", "count": 3, "languages": 1 }, { "order": 512, - "name": "mantaras96", + "name": "davidvilem", "count": 3, "languages": 1 }, { "order": 513, - "name": "juxxon23", + "name": "mantaras96", "count": 3, "languages": 1 }, { "order": 514, - "name": "frangarmez21", + "name": "juxxon23", "count": 3, "languages": 1 }, { "order": 515, - "name": "ikeragi05", + "name": "frangarmez21", "count": 3, "languages": 1 }, { "order": 516, - "name": "johnalexguerrero", + "name": "ikeragi05", "count": 3, "languages": 1 }, { "order": 517, + "name": "johnalexguerrero", + "count": 3, + "languages": 1 + }, + { + "order": 518, "name": "devvdroid01", "count": 2, "languages": 2 }, { - "order": 518, + "order": 519, "name": "sgb004", "count": 2, "languages": 2 }, { - "order": 519, + "order": 520, "name": "chuanmi", "count": 2, "languages": 2 }, { - "order": 520, + "order": 521, "name": "jlcareglio", "count": 2, "languages": 2 }, { - "order": 521, + "order": 522, "name": "jurgen-alfaro", "count": 2, "languages": 2 }, { - "order": 522, + "order": 523, "name": "lydaf", "count": 2, "languages": 2 }, { - "order": 523, + "order": 524, "name": "carresoft", "count": 2, "languages": 2 }, { - "order": 524, + "order": 525, "name": "ismaelmatiz", "count": 2, "languages": 2 }, { - "order": 525, + "order": 526, "name": "tecfer", "count": 2, "languages": 2 }, { - "order": 526, + "order": 527, "name": "elsanty08", "count": 2, "languages": 2 }, { - "order": 527, + "order": 528, "name": "jorgesilencio", "count": 2, "languages": 2 }, { - "order": 528, + "order": 529, "name": "berentolkien", "count": 2, "languages": 2 }, { - "order": 529, + "order": 530, "name": "felipedev303", "count": 2, "languages": 2 }, { - "order": 530, + "order": 531, "name": "lemito66", "count": 2, "languages": 2 }, { - "order": 531, + "order": 532, "name": "alexsamboy", "count": 2, "languages": 2 }, { - "order": 532, + "order": 533, "name": "enrgarvic", "count": 2, "languages": 2 }, { - "order": 533, + "order": 534, "name": "jovany-java", "count": 2, "languages": 2 }, { - "order": 534, + "order": 535, "name": "raul-progr", "count": 2, "languages": 2 }, { - "order": 535, + "order": 536, "name": "jmofuture", "count": 2, "languages": 2 }, { - "order": 536, + "order": 537, "name": "angel-alvarez-dev", "count": 2, "languages": 2 }, { - "order": 537, + "order": 538, "name": "lilberick", "count": 2, "languages": 2 }, { - "order": 538, + "order": 539, "name": "camiloforero1997", "count": 2, "languages": 2 }, { - "order": 539, + "order": 540, "name": "alejosor", "count": 2, "languages": 2 }, { - "order": 540, + "order": 541, "name": "juan-wills", "count": 2, "languages": 2 }, { - "order": 541, + "order": 542, "name": "lurtur", "count": 2, "languages": 2 }, { - "order": 542, + "order": 543, "name": "jhonatanmustiolacas", "count": 2, "languages": 2 }, { - "order": 543, + "order": 544, "name": "elmarqueli", "count": 2, "languages": 1 }, { - "order": 544, + "order": 545, "name": "tiaguiito3", "count": 2, "languages": 1 }, { - "order": 545, + "order": 546, "name": "angelargumedo", "count": 2, "languages": 1 }, { - "order": 546, + "order": 547, "name": "reaien", "count": 2, "languages": 1 }, { - "order": 547, + "order": 548, "name": "rikar20", "count": 2, "languages": 1 }, { - "order": 548, + "order": 549, "name": "vdroiid", "count": 2, "languages": 1 }, { - "order": 549, + "order": 550, "name": "frannmv", "count": 2, "languages": 1 }, { - "order": 550, + "order": 551, "name": "rrcoder", "count": 2, "languages": 1 }, { - "order": 551, + "order": 552, "name": "diegosilval", "count": 2, "languages": 1 }, - { - "order": 552, - "name": "nandaalf", - "count": 2, - "languages": 1 - }, { "order": 553, - "name": "hawkbott", + "name": "nandaalf", "count": 2, "languages": 1 }, { "order": 554, - "name": "tomasmarquez81", + "name": "hawkbott", "count": 2, "languages": 1 }, { "order": 555, - "name": "poetry0354", + "name": "tomasmarquez81", "count": 2, "languages": 1 }, { "order": 556, - "name": "santiagocuevas2003", + "name": "poetry0354", "count": 2, "languages": 1 }, { "order": 557, - "name": "lmedina96", + "name": "santiagocuevas2003", "count": 2, "languages": 1 }, { "order": 558, - "name": "lorenamesa", + "name": "lmedina96", "count": 2, "languages": 1 }, { "order": 559, - "name": "raulallue", + "name": "lorenamesa", "count": 2, "languages": 1 }, { "order": 560, - "name": "luciarf", + "name": "raulallue", "count": 2, "languages": 1 }, { "order": 561, - "name": "aserranot", + "name": "luciarf", "count": 2, "languages": 1 }, { "order": 562, - "name": "devcherry1", + "name": "aserranot", "count": 2, "languages": 1 }, { "order": 563, - "name": "yowcloud", + "name": "devcherry1", "count": 2, "languages": 1 }, { "order": 564, - "name": "fefestuve", + "name": "yowcloud", "count": 2, "languages": 1 }, { "order": 565, - "name": "fsfigueroa77", + "name": "fefestuve", "count": 2, "languages": 1 }, { "order": 566, - "name": "nahuelborromeo", + "name": "fsfigueroa77", "count": 2, "languages": 1 }, { "order": 567, - "name": "peibolstrike", + "name": "nahuelborromeo", "count": 2, "languages": 1 }, { "order": 568, - "name": "dararod", + "name": "peibolstrike", "count": 2, "languages": 1 }, { "order": 569, - "name": "navarroemiliano", + "name": "dararod", "count": 2, "languages": 1 }, { "order": 570, - "name": "waldid32", + "name": "navarroemiliano", "count": 2, "languages": 1 }, { "order": 571, - "name": "reanthonyh", + "name": "waldid32", "count": 2, "languages": 1 }, { "order": 572, - "name": "roilhi", + "name": "mikelroset", "count": 2, "languages": 1 }, { "order": 573, - "name": "cristiansystem", + "name": "reanthonyh", "count": 2, "languages": 1 }, { "order": 574, - "name": "evelynnobile", + "name": "roilhi", "count": 2, "languages": 1 }, { "order": 575, - "name": "nicolastapiasanz", + "name": "cristiansystem", "count": 2, "languages": 1 }, { "order": 576, - "name": "gomezcamilo9701", + "name": "evelynnobile", "count": 2, "languages": 1 }, { "order": 577, - "name": "vicgallego", + "name": "nicolastapiasanz", "count": 2, "languages": 1 }, { "order": 578, - "name": "freddyasierraj", + "name": "gomezcamilo9701", "count": 2, "languages": 1 }, { "order": 579, - "name": "luis-vb", + "name": "vicgallego", "count": 2, "languages": 1 }, { "order": 580, - "name": "vikkanh", + "name": "freddyasierraj", "count": 2, "languages": 1 }, { "order": 581, - "name": "juaruibr", + "name": "luis-vb", "count": 2, "languages": 1 }, { "order": 582, - "name": "crisdev3", + "name": "vikkanh", "count": 2, "languages": 1 }, { "order": 583, - "name": "frealexandro", + "name": "juaruibr", "count": 2, "languages": 1 }, { "order": 584, - "name": "gamitocu", + "name": "crisdev3", "count": 2, "languages": 1 }, { "order": 585, - "name": "saracorraless", + "name": "frealexandro", "count": 2, "languages": 1 }, { "order": 586, - "name": "cesarocbu", + "name": "gamitocu", "count": 2, "languages": 1 }, { "order": 587, - "name": "jeisonredondo", + "name": "saracorraless", "count": 2, "languages": 1 }, { "order": 588, - "name": "alanox1", + "name": "cesarocbu", "count": 2, "languages": 1 }, { "order": 589, - "name": "christianumb", + "name": "jeisonredondo", "count": 2, "languages": 1 }, { "order": 590, - "name": "jhonf1992", + "name": "alanox1", "count": 2, "languages": 1 }, { "order": 591, - "name": "k4rv3r", + "name": "christianumb", "count": 2, "languages": 1 }, { "order": 592, - "name": "rikar2o", + "name": "jhonf1992", "count": 2, "languages": 1 }, { "order": 593, - "name": "rolo27s", + "name": "k4rv3r", "count": 2, "languages": 1 }, { "order": 594, - "name": "franciscocuminilondero", + "name": "rikar2o", "count": 2, "languages": 1 }, { "order": 595, - "name": "wesborland-github", + "name": "rolo27s", "count": 2, "languages": 1 }, { "order": 596, - "name": "doblea74", + "name": "franciscocuminilondero", "count": 2, "languages": 1 }, { "order": 597, - "name": "matiasfarfan89", + "name": "wesborland-github", "count": 2, "languages": 1 }, { "order": 598, - "name": "nxl22", + "name": "doblea74", "count": 2, "languages": 1 }, { "order": 599, - "name": "valeriatorrealba", + "name": "matiasfarfan89", "count": 2, "languages": 1 }, { "order": 600, - "name": "farthaz", + "name": "nxl22", "count": 2, "languages": 1 }, { "order": 601, - "name": "aleoe01", + "name": "valeriatorrealba", "count": 2, "languages": 1 }, { "order": 602, - "name": "jaimemunozdev", + "name": "farthaz", "count": 2, "languages": 1 }, { "order": 603, - "name": "miguelrejon96", + "name": "aleoe01", "count": 2, "languages": 1 }, { "order": 604, - "name": "jorge186414", + "name": "jaimemunozdev", "count": 2, "languages": 1 }, { "order": 605, - "name": "andnikdev", + "name": "miguelrejon96", "count": 2, "languages": 1 }, { "order": 606, - "name": "soldochris", + "name": "jorge186414", "count": 2, "languages": 1 }, { "order": 607, - "name": "leonardo291024", + "name": "andnikdev", "count": 2, "languages": 1 }, { "order": 608, - "name": "mickel-arroz", + "name": "soldochris", "count": 2, "languages": 1 }, { "order": 609, - "name": "gianbordon", + "name": "leonardo291024", "count": 2, "languages": 1 }, { "order": 610, - "name": "cpcarlosprieto", + "name": "mickel-arroz", "count": 2, "languages": 1 }, { "order": 611, - "name": "juangomezn", + "name": "gianbordon", "count": 2, "languages": 1 }, { "order": 612, - "name": "angelvelasco1", + "name": "cpcarlosprieto", "count": 2, "languages": 1 }, { "order": 613, - "name": "ssanjua", + "name": "juangomezn", "count": 2, "languages": 1 }, { "order": 614, - "name": "murquisdev", + "name": "angelvelasco1", "count": 2, "languages": 1 }, { "order": 615, - "name": "davhage", + "name": "ssanjua", "count": 2, "languages": 1 }, { "order": 616, - "name": "erikayeah", + "name": "murquisdev", "count": 2, "languages": 1 }, { "order": 617, - "name": "misterdan100", + "name": "joapalobael", "count": 2, "languages": 1 }, { "order": 618, - "name": "memogv", + "name": "davhage", "count": 2, "languages": 1 }, { "order": 619, - "name": "glaboryp", + "name": "erikayeah", "count": 2, "languages": 1 }, { "order": 620, - "name": "ovjohn", + "name": "misterdan100", "count": 2, "languages": 1 }, { "order": 621, - "name": "haryblanco20", + "name": "memogv", "count": 2, "languages": 1 }, { "order": 622, - "name": "christianhernandezb", + "name": "glaboryp", "count": 2, "languages": 1 }, { "order": 623, - "name": "akzorla", + "name": "ovjohn", "count": 2, "languages": 1 }, { "order": 624, - "name": "0pio", + "name": "haryblanco20", "count": 2, "languages": 1 }, { "order": 625, - "name": "whiterunjarl", + "name": "christianhernandezb", "count": 2, "languages": 1 }, { "order": 626, - "name": "porto1090", + "name": "akzorla", "count": 2, "languages": 1 }, { "order": 627, - "name": "johannhsdev", + "name": "0pio", "count": 2, "languages": 1 }, { "order": 628, - "name": "jago86", + "name": "whiterunjarl", "count": 2, "languages": 1 }, { "order": 629, - "name": "diegokarabin", + "name": "porto1090", "count": 2, "languages": 1 }, { "order": 630, - "name": "gugliio", + "name": "johannhsdev", "count": 2, "languages": 1 }, { "order": 631, - "name": "kcx46", + "name": "jago86", "count": 2, "languages": 1 }, { "order": 632, - "name": "nachodev7", + "name": "diegokarabin", "count": 2, "languages": 1 }, { "order": 633, - "name": "fernandoatello", + "name": "gugliio", "count": 2, "languages": 1 }, { "order": 634, - "name": "pablosalme", + "name": "kcx46", "count": 2, "languages": 1 }, { "order": 635, - "name": "jsacristanbeltri", + "name": "nachodev7", "count": 2, "languages": 1 }, { "order": 636, - "name": "baauus", + "name": "fernandoatello", "count": 2, "languages": 1 }, { "order": 637, - "name": "s384", + "name": "pablosalme", "count": 2, "languages": 1 }, { "order": 638, - "name": "javitron100", + "name": "jsacristanbeltri", "count": 2, "languages": 1 }, { "order": 639, - "name": "lauradiazm29", + "name": "baauus", "count": 2, "languages": 1 }, { "order": 640, - "name": "pakomor", + "name": "dkp-dev", "count": 2, "languages": 1 }, { "order": 641, - "name": "adogdev", + "name": "s384", "count": 2, "languages": 1 }, { "order": 642, - "name": "eriickm", + "name": "javitron100", "count": 2, "languages": 1 }, { "order": 643, - "name": "christiancoc", + "name": "lauradiazm29", "count": 2, "languages": 1 }, { "order": 644, - "name": "josegago27", + "name": "pakomor", "count": 2, "languages": 1 }, { "order": 645, - "name": "rojasricoo", + "name": "adogdev", "count": 2, "languages": 1 }, { "order": 646, - "name": "inf015", + "name": "eriickm", "count": 2, "languages": 1 }, { "order": 647, - "name": "csaraugusto2", + "name": "christiancoc", "count": 2, "languages": 1 }, { "order": 648, - "name": "zalazarmartin", + "name": "jheisonquiroga", "count": 2, "languages": 1 }, { "order": 649, - "name": "ziellucio01", + "name": "josegago27", "count": 2, "languages": 1 }, { "order": 650, - "name": "dota43ver", + "name": "rojasricoo", "count": 2, "languages": 1 }, { "order": 651, - "name": "fjsubero", + "name": "inf015", "count": 2, "languages": 1 }, { "order": 652, - "name": "julind0", + "name": "csaraugusto2", "count": 2, "languages": 1 }, { "order": 653, - "name": "jmontoyac", + "name": "zalazarmartin", "count": 2, "languages": 1 }, { "order": 654, - "name": "dariangl", + "name": "ziellucio01", "count": 2, "languages": 1 }, { "order": 655, - "name": "soydaviddev", + "name": "dota43ver", "count": 2, "languages": 1 }, { "order": 656, - "name": "sofia-d-p", + "name": "fjsubero", "count": 2, "languages": 1 }, { "order": 657, - "name": "e-techgod", + "name": "julind0", "count": 2, "languages": 1 }, { "order": 658, - "name": "aboredllama", + "name": "jmontoyac", "count": 2, "languages": 1 }, { "order": 659, - "name": "nevaito", + "name": "dariangl", "count": 2, "languages": 1 }, { "order": 660, - "name": "josue-py", + "name": "soydaviddev", "count": 2, "languages": 1 }, { "order": 661, - "name": "nach012", + "name": "sofia-d-p", "count": 2, "languages": 1 }, { "order": 662, - "name": "dans182", + "name": "e-techgod", "count": 2, "languages": 1 }, { "order": 663, - "name": "freyfonseca", + "name": "aboredllama", "count": 2, "languages": 1 }, { "order": 664, - "name": "aegpgrafologo", + "name": "nevaito", "count": 2, "languages": 1 }, { "order": 665, - "name": "alejandrovelasquezr", + "name": "josue-py", "count": 2, "languages": 1 }, { "order": 666, - "name": "fabianpa505", + "name": "nach012", "count": 2, "languages": 1 }, { "order": 667, - "name": "carlosmarte23", + "name": "dans182", "count": 2, "languages": 1 }, { "order": 668, - "name": "anblackter", + "name": "freyfonseca", "count": 2, "languages": 1 }, { "order": 669, - "name": "steven9708m", + "name": "aegpgrafologo", "count": 2, "languages": 1 }, { "order": 670, - "name": "tic4", + "name": "alejandrovelasquezr", "count": 2, "languages": 1 }, { "order": 671, - "name": "josephfaster", + "name": "fabianpa505", "count": 2, "languages": 1 }, { "order": 672, - "name": "gregfc95", + "name": "carlosmarte23", "count": 2, "languages": 1 }, { "order": 673, - "name": "victore16", + "name": "anblackter", "count": 2, "languages": 1 }, { "order": 674, - "name": "dokeys28", + "name": "steven9708m", "count": 2, "languages": 1 }, { "order": 675, - "name": "noaregui", + "name": "tic4", "count": 2, "languages": 1 }, { "order": 676, - "name": "alejandro-mantilla", + "name": "josephfaster", "count": 2, "languages": 1 }, { "order": 677, - "name": "gmigues", + "name": "gregfc95", "count": 2, "languages": 1 }, { "order": 678, - "name": "juanseevn", + "name": "victore16", "count": 2, "languages": 1 }, { "order": 679, - "name": "vesubius", + "name": "dokeys28", "count": 2, "languages": 1 }, { "order": 680, - "name": "zeti1231", + "name": "noaregui", "count": 2, "languages": 1 }, { "order": 681, - "name": "cipollalucas", + "name": "alejandro-mantilla", "count": 2, "languages": 1 }, { "order": 682, - "name": "miguelberrio0810", + "name": "gmigues", "count": 2, "languages": 1 }, { "order": 683, - "name": "santiagodc8", + "name": "juanseevn", "count": 2, "languages": 1 }, { "order": 684, - "name": "pedrojog", + "name": "vesubius", "count": 2, "languages": 1 }, { "order": 685, - "name": "culebropalido", + "name": "zeti1231", "count": 2, "languages": 1 }, { "order": 686, - "name": "marioyellowy", + "name": "cipollalucas", "count": 2, "languages": 1 }, { "order": 687, - "name": "jcknot", + "name": "miguelberrio0810", "count": 2, "languages": 1 }, { "order": 688, - "name": "peeanoot", + "name": "santiagodc8", "count": 2, "languages": 1 }, { "order": 689, - "name": "coronelsam", + "name": "pedrojog", "count": 2, "languages": 1 }, { "order": 690, - "name": "arhl2023", + "name": "culebropalido", "count": 2, "languages": 1 }, { "order": 691, - "name": "isidrojng", + "name": "marioyellowy", "count": 2, "languages": 1 }, { "order": 692, - "name": "anaroncero", + "name": "jcknot", "count": 2, "languages": 1 }, { "order": 693, - "name": "hersac", + "name": "peeanoot", "count": 2, "languages": 1 }, { "order": 694, - "name": "vecinacoo", + "name": "coronelsam", "count": 2, "languages": 1 }, { "order": 695, - "name": "juanmjimenezs", + "name": "arhl2023", "count": 2, "languages": 1 }, { "order": 696, - "name": "armentaangel", + "name": "isidrojng", "count": 2, "languages": 1 }, { "order": 697, - "name": "lordzzz777", + "name": "anaroncero", "count": 2, "languages": 1 }, { "order": 698, - "name": "sdm29gh", + "name": "hersac", "count": 2, "languages": 1 }, { "order": 699, - "name": "zonnen69", + "name": "bereverte", "count": 2, "languages": 1 }, { "order": 700, - "name": "jmichael39", + "name": "vecinacoo", "count": 2, "languages": 1 }, { "order": 701, + "name": "juanmjimenezs", + "count": 2, + "languages": 1 + }, + { + "order": 702, + "name": "armentaangel", + "count": 2, + "languages": 1 + }, + { + "order": 703, + "name": "lordzzz777", + "count": 2, + "languages": 1 + }, + { + "order": 704, + "name": "sdm29gh", + "count": 2, + "languages": 1 + }, + { + "order": 705, + "name": "zonnen69", + "count": 2, + "languages": 1 + }, + { + "order": 706, + "name": "jmichael39", + "count": 2, + "languages": 1 + }, + { + "order": 707, "name": "torvicv", "count": 1, "languages": 1 }, { - "order": 702, + "order": 708, "name": "dgquintero", "count": 1, "languages": 1 }, { - "order": 703, + "order": 709, "name": "c-blskv", "count": 1, "languages": 1 }, { - "order": 704, + "order": 710, "name": "emaerniquez", "count": 1, "languages": 1 }, { - "order": 705, + "order": 711, "name": "carolhs92", "count": 1, "languages": 1 }, { - "order": 706, + "order": 712, "name": "pwrxman", "count": 1, "languages": 1 }, { - "order": 707, + "order": 713, "name": "leonardo-henao", "count": 1, "languages": 1 }, { - "order": 708, + "order": 714, "name": "juancamilofvx", "count": 1, "languages": 1 }, { - "order": 709, + "order": 715, "name": "vikernes27666", "count": 1, "languages": 1 }, { - "order": 710, + "order": 716, "name": "cub-tor", "count": 1, "languages": 1 }, { - "order": 711, + "order": 717, "name": "nightmare79", "count": 1, "languages": 1 }, { - "order": 712, + "order": 718, "name": "carlosmperezm", "count": 1, "languages": 1 }, { - "order": 713, + "order": 719, "name": "gonzalinuz18", "count": 1, "languages": 1 }, { - "order": 714, + "order": 720, "name": "qwik-zghieb", "count": 1, "languages": 1 }, { - "order": 715, + "order": 721, "name": "miquelrr", "count": 1, "languages": 1 }, { - "order": 716, + "order": 722, "name": "miguel2rar", "count": 1, "languages": 1 }, { - "order": 717, + "order": 723, "name": "eamartin", "count": 1, "languages": 1 }, { - "order": 718, + "order": 724, "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { - "order": 719, + "order": 725, "name": "agustinfccll", "count": 1, "languages": 1 }, { - "order": 720, + "order": 726, "name": "anitandil", "count": 1, "languages": 1 }, { - "order": 721, + "order": 727, "name": "evilpodato04", "count": 1, "languages": 1 }, { - "order": 722, + "order": 728, "name": "francomyburg", "count": 1, "languages": 1 }, { - "order": 723, + "order": 729, "name": "neicervb", "count": 1, "languages": 1 }, { - "order": 724, + "order": 730, "name": "josephinoo", "count": 1, "languages": 1 }, { - "order": 725, + "order": 731, "name": "arathhh8", "count": 1, "languages": 1 }, { - "order": 726, + "order": 732, "name": "paluzz", "count": 1, "languages": 1 }, { - "order": 727, + "order": 733, "name": "theposi", "count": 1, "languages": 1 }, { - "order": 728, + "order": 734, "name": "vinyoles", "count": 1, "languages": 1 }, { - "order": 729, + "order": 735, "name": "omarroman29", "count": 1, "languages": 1 }, { - "order": 730, + "order": 736, "name": "1cel4nc3", "count": 1, "languages": 1 }, { - "order": 731, + "order": 737, "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { - "order": 732, + "order": 738, "name": "corvo-99", "count": 1, "languages": 1 }, { - "order": 733, + "order": 739, "name": "danielcastillo1112", "count": 1, "languages": 1 }, { - "order": 734, + "order": 740, "name": "malkarmah", "count": 1, "languages": 1 }, { - "order": 735, + "order": 741, "name": "devm0nk3y", "count": 1, "languages": 1 }, { - "order": 736, + "order": 742, "name": "sirvega83", "count": 1, "languages": 1 }, { - "order": 737, + "order": 743, "name": "franpua", "count": 1, "languages": 1 }, { - "order": 738, + "order": 744, "name": "van-02", "count": 1, "languages": 1 }, { - "order": 739, + "order": 745, "name": "x3mboy", "count": 1, "languages": 1 }, { - "order": 740, + "order": 746, "name": "mickysoft", "count": 1, "languages": 1 }, { - "order": 741, + "order": 747, "name": "deimoshall", "count": 1, "languages": 1 }, { - "order": 742, + "order": 748, "name": "palons29", "count": 1, "languages": 1 }, { - "order": 743, + "order": 749, "name": "serg032", "count": 1, "languages": 1 }, { - "order": 744, + "order": 750, "name": "seigigim", "count": 1, "languages": 1 }, { - "order": 745, + "order": 751, "name": "cibacoa", "count": 1, "languages": 1 }, { - "order": 746, + "order": 752, "name": "axelwestman", "count": 1, "languages": 1 }, { - "order": 747, + "order": 753, "name": "javodevon", "count": 1, "languages": 1 }, { - "order": 748, + "order": 754, "name": "mauricioyair", "count": 1, "languages": 1 }, { - "order": 749, + "order": 755, "name": "manuhssj", "count": 1, "languages": 1 }, { - "order": 750, + "order": 756, "name": "coletonosh", "count": 1, "languages": 1 }, { - "order": 751, + "order": 757, "name": "manugonzalito", "count": 1, "languages": 1 }, { - "order": 752, + "order": 758, "name": "gizelads", "count": 1, "languages": 1 }, { - "order": 753, + "order": 759, "name": "lucc4sz", "count": 1, "languages": 1 }, { - "order": 754, + "order": 760, "name": "feliaguirre7", "count": 1, "languages": 1 }, { - "order": 755, + "order": 761, "name": "rulo77", "count": 1, "languages": 1 }, { - "order": 756, - "name": "mikelroset", - "count": 1, - "languages": 1 - }, - { - "order": 757, + "order": 762, "name": "is2095", "count": 1, "languages": 1 }, { - "order": 758, + "order": 763, "name": "jancalos", "count": 1, "languages": 1 }, { - "order": 759, + "order": 764, "name": "marcosapodaca", "count": 1, "languages": 1 }, { - "order": 760, + "order": 765, "name": "angelcruzg23", "count": 1, "languages": 1 }, { - "order": 761, + "order": 766, "name": "ca2puntosv", "count": 1, "languages": 1 }, { - "order": 762, + "order": 767, "name": "armm77", "count": 1, "languages": 1 }, { - "order": 763, + "order": 768, "name": "afacorroloscos", "count": 1, "languages": 1 }, { - "order": 764, + "order": 769, "name": "rocadev2714", "count": 1, "languages": 1 }, { - "order": 765, + "order": 770, "name": "chrisfelixgil", "count": 1, "languages": 1 }, { - "order": 766, + "order": 771, "name": "sandrarg85", "count": 1, "languages": 1 }, { - "order": 767, + "order": 772, + "name": "protpus98", + "count": 1, + "languages": 1 + }, + { + "order": 773, "name": "rootqui", "count": 1, "languages": 1 }, { - "order": 768, + "order": 774, "name": "ishimaku", "count": 1, "languages": 1 }, { - "order": 769, + "order": 775, "name": "pkmaventura", "count": 1, "languages": 1 }, { - "order": 770, + "order": 776, "name": "miguelgargallo", "count": 1, "languages": 1 }, { - "order": 771, + "order": 777, "name": "astriebeck", "count": 1, "languages": 1 }, { - "order": 772, + "order": 778, "name": "lobogeekmx", "count": 1, "languages": 1 }, { - "order": 773, + "order": 779, "name": "marvinagui", "count": 1, "languages": 1 }, { - "order": 774, + "order": 780, "name": "marqitos", "count": 1, "languages": 1 }, { - "order": 775, + "order": 781, "name": "nunezlagos", "count": 1, "languages": 1 }, { - "order": 776, + "order": 782, "name": "jcrobles99", "count": 1, "languages": 1 }, { - "order": 777, + "order": 783, "name": "ledyam", "count": 1, "languages": 1 }, { - "order": 778, + "order": 784, "name": "jatomas", "count": 1, "languages": 1 }, { - "order": 779, + "order": 785, "name": "jaennova", "count": 1, "languages": 1 }, { - "order": 780, + "order": 786, "name": "luisalberto22", "count": 1, "languages": 1 }, { - "order": 781, + "order": 787, "name": "francisleble", "count": 1, "languages": 1 }, { - "order": 782, + "order": 788, "name": "deiiviitdev", "count": 1, "languages": 1 }, { - "order": 783, + "order": 789, "name": "braiso-22", "count": 1, "languages": 1 }, { - "order": 784, + "order": 790, "name": "daniel-cas", "count": 1, "languages": 1 }, { - "order": 785, + "order": 791, "name": "acirdevelper", "count": 1, "languages": 1 }, { - "order": 786, + "order": 792, "name": "borjadelgadodev", "count": 1, "languages": 1 }, { - "order": 787, + "order": 793, "name": "elpeque29", "count": 1, "languages": 1 }, { - "order": 788, + "order": 794, "name": "jhordanluyo", "count": 1, "languages": 1 }, { - "order": 789, + "order": 795, "name": "davidcv-dev", "count": 1, "languages": 1 }, { - "order": 790, + "order": 796, "name": "mbmaeso", "count": 1, "languages": 1 }, { - "order": 791, + "order": 797, "name": "alvarominarro", "count": 1, "languages": 1 }, { - "order": 792, + "order": 798, "name": "bjchavez", "count": 1, "languages": 1 }, { - "order": 793, + "order": 799, "name": "madelefonb", "count": 1, "languages": 1 }, { - "order": 794, + "order": 800, "name": "lfwzk", "count": 1, "languages": 1 }, { - "order": 795, + "order": 801, "name": "ercky1980", "count": 1, "languages": 1 }, { - "order": 796, + "order": 802, "name": "jsruedatorres", "count": 1, "languages": 1 }, { - "order": 797, + "order": 803, "name": "jacobrwx", "count": 1, "languages": 1 }, { - "order": 798, + "order": 804, "name": "abengl", "count": 1, "languages": 1 }, { - "order": 799, + "order": 805, "name": "jd-gm", "count": 1, "languages": 1 }, { - "order": 800, + "order": 806, "name": "lucianogriffa", "count": 1, "languages": 1 }, { - "order": 801, + "order": 807, "name": "quirogapau", "count": 1, "languages": 1 }, { - "order": 802, + "order": 808, "name": "joseperesini", "count": 1, "languages": 1 }, { - "order": 803, + "order": 809, "name": "mhrosariom", "count": 1, "languages": 1 }, { - "order": 804, + "order": 810, "name": "sergioab7", "count": 1, "languages": 1 }, { - "order": 805, + "order": 811, "name": "santaravena", "count": 1, "languages": 1 }, { - "order": 806, + "order": 812, "name": "datrujillog", "count": 1, "languages": 1 }, { - "order": 807, + "order": 813, "name": "johnniew81", "count": 1, "languages": 1 }, { - "order": 808, + "order": 814, "name": "chriszaldana", "count": 1, "languages": 1 }, { - "order": 809, + "order": 815, "name": "antonioverdugo", "count": 1, "languages": 1 }, { - "order": 810, + "order": 816, "name": "kronomio", "count": 1, "languages": 1 }, { - "order": 811, + "order": 817, "name": "kevinramirez28", "count": 1, "languages": 1 }, { - "order": 812, + "order": 818, "name": "juanpablo-a", "count": 1, "languages": 1 }, { - "order": 813, + "order": 819, "name": "gerespinosa", "count": 1, "languages": 1 }, { - "order": 814, + "order": 820, "name": "1978acb", "count": 1, "languages": 1 }, { - "order": 815, + "order": 821, "name": "alexxawada", "count": 1, "languages": 1 }, { - "order": 816, + "order": 822, "name": "ricarsur", "count": 1, "languages": 1 }, { - "order": 817, + "order": 823, "name": "alemar16", "count": 1, "languages": 1 }, { - "order": 818, + "order": 824, "name": "pointfs", "count": 1, "languages": 1 }, { - "order": 819, + "order": 825, "name": "edperez07", "count": 1, "languages": 1 }, { - "order": 820, + "order": 826, "name": "dacronik", "count": 1, "languages": 1 }, { - "order": 821, + "order": 827, "name": "abraham9804", "count": 1, "languages": 1 }, { - "order": 822, + "order": 828, "name": "afl0r3s", "count": 1, "languages": 1 }, { - "order": 823, + "order": 829, "name": "dianelis1", "count": 1, "languages": 1 }, { - "order": 824, + "order": 830, "name": "fernandofl", "count": 1, "languages": 1 }, { - "order": 825, + "order": 831, "name": "conrado85", "count": 1, "languages": 1 }, { - "order": 826, + "order": 832, "name": "agus-ig", "count": 1, "languages": 1 }, { - "order": 827, + "order": 833, "name": "alvarommedia", "count": 1, "languages": 1 }, { - "order": 828, + "order": 834, "name": "maximotoro", "count": 1, "languages": 1 }, { - "order": 829, + "order": 835, "name": "m4xisil", "count": 1, "languages": 1 }, { - "order": 830, + "order": 836, "name": "francomoreira", "count": 1, "languages": 1 }, { - "order": 831, + "order": 837, "name": "aleclto7", "count": 1, "languages": 1 }, { - "order": 832, + "order": 838, "name": "nnunezmedina", "count": 1, "languages": 1 }, { - "order": 833, + "order": 839, "name": "codejoss", "count": 1, "languages": 1 }, { - "order": 834, + "order": 840, "name": "yaojema", "count": 1, "languages": 1 }, { - "order": 835, + "order": 841, "name": "romanocoder", "count": 1, "languages": 1 }, { - "order": 836, + "order": 842, "name": "sixtodev", "count": 1, "languages": 1 }, { - "order": 837, + "order": 843, "name": "cgomezadolfo", "count": 1, "languages": 1 }, { - "order": 838, + "order": 844, "name": "rojasvargas", "count": 1, "languages": 1 }, { - "order": 839, + "order": 845, "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { - "order": 840, + "order": 846, "name": "l3v1xx", "count": 1, "languages": 1 }, { - "order": 841, + "order": 847, "name": "patricioguerra30", "count": 1, "languages": 1 }, { - "order": 842, + "order": 848, "name": "lytsar", "count": 1, "languages": 1 }, { - "order": 843, + "order": 849, "name": "siuldev", "count": 1, "languages": 1 }, { - "order": 844, + "order": 850, "name": "brayancordova1", "count": 1, "languages": 1 }, { - "order": 845, + "order": 851, "name": "ronnieruuz", "count": 1, "languages": 1 }, { - "order": 846, + "order": 852, "name": "yessikamichelle", "count": 1, "languages": 1 }, { - "order": 847, + "order": 853, "name": "vainsito1", "count": 1, "languages": 1 }, { - "order": 848, + "order": 854, "name": "oscarletelier", "count": 1, "languages": 1 }, { - "order": 849, + "order": 855, "name": "kocho03", "count": 1, "languages": 1 }, { - "order": 850, + "order": 856, "name": "aidicoop", "count": 1, "languages": 1 }, { - "order": 851, + "order": 857, "name": "albabp", "count": 1, "languages": 1 }, { - "order": 852, + "order": 858, "name": "nozodev", "count": 1, "languages": 1 }, { - "order": 853, + "order": 859, "name": "mvillegas18", "count": 1, "languages": 1 }, { - "order": 854, + "order": 860, "name": "augustbs", "count": 1, "languages": 1 }, { - "order": 855, + "order": 861, "name": "mekanicas", "count": 1, "languages": 1 }, { - "order": 856, + "order": 862, "name": "luchof5", "count": 1, "languages": 1 }, { - "order": 857, + "order": 863, "name": "fullstackarlo", "count": 1, "languages": 1 }, { - "order": 858, + "order": 864, "name": "mdemena", "count": 1, "languages": 1 }, { - "order": 859, + "order": 865, "name": "cliverjimny123", "count": 1, "languages": 1 }, { - "order": 860, + "order": 866, "name": "rodmiggithub", "count": 1, "languages": 1 }, { - "order": 861, + "order": 867, "name": "s9code", "count": 1, "languages": 1 }, { - "order": 862, + "order": 868, "name": "javieradev", "count": 1, "languages": 1 }, { - "order": 863, + "order": 869, "name": "xnomada", "count": 1, "languages": 1 }, { - "order": 864, + "order": 870, "name": "miguelsarm", "count": 1, "languages": 1 }, { - "order": 865, + "order": 871, "name": "royhuamanavila", "count": 1, "languages": 1 }, { - "order": 866, + "order": 872, "name": "imista", "count": 1, "languages": 1 }, { - "order": 867, + "order": 873, "name": "denisortega", "count": 1, "languages": 1 }, { - "order": 868, + "order": 874, "name": "kouski", "count": 1, "languages": 1 }, { - "order": 869, + "order": 875, "name": "leydimadrid", "count": 1, "languages": 1 }, { - "order": 870, + "order": 876, "name": "frannm29", "count": 1, "languages": 1 }, { - "order": 871, + "order": 877, "name": "saintsluis", "count": 1, "languages": 1 }, { - "order": 872, + "order": 878, "name": "gc796", "count": 1, "languages": 1 }, { - "order": 873, + "order": 879, "name": "pierre-ol", "count": 1, "languages": 1 }, { - "order": 874, + "order": 880, "name": "francescoalterio", "count": 1, "languages": 1 }, { - "order": 875, + "order": 881, "name": "gustavoguerrero", "count": 1, "languages": 1 }, { - "order": 876, + "order": 882, "name": "diegoxxd", "count": 1, "languages": 1 }, { - "order": 877, + "order": 883, "name": "fzcarlitos", "count": 1, "languages": 1 }, { - "order": 878, + "order": 884, "name": "walkerlyna", "count": 1, "languages": 1 }, { - "order": 879, + "order": 885, "name": "sejotaz", "count": 1, "languages": 1 }, { - "order": 880, + "order": 886, "name": "frcan89", "count": 1, "languages": 1 }, { - "order": 881, + "order": 887, "name": "nicorey89", "count": 1, "languages": 1 }, { - "order": 882, + "order": 888, "name": "alexis0717", "count": 1, "languages": 1 }, { - "order": 883, + "order": 889, "name": "edgonzz", "count": 1, "languages": 1 }, { - "order": 884, + "order": 890, "name": "vmga09", "count": 1, "languages": 1 }, { - "order": 885, + "order": 891, "name": "lfam200", "count": 1, "languages": 1 }, { - "order": 886, + "order": 892, "name": "kenzambrano", "count": 1, "languages": 1 }, { - "order": 887, + "order": 893, "name": "dmhenaopa", "count": 1, "languages": 1 }, { - "order": 888, + "order": 894, "name": "jpiacaruso", "count": 1, "languages": 1 }, { - "order": 889, + "order": 895, "name": "isnatthy", "count": 1, "languages": 1 }, { - "order": 890, + "order": 896, "name": "diego-santana23", "count": 1, "languages": 1 }, { - "order": 891, + "order": 897, "name": "peticas", "count": 1, "languages": 1 }, { - "order": 892, + "order": 898, "name": "flarien", "count": 1, "languages": 1 }, { - "order": 893, + "order": 899, "name": "franciscokarriere", "count": 1, "languages": 1 }, { - "order": 894, + "order": 900, "name": "pipeyz21", "count": 1, "languages": 1 }, { - "order": 895, + "order": 901, "name": "luisgarm", "count": 1, "languages": 1 }, { - "order": 896, + "order": 902, "name": "tetotille", "count": 1, "languages": 1 }, { - "order": 897, + "order": 903, "name": "vorosdev", "count": 1, "languages": 1 }, { - "order": 898, + "order": 904, "name": "santiagomac", "count": 1, "languages": 1 }, { - "order": 899, + "order": 905, "name": "implevacui", "count": 1, "languages": 1 }, { - "order": 900, + "order": 906, "name": "fede6299", "count": 1, "languages": 1 }, { - "order": 901, + "order": 907, "name": "kevin05m", "count": 1, "languages": 1 }, { - "order": 902, + "order": 908, "name": "diegomm27", "count": 1, "languages": 1 }, { - "order": 903, + "order": 909, "name": "pablo-lnx", "count": 1, "languages": 1 }, { - "order": 904, + "order": 910, "name": "darkohokage", "count": 1, "languages": 1 }, { - "order": 905, + "order": 911, "name": "jhonnfl", "count": 1, "languages": 1 }, { - "order": 906, + "order": 912, "name": "jarzatedev", "count": 1, "languages": 1 }, { - "order": 907, + "order": 913, "name": "brunom-93", "count": 1, "languages": 1 }, { - "order": 908, + "order": 914, "name": "alejandroruiz23", "count": 1, "languages": 1 }, { - "order": 909, + "order": 915, "name": "trollface77", "count": 1, "languages": 1 }, { - "order": 910, + "order": 916, "name": "jaimesoftdev", "count": 1, "languages": 1 }, { - "order": 911, + "order": 917, "name": "edm1ya", "count": 1, "languages": 1 }, { - "order": 912, + "order": 918, "name": "tartabullroberto", "count": 1, "languages": 1 }, { - "order": 913, + "order": 919, "name": "serg-pq", "count": 1, "languages": 1 }, { - "order": 914, + "order": 920, "name": "lara-vel-dev", "count": 1, "languages": 1 }, { - "order": 915, + "order": 921, "name": "alexisbarradev", "count": 1, "languages": 1 }, { - "order": 916, + "order": 922, "name": "kelvincb", "count": 1, "languages": 1 }, { - "order": 917, + "order": 923, "name": "carlostoledoe", "count": 1, "languages": 1 }, { - "order": 918, + "order": 924, "name": "gilbertho502", "count": 1, "languages": 1 }, { - "order": 919, + "order": 925, "name": "v0l0v", "count": 1, "languages": 1 }, { - "order": 920, + "order": 926, "name": "johao23", "count": 1, "languages": 1 }, { - "order": 921, + "order": 927, "name": "geridage", "count": 1, "languages": 1 }, { - "order": 922, + "order": 928, "name": "vmarialuzm", "count": 1, "languages": 1 }, { - "order": 923, + "order": 929, "name": "snowcardenas", "count": 1, "languages": 1 }, { - "order": 924, + "order": 930, "name": "and-y21", "count": 1, "languages": 1 }, { - "order": 925, + "order": 931, "name": "arturodlapaz17", "count": 1, "languages": 1 }, { - "order": 926, - "name": "manuu42", + "order": 932, + "name": "josem17-cyber", "count": 1, "languages": 1 }, { - "order": 927, - "name": "howlett9999", + "order": 933, + "name": "manuu42", "count": 1, "languages": 1 }, { - "order": 928, - "name": "dkp-dev", + "order": 934, + "name": "howlett9999", "count": 1, "languages": 1 }, { - "order": 929, + "order": 935, "name": "hnaranjog", "count": 1, "languages": 1 }, { - "order": 930, + "order": 936, "name": "wallsified", "count": 1, "languages": 1 }, { - "order": 931, + "order": 937, "name": "lluistech", "count": 1, "languages": 1 }, { - "order": 932, + "order": 938, "name": "mamartinez14", "count": 1, "languages": 1 }, { - "order": 933, + "order": 939, "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { - "order": 934, + "order": 940, "name": "bassalex27", "count": 1, "languages": 1 }, { - "order": 935, + "order": 941, "name": "yetlanezils", "count": 1, "languages": 1 }, { - "order": 936, + "order": 942, "name": "ndepaul82", "count": 1, "languages": 1 }, { - "order": 937, + "order": 943, "name": "amitchellg", "count": 1, "languages": 1 }, { - "order": 938, + "order": 944, "name": "turudev1979", "count": 1, "languages": 1 }, { - "order": 939, + "order": 945, "name": "deivimiller", "count": 1, "languages": 1 }, { - "order": 940, + "order": 946, "name": "haroldalb", "count": 1, "languages": 1 }, { - "order": 941, + "order": 947, "name": "dakkaj", "count": 1, "languages": 1 }, { - "order": 942, - "name": "jheisonquiroga", - "count": 1, - "languages": 1 - }, - { - "order": 943, + "order": 948, "name": "juli-m4", "count": 1, "languages": 1 }, { - "order": 944, + "order": 949, "name": "sergiomhernandez", "count": 1, "languages": 1 }, { - "order": 945, + "order": 950, "name": "masenace", "count": 1, "languages": 1 }, { - "order": 946, + "order": 951, "name": "e-xtian", "count": 1, "languages": 1 }, { - "order": 947, + "order": 952, "name": "vickalck", "count": 1, "languages": 1 }, { - "order": 948, + "order": 953, "name": "gmedinat911", "count": 1, "languages": 1 }, { - "order": 949, + "order": 954, "name": "eljavi0", "count": 1, "languages": 1 }, { - "order": 950, + "order": 955, "name": "yeisongil", "count": 1, "languages": 1 }, { - "order": 951, + "order": 956, "name": "julioorozco05", "count": 1, "languages": 1 }, { - "order": 952, + "order": 957, "name": "fergz1988", "count": 1, "languages": 1 }, { - "order": 953, + "order": 958, "name": "marcos0803", "count": 1, "languages": 1 }, { - "order": 954, + "order": 959, "name": "xcortes", "count": 1, "languages": 1 }, { - "order": 955, + "order": 960, "name": "facundorsabia", "count": 1, "languages": 1 }, { - "order": 956, + "order": 961, "name": "nico70012", "count": 1, "languages": 1 }, { - "order": 957, + "order": 962, "name": "charly024", "count": 1, "languages": 1 }, { - "order": 958, + "order": 963, "name": "devjerez", "count": 1, "languages": 1 }, { - "order": 959, + "order": 964, "name": "copamire", "count": 1, "languages": 1 }, { - "order": 960, + "order": 965, "name": "gersonoroz", "count": 1, "languages": 1 }, { - "order": 961, + "order": 966, "name": "jafuma0320", "count": 1, "languages": 1 }, { - "order": 962, + "order": 967, "name": "g4nd4lf", "count": 1, "languages": 1 }, { - "order": 963, + "order": 968, "name": "obed-tc", "count": 1, "languages": 1 }, { - "order": 964, + "order": 969, "name": "devkenn", "count": 1, "languages": 1 }, { - "order": 965, + "order": 970, "name": "xalejandrow", "count": 1, "languages": 1 }, { - "order": 966, + "order": 971, "name": "henrydavidprimera", "count": 1, "languages": 1 }, { - "order": 967, + "order": 972, "name": "luceldasilva", "count": 1, "languages": 1 }, { - "order": 968, + "order": 973, "name": "mjordanaam", "count": 1, "languages": 1 }, { - "order": 969, + "order": 974, "name": "betulioo", "count": 1, "languages": 1 }, { - "order": 970, + "order": 975, "name": "judithernandez", "count": 1, "languages": 1 }, { - "order": 971, + "order": 976, "name": "dimanu-py", "count": 1, "languages": 1 }, { - "order": 972, + "order": 977, "name": "snowale", "count": 1, "languages": 1 }, { - "order": 973, + "order": 978, "name": "cd1974", "count": 1, "languages": 1 }, { - "order": 974, + "order": 979, "name": "acobo3", "count": 1, "languages": 1 }, { - "order": 975, + "order": 980, "name": "isaacdci", "count": 1, "languages": 1 }, { - "order": 976, + "order": 981, "name": "manueldenisdev", "count": 1, "languages": 1 }, { - "order": 977, + "order": 982, "name": "anexo01", "count": 1, "languages": 1 }, { - "order": 978, + "order": 983, "name": "yamiyugi25", "count": 1, "languages": 1 }, { - "order": 979, + "order": 984, "name": "gl-informatica", "count": 1, "languages": 1 }, { - "order": 980, + "order": 985, "name": "miguelmancebo", "count": 1, "languages": 1 }, { - "order": 981, + "order": 986, "name": "neusier101", "count": 1, "languages": 1 }, { - "order": 982, + "order": 987, "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { - "order": 983, + "order": 988, "name": "xhinto", "count": 1, "languages": 1 }, { - "order": 984, + "order": 989, "name": "dacaldev", "count": 1, "languages": 1 }, { - "order": 985, + "order": 990, "name": "juan-cruz01", "count": 1, "languages": 1 }, { - "order": 986, + "order": 991, "name": "juanalbornoz32", "count": 1, "languages": 1 }, { - "order": 987, + "order": 992, "name": "cisneros2404", "count": 1, "languages": 1 }, { - "order": 988, + "order": 993, "name": "neftalyr", "count": 1, "languages": 1 }, { - "order": 989, + "order": 994, "name": "latorredev", "count": 1, "languages": 1 }, { - "order": 990, + "order": 995, "name": "osneidert", "count": 1, "languages": 1 }, { - "order": 991, + "order": 996, "name": "jrgranadosb", "count": 1, "languages": 1 }, { - "order": 992, + "order": 997, "name": "vicvilla30", "count": 1, "languages": 1 }, { - "order": 993, + "order": 998, "name": "carlosbb70", "count": 1, "languages": 1 }, { - "order": 994, + "order": 999, "name": "pablom-2015", "count": 1, "languages": 1 }, { - "order": 995, + "order": 1000, "name": "xtinarita", "count": 1, "languages": 1 }, { - "order": 996, + "order": 1001, "name": "wilsonbarrera", "count": 1, "languages": 1 }, { - "order": 997, + "order": 1002, "name": "jereaguilar", "count": 1, "languages": 1 }, { - "order": 998, + "order": 1003, "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { - "order": 999, + "order": 1004, "name": "danidan1214", "count": 1, "languages": 1 }, { - "order": 1000, + "order": 1005, "name": "demegorash", "count": 1, "languages": 1 }, { - "order": 1001, + "order": 1006, "name": "cris10026", "count": 1, "languages": 1 }, { - "order": 1002, + "order": 1007, "name": "davidgramiro", "count": 1, "languages": 1 }, { - "order": 1003, + "order": 1008, "name": "jgarteag", "count": 1, "languages": 1 }, { - "order": 1004, + "order": 1009, "name": "adcarret", "count": 1, "languages": 1 }, { - "order": 1005, + "order": 1010, "name": "natanaelzubiri", "count": 1, "languages": 1 }, { - "order": 1006, + "order": 1011, "name": "diegogomezcor4", "count": 1, "languages": 1 }, { - "order": 1007, + "order": 1012, "name": "perla-zg", "count": 1, "languages": 1 }, { - "order": 1008, + "order": 1013, "name": "neshurtado", "count": 1, "languages": 1 }, { - "order": 1009, + "order": 1014, "name": "maxirica", "count": 1, "languages": 1 }, { - "order": 1010, + "order": 1015, "name": "marcelinoarias369", "count": 1, "languages": 1 }, { - "order": 1011, + "order": 1016, "name": "pushodev", "count": 1, "languages": 1 }, { - "order": 1012, + "order": 1017, "name": "sherkla12e", "count": 1, "languages": 1 }, { - "order": 1013, + "order": 1018, "name": "luisangeles20", "count": 1, "languages": 1 }, { - "order": 1014, + "order": 1019, "name": "johannmanrique", "count": 1, "languages": 1 }, { - "order": 1015, + "order": 1020, "name": "omar8102", "count": 1, "languages": 1 }, { - "order": 1016, + "order": 1021, "name": "eatsangels", "count": 1, "languages": 1 }, { - "order": 1017, + "order": 1022, "name": "alejarandro", "count": 1, "languages": 1 }, { - "order": 1018, + "order": 1023, "name": "tashidian", "count": 1, "languages": 1 }, { - "order": 1019, + "order": 1024, "name": "alejandro000", "count": 1, "languages": 1 }, { - "order": 1020, + "order": 1025, "name": "francgci", "count": 1, "languages": 1 }, { - "order": 1021, + "order": 1026, "name": "krisipo", "count": 1, "languages": 1 }, { - "order": 1022, + "order": 1027, "name": "jalonso76", "count": 1, "languages": 1 }, { - "order": 1023, + "order": 1028, "name": "leo18q", "count": 1, "languages": 1 }, { - "order": 1024, + "order": 1029, "name": "sofiamfernandez", "count": 1, "languages": 1 }, { - "order": 1025, + "order": 1030, "name": "jgregoris", "count": 1, "languages": 1 }, { - "order": 1026, + "order": 1031, "name": "josuelopez5", "count": 1, "languages": 1 }, { - "order": 1027, + "order": 1032, "name": "mrf1989", "count": 1, "languages": 1 }, { - "order": 1028, + "order": 1033, "name": "zeraven09", "count": 1, "languages": 1 }, { - "order": 1029, + "order": 1034, "name": "pr1de-23", "count": 1, "languages": 1 }, { - "order": 1030, + "order": 1035, "name": "kronoscba", "count": 1, "languages": 1 }, { - "order": 1031, + "order": 1036, "name": "erickcis", "count": 1, "languages": 1 }, { - "order": 1032, + "order": 1037, "name": "experthacker444", "count": 1, "languages": 1 }, { - "order": 1033, + "order": 1038, "name": "javirr4", "count": 1, "languages": 1 }, { - "order": 1034, + "order": 1039, "name": "ignacioskm", "count": 1, "languages": 1 }, { - "order": 1035, + "order": 1040, "name": "jchernandez87", "count": 1, "languages": 1 }, { - "order": 1036, + "order": 1041, "name": "ferngpv", "count": 1, "languages": 1 }, { - "order": 1037, + "order": 1042, "name": "kshields51", "count": 1, "languages": 1 }, { - "order": 1038, + "order": 1043, "name": "salas89", "count": 1, "languages": 1 }, { - "order": 1039, + "order": 1044, "name": "90dread", "count": 1, "languages": 1 }, { - "order": 1040, + "order": 1045, "name": "chema-dw", "count": 1, "languages": 1 }, { - "order": 1041, + "order": 1046, "name": "sbngl", "count": 1, "languages": 1 }, { - "order": 1042, + "order": 1047, "name": "m4xxdev", "count": 1, "languages": 1 }, { - "order": 1043, + "order": 1048, "name": "cristianvergaraf", "count": 1, "languages": 1 }, { - "order": 1044, + "order": 1049, "name": "idiegorojas", "count": 1, "languages": 1 }, { - "order": 1045, + "order": 1050, "name": "lizzymaken", "count": 1, "languages": 1 }, { - "order": 1046, + "order": 1051, "name": "jandortiz", "count": 1, "languages": 1 }, { - "order": 1047, + "order": 1052, "name": "claudios1980", "count": 1, "languages": 1 }, { - "order": 1048, + "order": 1053, "name": "sergiovelayos", "count": 1, "languages": 1 }, { - "order": 1049, + "order": 1054, "name": "miguelangel861", "count": 1, "languages": 1 }, { - "order": 1050, + "order": 1055, "name": "marcosjarrin", "count": 1, "languages": 1 }, { - "order": 1051, + "order": 1056, "name": "jandresalvar", "count": 1, "languages": 1 }, { - "order": 1052, + "order": 1057, "name": "joferpg", "count": 1, "languages": 1 }, { - "order": 1053, + "order": 1058, "name": "jlrojano", "count": 1, "languages": 1 }, { - "order": 1054, + "order": 1059, "name": "ivanserran", "count": 1, "languages": 1 }, { - "order": 1055, + "order": 1060, "name": "dany3gs", "count": 1, "languages": 1 }, { - "order": 1056, + "order": 1061, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1057, + "order": 1062, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1058, + "order": 1063, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1059, + "order": 1064, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1060, + "order": 1065, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1061, + "order": 1066, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1062, + "order": 1067, "name": "bycris13", "count": 1, "languages": 1 }, { - "order": 1063, + "order": 1068, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1064, + "order": 1069, "name": "v1k770r", "count": 1, "languages": 1 }, { - "order": 1065, + "order": 1070, "name": "gianellannie", "count": 1, "languages": 1 }, { - "order": 1066, + "order": 1071, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1067, + "order": 1072, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1068, + "order": 1073, "name": "fredylopez01", "count": 1, "languages": 1 }, { - "order": 1069, + "order": 1074, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1070, + "order": 1075, "name": "lautimorales", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1076, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1077, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1078, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1079, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1080, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1081, "name": "adriansaint07", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1082, "name": "javiir", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1083, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1084, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1085, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1086, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1087, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1088, "name": "jrgim", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1089, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1090, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1091, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1092, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1093, "name": "robermejia", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1094, "name": "nolemoon", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1095, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1096, "name": "reneguzman7", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1097, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1098, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1099, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1095, + "order": 1100, "name": "queralesdev", "count": 1, "languages": 1 }, { - "order": 1096, + "order": 1101, "name": "dovinhoyos", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1102, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1103, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1104, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1105, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1106, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1107, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1108, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1109, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1110, "name": "antoniojzp86", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1111, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1112, "name": "zyn7e", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1113, "name": "diegopardomontero", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1114, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1115, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1116, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1117, "name": "clespinosa2024", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1118, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1119, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1120, "name": "bellodeveloper", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1121, "name": "cdryampi", "count": 1, "languages": 1 }, { - "order": 1117, - "name": "bereverte", - "count": 1, - "languages": 1 - }, - { - "order": 1118, + "order": 1122, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1123, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1124, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1125, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1126, + "name": "matinbohorquez", + "count": 1, + "languages": 1 + }, + { + "order": 1127, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1128, "name": "rawc1nnamon", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1129, "name": "mvidab", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1130, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1131, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1132, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1133, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1134, "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1135, "name": "orzefox", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1136, "name": "acirdeveloper", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1137, "name": "emiliordev", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1138, "name": "sve-nnn", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1139, "name": "edgarmedranoa", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1140, "name": "rafapg93", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1141, "name": "vickalc", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1142, "name": "riukac", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1143, "name": "rusian69", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1144, "name": "wijimenezz", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1145, "name": "albertovf", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1146, "name": "markayala13", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1147, "name": "rocha30", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1148, "name": "righelch", "count": 1, "languages": 1 }, { - "order": 1144, + "order": 1149, "name": "deathbat00", "count": 1, "languages": 1 }, { - "order": 1145, + "order": 1150, "name": "nicoloboo02", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1151, "name": "sergiopq", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1152, "name": "angeloro", "count": 1, "languages": 1 }, { - "order": 1148, + "order": 1153, "name": "jony-english22", "count": 1, "languages": 1 }, { - "order": 1149, + "order": 1154, "name": "tilordqwerty", "count": 1, "languages": 1 }, { - "order": 1150, + "order": 1155, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1151, + "order": 1156, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1152, + "order": 1157, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1153, + "order": 1158, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1154, + "order": 1159, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1155, + "order": 1160, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1156, + "order": 1161, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1157, + "order": 1162, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1158, + "order": 1163, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1159, + "order": 1164, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1160, + "order": 1165, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1161, + "order": 1166, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1162, + "order": 1167, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1163, + "order": 1168, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1164, + "order": 1169, "name": "willypaz243", "count": 1, "languages": 1 }, { - "order": 1165, + "order": 1170, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1166, + "order": 1171, "name": "arperezinf", "count": 1, "languages": 1 }, { - "order": 1167, + "order": 1172, "name": "alecraft8", "count": 1, "languages": 1 }, { - "order": 1168, + "order": 1173, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1169, + "order": 1174, "name": "juampaweb", "count": 1, "languages": 1 }, { - "order": 1170, + "order": 1175, "name": "girngoma", "count": 1, "languages": 1 }, { - "order": 1171, + "order": 1176, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1172, + "order": 1177, "name": "ddaniel27", "count": 1, "languages": 1 }, { - "order": 1173, + "order": 1178, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1174, + "order": 1179, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1175, + "order": 1180, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1176, + "order": 1181, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1177, + "order": 1182, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1178, + "order": 1183, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1179, + "order": 1184, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1180, + "order": 1185, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1181, + "order": 1186, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1182, + "order": 1187, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1183, + "order": 1188, "name": "ouendinga", "count": 1, "languages": 1 }, { - "order": 1184, + "order": 1189, "name": "melonconyogurt", "count": 1, "languages": 1 From 22b7d33e149a075a18b2ba2cf5d94cb2eed31e29 Mon Sep 17 00:00:00 2001 From: kenysdev Date: Tue, 17 Sep 2024 19:45:15 -0500 Subject: [PATCH 359/539] 38 - c# - winners in csv --- Roadmap/38 - MOUREDEV PRO/c#/kenysdev.cs | 106 +++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/c#/kenysdev.cs diff --git a/Roadmap/38 - MOUREDEV PRO/c#/kenysdev.cs b/Roadmap/38 - MOUREDEV PRO/c#/kenysdev.cs new file mode 100644 index 0000000000..1dc84e14a1 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/c#/kenysdev.cs @@ -0,0 +1,106 @@ +namespace exs38; +/* +_____________________________________ +https://github.com/kenysdev +2024 - C# +_____________________________________ +MOUREDEV PRO +------------------------------------ +* He presentado mi proyecto más importante del año: mouredev pro. + * Un campus para la comunidad, que lanzaré en octubre, donde estudiar + * programación de una manera diferente. + * Cualquier persona suscrita a la newsletter de https://mouredev.pro + * accederá a sorteos mensuales de suscripciones, regalos y descuentos. + * + * Desarrolla un programa que lea los registros de un fichero .csv y + * seleccione de manera aleatoria diferentes ganadores. + * Requisitos: + * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + * o "inactivo" (y datos ficticios). + * Ejemplo: 1 | test@test.com | activo + * 2 | test2@test.com | inactivo + * (El .csv no debe subirse como parte de la corrección) + * 2. Recupera los datos desde el programa y selecciona email aleatorios. + * Acciones: + * 1. Accede al fichero .csv y selecciona de manera aleatoria un email + * ganador de una suscripción, otro ganador de un descuento y un último + * ganador de un libro (sólo si tiene status "activo" y no está repetido). + * 2. Muestra los emails ganadores y su id. + * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + * no debe tenerse en cuenta. +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +class Program +{ + static List>? ReadCsv(string filePath) + { + try + { + var lines = File.ReadAllLines(filePath); + var headers = lines[0].Split(','); + return lines.Skip(1).Select(line => + line.Split(',') + .Select((value, index) => new { Header = headers[index], Value = value }) + .ToDictionary(item => item.Header, item => item.Value) + ).ToList(); + } + catch (Exception e) + { + Console.WriteLine($"Error reading '{filePath}': {e.Message}"); + return null; + } + } + + static List> GetActiveEntries(List> entries) + { + return entries.Where(entry => entry["status"] + .Equals("active", StringComparison.CurrentCultureIgnoreCase)) + .Select(entry => new Dictionary + { + ["id"] = entry["id"], + ["email"] = entry["email"], + ["status"] = entry["status"] + }) + .ToList(); + } + + static List> SelectWinners(List> activeEntries, int numWinners) + { + var random = new Random(); + return activeEntries.OrderBy(x => random.Next()).Take(Math.Min(numWinners, activeEntries.Count)).ToList(); + } + + static void DistributePrizes(List> winners, List prizes) + { + var random = new Random(); + prizes = [.. prizes.OrderBy(x => random.Next())]; + for (int i = 0; i < Math.Min(winners.Count, prizes.Count); i++) + { + Console.WriteLine($"{prizes[i],-11} -> Id({winners[i]["id"]}): {winners[i]["email"]}"); + } + } + + static void Main() + { + Console.WriteLine("Usuarios ganadores de 'MOUREDEV PRO:'"); + string csvFile = "users.csv"; + var prizes = new List { "Suscripción", "Descuento", "Libro" }; + + var entries = ReadCsv(csvFile); + if (entries != null && entries.Count >= 3) + { + var activeEntries = GetActiveEntries(entries); + var winners = SelectWinners(activeEntries, 3); + DistributePrizes(winners, prizes); + } + else + { + Console.WriteLine("Debe haber más de 3 entradas activas."); + } + } +} From 90bfc463789cc0c691c53f72e7cafa0976ab020f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Heguaburu=20S=C3=A1nchez?= Date: Tue, 17 Sep 2024 21:54:31 -0300 Subject: [PATCH 360/539] #04-python --- .../python/NicoHeguaburu.py | 197 ++++++++++++++++++ 1 file changed, 197 insertions(+) diff --git a/Roadmap/04 - CADENAS DE CARACTERES/python/NicoHeguaburu.py b/Roadmap/04 - CADENAS DE CARACTERES/python/NicoHeguaburu.py index e69de29bb2..7e707212cb 100644 --- a/Roadmap/04 - CADENAS DE CARACTERES/python/NicoHeguaburu.py +++ b/Roadmap/04 - CADENAS DE CARACTERES/python/NicoHeguaburu.py @@ -0,0 +1,197 @@ +""" +Operaciones +""" + +string1 = "Hola" +string2 = "Python" + + +#Concatenacion +print(string1 + " " + string2 + "!") + +#Repeticion +print(string1 * 3) + +#Indexacion +print(string1[0] + string1[1] + string1[2] + string1[3]) + +#longitud +print(len(string1)) + +#slicing (porcion) +print(string2[2:6]) +print(string2[2:]) + +#Busqueda +print("Ho" in string1) + +#Remplazo +print(string1.replace("o","a")) + +#Division +print(string2.split("t")) + +#Mayusculas y minusculas +print(string1.upper()) +print(string1.lower()) +print("hola a todos".title()) +print("hola a todos".capitalize()) + +#Eliminacion de espacios +print(" Hola python ".strip()) + +#Busqueda al principio y al final +print(string1.startswith("Ho")) +print(string1.startswith("Py")) +print(string1.endswith("Ho")) +print(string1.endswith("Ho")) + +#Busqueda de posicion +print("Hola como estan todos?".find("estan")) + +#Busqueda de ocurrencias +print(string1.lower().count("o")) + +#Formateo de cadena +print("Saludo: {}, lenguaje: {}!".format(string1, string2)) + +#Interpolacion +print(f"Saludo: {string1}, lenguaje: {string2}!") + +#Transformacion en lista +print(list(string1)) + +#Transformacion en string +lista1 = ["h","o","l","a"] +print("".join(lista1)) + +#transformaciones numericas +string3 = 123456789 +string3 = int(string3) #ENTERO +print(type(string3)) +string3 = float(string3) #DECIMAL +print(type(string3)) + +#Comprobaciones varias +print(string1.isalnum()) +print(string1.isalpha()) +print(string1.isnumeric()) + + + +#DIFICULTAD EXTRA + + +def texto_palindromo(): + + print("elija su palabra a comprobar") + texto = input("") + + texto_dividio_1 = [] + texto_dividio_2 = [] + + if len(texto) % 2 == 0: + for i in range(len(texto) // 2): + letra = texto[i] + texto_dividio_1.append(letra) + + for i in range(len(texto) -1, len(texto) // 2 -1, -1): + letra = texto[i] + texto_dividio_2.append(letra) + + else: + for i in range(len(texto) // 2): + letra = texto[i] + texto_dividio_1.append(letra) + + for i in range(len(texto) -1, len(texto) // 2 , -1): + letra = texto[i] + texto_dividio_2.append(letra) + + if texto_dividio_1 == texto_dividio_2: + print("su texto es palindromo") + else: + print("su texto no es palindromo") + + + +def texto_anagrama(): + print("elije tu palabra numero 1") + palabra1 = input() + lista_palabra1 = list(palabra1) + lista_palabra1.sort() + + print("elije tu palabra numero 2") + palabra2 = input() + lista_palabra2 = list(palabra2) + lista_palabra2.sort() + + if lista_palabra1 == lista_palabra2: + print("TU PALABRA ES UN ANAGRAMAA!!!!") + else: + print("TU PALABRA NO ES UN ANAGRAMA :(") + + + + + + +def texto_isograma(): + print("elije tu palabra para ver si es un isograma") + palabra = input() + conteo = {} + + for letra in palabra: + if letra in conteo: + conteo[letra] += 1 + else: + conteo[letra] = 1 + + apariciones_iniciales = next(iter(conteo.values())) + valores = list(conteo.values()) + + def fun(): + for i in valores: + if apariciones_iniciales != i: + return False + return True + + fun() + resultado = fun() + + + if resultado == True: + print("es un isograma") + else: + print("no es un isograma") + +def menu(): + print("1----------palindromos") + print("2----------anagrama") + print("3----------isograma") + print("4----------salir") + + + opcion = input() + + + if opcion == "1": + texto_palindromo() + menu() + elif opcion == "2": + texto_anagrama() + menu() + elif opcion == "3": + texto_isograma() + menu() + elif opcion == "4": + exit() + else: + menu() + + + +menu() + + + From 1eaeaa663e7101c266c9e808b71760df1aa593bf Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Tue, 17 Sep 2024 19:58:30 -0500 Subject: [PATCH 361/539] #12 - Java --- .../12 - JSON Y XML/java/martinbohorquez.java | 264 ++++++++++++++++++ 1 file changed, 264 insertions(+) create mode 100644 Roadmap/12 - JSON Y XML/java/martinbohorquez.java diff --git a/Roadmap/12 - JSON Y XML/java/martinbohorquez.java b/Roadmap/12 - JSON Y XML/java/martinbohorquez.java new file mode 100644 index 0000000000..6e988138eb --- /dev/null +++ b/Roadmap/12 - JSON Y XML/java/martinbohorquez.java @@ -0,0 +1,264 @@ +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.TypeAdapter; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Scanner; +import java.util.Set; + +/** + * #12 JSON Y XML + * + * + * com.fasterxml.jackson.dataformat + * jackson-dataformat-xml + * 2.17.2 + * + * + * com.fasterxml.jackson.datatype + * jackson-datatype-jsr310 + * 2.17.2 + * + * + * com.google.code.gson + * gson + * 2.10.1 + * + * + * + * @author martinbohorquez + */ +public class martinbohorquez { + + private static final FileOperation operation = new FileOperation(); + + public static void main(String[] args) { + // Creación de objetos. + Programmer programmer = new Programmer(); + programmer.setName("Martin B"); + programmer.setAge(29); + programmer.setBirthDate(LocalDate.of(1994, 9, 26)); + programmer.setLanguages(new HashSet<>(Arrays.asList("Java", "Typescript", "Python"))); + + // XML + String stringXml = "data/martinDev.xml"; + File fileXml = operation.create(stringXml); + // Serialización + XMLManager xmlManager = new XMLManager<>(fileXml.toPath()); + xmlManager.serialize(programmer); + // Deserialización + TypeReference typeReference = new TypeReference<>() { + }; + Programmer programmerFromXml = xmlManager.deserialize(typeReference); + System.out.println(programmerFromXml); +// operation.delete(fileXml); + + //JSON + String stringJson = "data/martinDev.json"; + File fileJson = operation.create(stringJson); + // Serialización + JSONManager jsonManage = new JSONManager<>(fileJson.toPath()); + jsonManage.serialize(programmer); + // Deserialización + Programmer programmerFromJson = jsonManage.deserialize(TypeToken.get(Programmer.class)); + System.out.println(programmerFromJson); +// operation.delete(fileJson); + } + + private static class FileOperation { + + private static void printFileEmpty() { + System.out.println("El archivo se encuentra vacío, no tiene registros!"); + } + + private static void printfException(IOException e, String process) { + System.out.printf("Error al '%s' en el archivo: '%s'%n", process, e.getMessage()); + } + + private File create(String string) { + File file = new File(string); + if (file.getParentFile() != null) file.getParentFile().mkdirs();// Crear la carpeta si no existe + return file; + } + + private void write(File file, String string) { + try (FileWriter writer = new FileWriter(file, true); Scanner reader = new Scanner(file)) { + writer.append(string).append(System.lineSeparator()); + if (!reader.hasNext()) System.out.printf("Archivo '%s' creado!%n", file); + else System.out.printf("Archivo '%s' modificado!%n", file); + } catch (IOException e) { + printfException(e, "escribir"); + } + } + + private void read(File file) { + if (file == null || file.length() == 0) printFileEmpty(); + else { + try (Scanner reader = new Scanner(file)) { + System.out.println("Contenido del archivo: "); + while (reader.hasNext()) System.out.println(reader.nextLine()); + } catch (FileNotFoundException e) { + printfException(e, "leer"); + } + } + } + + private void delete(File file) { + if (file != null && file.delete()) { + if (file.getParentFile() != null && file.getParentFile().delete()) + System.out.printf("Folder '\\%s' eliminado correctamente!%n", file.getParentFile().toString()); + System.out.printf("Archivo '%s' eliminado correctamente!%n", file); + } + } + } + + private static class Programmer { + private String name; + private Integer age; + private LocalDate birthDate; + private Set languages; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } + + public LocalDate getBirthDate() { + return birthDate; + } + + public void setBirthDate(LocalDate birthDate) { + this.birthDate = birthDate; + } + + public Set getLanguages() { + return languages; + } + + public void setLanguages(Set languages) { + this.languages = languages; + } + + @Override + public String toString() { + return "Programmer : [name=" + name + ", age=" + age + ", birthDate=" + birthDate + ", languages=" + languages + + "]"; + } + } + + private static class XMLManager { + private XmlMapper xmlMapper; + private Path path; + + public XMLManager(Path path) { + this.path = path; + this.xmlMapper = XmlMapper.builder() + .enable(SerializationFeature.INDENT_OUTPUT) + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .build(); + xmlMapper.registerModule(new JavaTimeModule()); + } + + public void serialize(T object) { + try { + this.xmlMapper.writeValue(this.path.toFile(), object); + } catch (Exception e) { + e.printStackTrace(System.out); + } + } + + public T deserialize(TypeReference typeReference) { + try { + T objectDeserialize = this.xmlMapper.readValue(this.path.toFile(), typeReference); + return objectDeserialize; + } catch (Exception e) { + e.printStackTrace(System.out); + } + return null; + } + } + + private static class JSONManager { + private Path path; + private Gson gson; + + public JSONManager(Path path) { + this.path = path; + this.gson = new GsonBuilder() + .setPrettyPrinting() // This enables pretty printing + .registerTypeAdapter(LocalDate.class, new LocalDateTypeAdapter()) + .create(); + } + + public void serialize(T object) { + try { + String jsonString = gson.toJson(object); + Files.writeString(path, jsonString); + } catch (IOException e) { + e.printStackTrace(System.out); + } + } + + public T deserialize(TypeToken typeToken) { + try { + byte[] data = Files.readAllBytes(path); + T object = gson.fromJson(new String(data), typeToken.getType()); + return object; + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + } + + // Type Adapter for LocalDate + private static class LocalDateTypeAdapter extends TypeAdapter { + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE; + + @Override + public LocalDate read(JsonReader jsonReader) throws IOException { + if (jsonReader.peek() == com.google.gson.stream.JsonToken.NULL) { + jsonReader.nextNull(); + return null; + } else { + return LocalDate.parse(jsonReader.nextString(), FORMATTER); + } + } + + @Override + public void write(JsonWriter jsonWriter, LocalDate localDate) throws IOException { + if (localDate == null) { + jsonWriter.nullValue(); + } else { + jsonWriter.value(localDate.format(FORMATTER)); + } + } + } +} From f8eabcdd7cf3d2249db848f8da9ac7502b1e2f53 Mon Sep 17 00:00:00 2001 From: blackriper Date: Tue, 17 Sep 2024 20:42:20 -0600 Subject: [PATCH 362/539] Reto#37-kotlin --- .../kotlin/blackriper.kt | 236 ++++++++++++++++++ .../38 - MOUREDEV PRO/kotlin/blackriper.kt | 139 +++++++++++ 2 files changed, 375 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/kotlin/blackriper.kt create mode 100644 Roadmap/38 - MOUREDEV PRO/kotlin/blackriper.kt diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/kotlin/blackriper.kt b/Roadmap/37 - OASIS VS LINKIN PARK/kotlin/blackriper.kt new file mode 100644 index 0000000000..b41d54eaf4 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/kotlin/blackriper.kt @@ -0,0 +1,236 @@ +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.engine.cio.CIO +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.request.forms.FormDataContent +import io.ktor.client.request.get +import io.ktor.client.request.headers +import io.ktor.client.request.post +import io.ktor.client.request.setBody +import io.ktor.client.statement.bodyAsText +import io.ktor.http.HttpHeaders +import io.ktor.http.parameters +import io.ktor.serialization.kotlinx.json.json +import io.ktor.util.decodeBase64String +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.transform +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import java.util.Base64 +import java.util.Comparator + + +//1.-data para reponses y request +const val CLIENT_ID="YOUR_CLIENT_ID" +const val CLIENT_SECRET="YOUR_CLIENT_SECRET" + +object Endpoints{ + const val TOKEND="https://accounts.spotify.com/api/token" + val searhArtist={name: String->"https://api.spotify.com/v1/search?q=$name&type=artist&limit=1"} + val getArtistOrTrack={id: String,isTrack: Boolean-> + if (isTrack) "https://api.spotify.com/v1/artists/$id/top-tracks" + else "https://api.spotify.com/v1/artists/$id" + } +} + + +val base64Credentials=Base64.getEncoder().encodeToString("$CLIENT_ID:$CLIENT_SECRET".toByteArray()) + +@Serializable +data class ResponseToken( + @SerialName("access_token") + val accessToken: String +) + +//obtener el id del artista gracias ala configuracion de json puedo omitir campos que no necesito +@Serializable +data class Item(val id: String) + +@Serializable +data class DataArtist( val items: List) + + +@Serializable +data class ResponseArtistID( + val artists:DataArtist +) + + +@Serializable +data class Artist(val name: String,val followers: Follower, val popularity: Int){ + companion object{ + fun toArtistDto(artist: Artist,track: Track):ArtistDto{ + return ArtistDto( + artist.name, + artist.followers, + artist.popularity, + track + ) + } + } +} + +@Serializable +data class Follower(val total: Long) + + +@Serializable +data class Track(val name: String,val popularity: Int) + +@Serializable +data class Tracks(val tracks: List) + +// creando una clase adicional para poder hacer mas optima la comparacion +data class ArtistDto(val name: String,val followers: Follower, val popularity: Int,val track: Track) + + + +//2.-configurar cliente para solicitudes http con ktor +//https://ktor.io/docs/client-create-new-application.html +val client= HttpClient(CIO){ + install(ContentNegotiation){ + json(Json{ + prettyPrint=true + ignoreUnknownKeys=true + }) + } +} + + + + +//3.-obtener token para poder acceder ala api + +suspend fun getToken(): String{ + val response=client.post(Endpoints.TOKEND){ + headers { + append(HttpHeaders.Authorization,"Basic $base64Credentials") + append(HttpHeaders.ContentType,"application/x-www-form-urlencoded") + } + setBody(FormDataContent(parameters { + append("grant_type","client_credentials") + })) + } + if (response.status.value!=200) throw Exception("error conecting spotify ${response.bodyAsText()}") + + return response.body().accessToken +} + + +//4.-consultar informacion de artista +suspend fun getArtistID(token: String,name: String): String{ + val response=client.get(Endpoints.searhArtist(name)){ + headers { + append(HttpHeaders.Authorization,"Bearer $token") + } + } + if (response.status.value!=200) throw Exception("error to get Artist Id for name $name") + return response.body().artists.items[0].id +} + + +//5.-obtener informacion del artista +suspend fun getDataArtist(token: String,id: String):Artist{ + val response=client.get(Endpoints.getArtistOrTrack(id,false)){ + headers { + append(HttpHeaders.Authorization,"Bearer $token") + } + } + if (response.status.value!=200) throw Exception("error to get artist data ${response.bodyAsText()}") + return response.body() +} + + +//6.-optener la cancion mas popular +suspend fun getTopTrack(token: String,id: String):Track{ + val response=client.get(Endpoints.getArtistOrTrack(id,true)){ + headers { + append(HttpHeaders.Authorization,"Bearer $token") + } + } + if (response.status.value!=200) throw Exception("error to get artist data ${response.bodyAsText()}") + val bestTrack=response.body().tracks.maxByOrNull { it.popularity } + return bestTrack?:Track("",0) +} + + +suspend fun comparateArtist(artists: List){ + var counter1: Int=0 + var counter2: Int=0 + + println("Comparate Artist") + println("${artists.get(0).name} vs ${artists.get(1).name} ") + + //seguidores + println("Comparate followers") + val winnerfoll=artists.maxByOrNull { it.followers.total } + if (winnerfoll!=null) { + println("artist ${winnerfoll.name} is more popular in number of followers") + if (artists.get(0).name==winnerfoll.name) counter1++ + else counter2++ + } + else println("tie no artist is more followers than another ") + + + //popularidad + println("Comparate popularity") + val winnerPop=artists.maxByOrNull { it.popularity } + if (winnerPop!=null){ + println("artist ${winnerPop.name} is most popular artist") + if (artists.get(0).name==winnerPop.name) counter1++ + else counter2++ + } + else println(" no artist is more popular than another ") + + println("Comparate popularity song") + val winnerTrack=artists.maxByOrNull { it.track.popularity } + if (winnerTrack!=null){ + println("the song ${winnerTrack.track.name} is most popular") + if (artists.get(0).name==winnerTrack.name) counter1++ + else counter2++ + } + + if (counter1>counter2){ + println("the ${artists.get(0).name} is most popular artist") + } + + if (counter2>counter1){ + println("the ${artists.get(1).name} is most popular artist") + } + + if (counter1==counter2){ + println("it´s like seeging the gods of Olympus") + } + +} + + + + +fun main()= runBlocking { + //tokens + val token= async{ getToken()}.await() + //ids + val artistIDOne= async{getArtistID(token,"JoseJose")}.await() + val artistIDTwo= async{getArtistID(token,"JuanGabriel")}.await() + // artist data + val info1=async{getDataArtist(token,artistIDOne)}.await() + val info2=async{getDataArtist(token,artistIDTwo)}.await() + + //best track + val topTrack1=async{getTopTrack(token,artistIDOne)}.await() + val topTrack2= async{getTopTrack(token,artistIDTwo)}.await() + + val job= launch{ + val artistsDto=listOf(Artist.toArtistDto(info1,topTrack1),Artist.toArtistDto(info2,topTrack2)) + comparateArtist(artistsDto) + } + + job.join() +} \ No newline at end of file diff --git a/Roadmap/38 - MOUREDEV PRO/kotlin/blackriper.kt b/Roadmap/38 - MOUREDEV PRO/kotlin/blackriper.kt new file mode 100644 index 0000000000..ed8cc8a938 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/kotlin/blackriper.kt @@ -0,0 +1,139 @@ +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.toList +import kotlinx.coroutines.flow.transform +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import java.io.FileInputStream +import java.io.InputStream + +//1.- definir una clase para parsear la info + +enum class Status(val state: String){ + ACTIVE("active"), + INACTIVE("inactive") + +} + +enum class Prize{ + Suscription, + Discount, + Book, + NotWinner +} + +data class Suscriptor(val id: Int,val email: String,val status: Status) { + companion object { + fun parseStatus(name: String): Status = when (name) { + Status.ACTIVE.state -> Status.ACTIVE + Status.ACTIVE.state -> Status.INACTIVE + else -> Status.INACTIVE + } + } + + fun toWinner(prize:Prize):Winner{ + return Winner( + id, + email, + prize + ) + } +} + +data class Winner(val id: Int, val email: String, val prize:Prize) + +//2.- Definir comportamiento +interface CSVParse{ + suspend fun readCsv(): Flow +} + +//3.- implementar interface +class CSVProcessor( private val input: InputStream):CSVParse{ + + override suspend fun readCsv(): Flow{ + val reader= input.bufferedReader() + val header= reader.readLine() + + val suscriptors= reader.lineSequence() + .filter { it.isNotBlank() } + .map { toSuscriptor(it) } + .asFlow() + + return suscriptors + } + + + private fun toSuscriptor(value: String):Suscriptor{ + val(id,email,status)=value.split(',', ignoreCase = false, limit = 3) + return Suscriptor( + id.toInt(), + email, + Suscriptor.parseStatus(status) + ) + } +} + +//4.- funciones auxiliares +fun getInputStream(src: String): InputStream{ + val file= runCatching { + FileInputStream(src) + } + if (file.isFailure) println("error to read file ${file.exceptionOrNull()}") + return file.getOrDefault(FileInputStream("src/main/resources/datamoure.csv")) +} + +fun getPrize(numWinner: Int):Prize=when(numWinner){ + 1-> Prize.Suscription + 2->Prize.Discount + 3->Prize.Book + else -> Prize.NotWinner +} + + +fun randomWinners(suscriptors: List): List{ + return mutableListOf().apply { + var numWinner=0 + while (size != 3) { + val ind = (0..suscriptors.size).random() + val suscriptor = suscriptors.get(ind) + if(count { it.email == suscriptor.email } == 0) { + numWinner++ + val winner=Winner( + suscriptor.id, + suscriptor.email, + getPrize(numWinner) + ) + add(winner) + } + } + } + + } + +suspend fun getWinners(suscriptors: Flow){ + val activeSuscriptor = suscriptors + .filter { it.status == Status.ACTIVE }.toList() + + randomWinners(activeSuscriptor).run { + println("Results") + println("| Id | Email | Prize") + this.forEach { + println(" ${it.id} ${it.email} ${it.prize}") + } + } +} + + +fun main()= runBlocking { + val file=getInputStream("src/main/resources/datamoure.csv") + val csvParser=CSVProcessor(file) + val suscriptors= async{csvParser.readCsv()}.await() + val job=launch{getWinners(suscriptors)} + job.join() +} \ No newline at end of file From 70585631b5151c79469f813710da1540d9223152 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Tue, 17 Sep 2024 23:57:12 -0400 Subject: [PATCH 363/539] 37 - JavaScript --- .../javascript/RicJDev.js | 95 +++++++++++++++---- 1 file changed, 76 insertions(+), 19 deletions(-) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js index 8de327da40..de47bd7daa 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js @@ -41,27 +41,23 @@ const authorization = { headers: { Authorization: `Bearer ${accessToken}` } } async function getArtistId(artist) { const url = `https://api.spotify.com/v1/search?q=${artist}&type=artist&limit=1` const results = await fetch(url, authorization).then((response) => { - if (response.status !== 200) { - throw new Error(`Error al obtener el artista ${artist}`) - } + if (response.status !== 200) throw new Error(`Error al obtener el artista ${artist}.`) return response.json() }) - if (!results.artists.items) { - throw new Error(`Artista ${artist} no ha sido encontrado.`) - } + if (!results.artists.items) throw new Error(`Artista ${artist} no ha sido encontrado.`) return results.artists.items[0].id } // E iremos almacenando la información de nuestros artistas. -const LinkinPark = { +const artist1 = { id: await getArtistId('Linkin Park'), } -const Oasis = { +const artist2 = { id: await getArtistId('Oasis'), } @@ -70,9 +66,7 @@ const Oasis = { async function getArtistData(artistId) { const url = `https://api.spotify.com/v1/artists/${artistId}` const results = await fetch(url, authorization).then((response) => { - if (response.status !== 200) { - throw new Error(`Error al obtener datos del artista`) - } + if (response.status !== 200) throw new Error(`Error al obtener datos del artista.`) return response.json() }) @@ -84,17 +78,15 @@ async function getArtistData(artistId) { } } -LinkinPark.data = await getArtistData(LinkinPark.id) -Oasis.data = await getArtistData(Oasis.id) +artist1.data = await getArtistData(artist1.id) +artist2.data = await getArtistData(artist2.id) // Creamos otra función para obtener la canción más escuchada de la semana. async function getArtistTopTrack(artistId) { const url = `https://api.spotify.com/v1/artists/${artistId}/top-tracks?market=VE` const results = await fetch(url, authorization).then((response) => { - if (response.status !== 200) { - throw new Error(`Error al obtener cancion mas popular.`) - } + if (response.status !== 200) throw new Error(`Error al obtener canción más popular.`) return response.json() }) @@ -106,9 +98,74 @@ async function getArtistTopTrack(artistId) { } } -LinkinPark.topTrack = await getArtistTopTrack(LinkinPark.id) -Oasis.topTrack = await getArtistTopTrack(Oasis.id) +artist1.topTrack = await getArtistTopTrack(artist1.id) +artist2.topTrack = await getArtistTopTrack(artist2.id) // Aquí empezamos a comparar. -//TODO +console.log('COMPARANDO ARTISTAS.\n') + +console.log(`- ${artist1.data.name}.`) +console.log(`- ${artist2.data.name}.`) + +artist1.points = 0 +artist2.points = 0 + +// Ronda 1: seguidores. + +console.log('\n¿Quién tiene más seguidores?') + +console.log(`${artist1.data.name}:`, artist1.data.followers) +console.log(`${artist2.data.name}:`, artist2.data.followers) + +if (artist1.data.followers > artist2.data.followers) { + console.log(`\n¡Punto para ${artist1.data.name}!`) + + artist1.points++ +} else { + console.log(`\n¡Punto para ${artist2.data.name}!`) + + artist2.points++ +} + +// Ronda 2: popularidad. + +console.log('\n¿Quién tiene más popularidad a nivel general?') + +console.log(`${artist1.data.name}:`, artist1.data.popularity) +console.log(`${artist2.data.name}:`, artist2.data.popularity) + +if (artist1.data.popularity > artist2.data.popularity) { + console.log(`\n¡Punto para ${artist1.data.name}!`) + + artist1.points++ +} else { + console.log(`\n¡Punto para ${artist2.data.name}!`) + + artist2.points++ +} + +// Ronda 2: cancion mas escuchada. + +console.log( + '\nTenemos la canción más escuchada de cada artista. ¿Cuál tiene mayor popularidad general?' +) + +console.log(`${artist1.data.name}: ${artist1.topTrack.name}:`, artist1.topTrack.popularity) +console.log(`${artist2.data.name}: ${artist2.topTrack.name} :`, artist2.topTrack.popularity) + +if (artist1.topTrack.popularity > artist2.topTrack.popularity) { + console.log(`\n¡Punto para ${artist1.data.name}!`) + + artist1.points++ +} else { + console.log(`\n¡Punto para ${artist2.data.name}!`) + + artist2.points++ +} + +console.log('\nRESULTADOS:') + +artist1.points > artist2.points + ? console.log(`Ha ganado ${artist1.data.name}:`, artist1.points) + : console.log(`Ha ganado ${artist2.data.name}:`, artist2.points) From f11d45042740facc428ed636f5c8e278be18cb09 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Tue, 17 Sep 2024 23:58:43 -0400 Subject: [PATCH 364/539] 37 - JavaScript --- Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js index de47bd7daa..8016316cbe 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js @@ -145,7 +145,7 @@ if (artist1.data.popularity > artist2.data.popularity) { artist2.points++ } -// Ronda 2: cancion mas escuchada. +// Ronda 2: canción más escuchada. console.log( '\nTenemos la canción más escuchada de cada artista. ¿Cuál tiene mayor popularidad general?' From 61dfae21d01870add2778549bfe03bd0a9f2ed44 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Tue, 17 Sep 2024 23:59:13 -0400 Subject: [PATCH 365/539] 37 - JavaScript --- Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js index 8016316cbe..12d76546a8 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js @@ -145,7 +145,7 @@ if (artist1.data.popularity > artist2.data.popularity) { artist2.points++ } -// Ronda 2: canción más escuchada. +// Ronda 3: canción más escuchada. console.log( '\nTenemos la canción más escuchada de cada artista. ¿Cuál tiene mayor popularidad general?' From aecda5985070c2e0147ce61f964a251829782678 Mon Sep 17 00:00:00 2001 From: Manuel Aguilar <56054393+Daichiko@users.noreply.github.com> Date: Wed, 18 Sep 2024 00:08:13 -0400 Subject: [PATCH 366/539] #38-C# --- Roadmap/38 - MOUREDEV PRO/c#/reto#38.cs | 177 ++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/c#/reto#38.cs diff --git a/Roadmap/38 - MOUREDEV PRO/c#/reto#38.cs b/Roadmap/38 - MOUREDEV PRO/c#/reto#38.cs new file mode 100644 index 0000000000..f57478232b --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/c#/reto#38.cs @@ -0,0 +1,177 @@ +/* + * EJERCICIO: + * He presentado mi proyecto más importante del año: mouredev pro. + * Un campus para la comunidad, que lanzaré en octubre, donde estudiar + * programación de una manera diferente. + * Cualquier persona suscrita a la newsletter de https://mouredev.pro + * accederá a sorteos mensuales de suscripciones, regalos y descuentos. + * + * Desarrolla un programa que lea los registros de un fichero .csv y + * seleccione de manera aleatoria diferentes ganadores. + * Requisitos: + * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + * o "inactivo" (y datos ficticios). + * Ejemplo: 1 | test@test.com | activo + * 2 | test2@test.com | inactivo + * (El .csv no debe subirse como parte de la corrección) + * 2. Recupera los datos desde el programa y selecciona email aleatorios. + * Acciones: + * 1. Accede al fichero .csv y selecciona de manera aleatoria un email + * ganador de una suscripción, otro ganador de un descuento y un último + * ganador de un libro (sólo si tiene status "activo" y no está repetido). + * 2. Muestra los emails ganadores y su id. + * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + * no debe tenerse en cuenta. + */ + +namespace retos_programacion._2024.Reto_38 +{ + public class reto_38 + { + //Enumerado de tipos de estatus + internal enum Status {activo, inactivo}; + + //clase base para manejos de usuarios + internal class user + { + private int id; + private string email; + private Status status; + + public user(int id, string email, Status status) + { + this.id = id; + this.email = email; + this.status = status; + } + + public int Id { get => id;} + public string Email { get => email;} + public Status Status { get => status;} + } + + //logica principal del programa + public class mainLogic + { + //lista de usuarios necesaria + private List users = new List(); + + //Obtener datos de usuarios de .CSV + public bool ImportCSV(string path) + { + try + { + var file = File.ReadAllLines(path); + + for (int i = 1; i < file.Length; i++) + { + var values = file[i].Split(','); + + var id = int.Parse(values[0].Trim()); + var email = values[1].Trim(); + var status = values[2].Trim().ToLower().Equals("activo") ? Status.activo : Status.inactivo; + + var Usuario = new user(id, email, status); + users.Add(Usuario); + } + return true; + } + catch + { + Console.WriteLine("Ha ocurrido un error al leer el csv. Asegúrese de que el fichero existe y tiene un formato correcto."); + return false; + } + } + + //Seleccion de ganadores + public void SelectWinners () + { + if (users.Count <= 0) + { + Console.WriteLine("No se han cargado usuarios al sistema"); + return; + }; + + List usersCopyActivos = (new List(users)).Where(u => u.Status == Status.activo).ToList(); + + if (usersCopyActivos.Count <= 0) + { + Console.WriteLine("No hay mas usuarios en el sistema activos para seleccionar un ganador de suscripcion"); + return; + }; + + // Crear selectores para cada tipo de premio + IWinnerSelector subscriptionSelector = new SubscriptionWinnerSelector(); + IWinnerSelector discountSelector = new DiscountWinnerSelector(); + IWinnerSelector bookSelector = new BookWinnerSelector(); + + // Seleccionar ganadores para cada tipo de premio + SelectWinnerMessage(subscriptionSelector, usersCopyActivos, "No hay más usuarios activos para seleccionar un ganador de suscripción"); + SelectWinnerMessage(discountSelector, usersCopyActivos, "No hay más usuarios activos para seleccionar un ganador de descuento"); + SelectWinnerMessage(bookSelector, usersCopyActivos, "No hay más usuarios activos para seleccionar un ganador de libro"); + + + } + + //Se crea una funcion para mostrar los diferentes resultados del ganador + private void SelectWinnerMessage(IWinnerSelector selector, List users, string message) + { + if (users.Count <= 0) + { + Console.WriteLine(message); + return; + } + + selector.SelectWinner(users); + } + + //Se crea una interfaz para la seleccion del ganador + private interface IWinnerSelector + { + void SelectWinner(List users); + } + + //Se crea la clase para la seleccion del ganador de suscripcion + private class SubscriptionWinnerSelector : IWinnerSelector + { + public void SelectWinner(List users) + { + // Selección del ganador de la suscripción + Random rnd = new Random(); + int winnerIndex = rnd.Next(users.Count); + user winner = users[winnerIndex]; + Console.WriteLine($"El ganador de la suscripción es: \n\t{winner.Id} - {winner.Email}"); + users.RemoveAt(winnerIndex); + } + } + + //Se crea la clase para la seleccion del ganador de descuento + private class DiscountWinnerSelector : IWinnerSelector + { + public void SelectWinner(List users) + { + // Selección del ganador del descuento + Random rnd = new Random(); + int winnerIndex = rnd.Next(users.Count); + user winner = users[winnerIndex]; + Console.WriteLine($"El ganador del descuento es: \n\t{winner.Id} - {winner.Email}"); + users.RemoveAt(winnerIndex); + } + } + + //Se crea la clase para la seleccion del ganador del libro + private class BookWinnerSelector : IWinnerSelector + { + public void SelectWinner(List users) + { + // Selección del ganador del libro + Random rnd = new Random(); + int winnerIndex = rnd.Next(users.Count); + user winner = users[winnerIndex]; + Console.WriteLine($"El ganador del libro es: \n\t{winner.Id} - {winner.Email}"); + users.RemoveAt(winnerIndex); + } + } + } + } +} From 0655978edfb82767168cf741b3e5014bc55aa445 Mon Sep 17 00:00:00 2001 From: Manuel Aguilar <56054393+Daichiko@users.noreply.github.com> Date: Wed, 18 Sep 2024 00:09:33 -0400 Subject: [PATCH 367/539] #38-C#-Ajustes --- Roadmap/38 - MOUREDEV PRO/c#/{reto#38.cs => Daichiko.cs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/38 - MOUREDEV PRO/c#/{reto#38.cs => Daichiko.cs} (100%) diff --git a/Roadmap/38 - MOUREDEV PRO/c#/reto#38.cs b/Roadmap/38 - MOUREDEV PRO/c#/Daichiko.cs similarity index 100% rename from Roadmap/38 - MOUREDEV PRO/c#/reto#38.cs rename to Roadmap/38 - MOUREDEV PRO/c#/Daichiko.cs From 3225bba4fbbe1cef023a28df08ee8a2a19744ae9 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Wed, 18 Sep 2024 12:05:28 +0200 Subject: [PATCH 368/539] #06 java --- Roadmap/06 - RECURSIVIDAD/java/eulogioep.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Roadmap/06 - RECURSIVIDAD/java/eulogioep.java diff --git a/Roadmap/06 - RECURSIVIDAD/java/eulogioep.java b/Roadmap/06 - RECURSIVIDAD/java/eulogioep.java new file mode 100644 index 0000000000..821b735c99 --- /dev/null +++ b/Roadmap/06 - RECURSIVIDAD/java/eulogioep.java @@ -0,0 +1,66 @@ +public class eulogioep { + + public static void main(String[] args) { + // Llamada a la función para imprimir números del 100 al 0 + System.out.println("Números del 100 al 0:"); + imprimirNumeros(100); + + // Prueba del cálculo de factorial + int numeroFactorial = 5; + System.out.println("\nFactorial de " + numeroFactorial + ": " + factorial(numeroFactorial)); + + // Prueba de la sucesión de Fibonacci + int posicionFibonacci = 7; + System.out.println("Elemento en la posición " + posicionFibonacci + " de Fibonacci: " + fibonacci(posicionFibonacci)); + } + + /** + * Función recursiva para imprimir números del 100 al 0. + * @param numero El número actual a imprimir. + */ + public static void imprimirNumeros(int numero) { + // Caso base: si el número es menor que 0, terminamos la recursión + if (numero < 0) { + return; + } + + // Imprimimos el número actual + System.out.print(numero + " "); + + // Llamada recursiva con el número decrementado + imprimirNumeros(numero - 1); + } + + /** + * Función recursiva para calcular el factorial de un número. + * @param n El número del cual calcular el factorial. + * @return El factorial del número. + */ + public static int factorial(int n) { + // Casos base: factorial de 0 y 1 es 1 + if (n == 0 || n == 1) { + return 1; + } + + // Llamada recursiva: n * factorial(n-1) + return n * factorial(n - 1); + } + + /** + * Función recursiva para calcular el valor de un elemento en la sucesión de Fibonacci. + * @param posicion La posición del elemento en la sucesión de Fibonacci. + * @return El valor del elemento en la posición dada. + */ + public static int fibonacci(int posicion) { + // Casos base: posiciones 0 y 1 de Fibonacci son 0 y 1 respectivamente + if (posicion == 0) { + return 0; + } + if (posicion == 1) { + return 1; + } + + // Llamada recursiva: suma de los dos elementos anteriores + return fibonacci(posicion - 1) + fibonacci(posicion - 2); + } +} \ No newline at end of file From 29c4d80be491d92d4bc4f1b0cfc6f793ced50303 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Wed, 18 Sep 2024 12:06:17 +0200 Subject: [PATCH 369/539] #06 javascript --- .../06 - RECURSIVIDAD/javascript/eulogioep.js | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Roadmap/06 - RECURSIVIDAD/javascript/eulogioep.js diff --git a/Roadmap/06 - RECURSIVIDAD/javascript/eulogioep.js b/Roadmap/06 - RECURSIVIDAD/javascript/eulogioep.js new file mode 100644 index 0000000000..5faa060fa4 --- /dev/null +++ b/Roadmap/06 - RECURSIVIDAD/javascript/eulogioep.js @@ -0,0 +1,56 @@ +// Función recursiva para imprimir números del 100 al 0 +function imprimirNumeros(numero) { + // Caso base: si el número es menor que 0, terminamos la recursión + if (numero < 0) { + return; + } + + // Imprimimos el número actual + console.log(numero); + + // Llamada recursiva con el número decrementado + imprimirNumeros(numero - 1); +} + +/** + * Función recursiva para calcular el factorial de un número. + * @param {number} n - El número del cual calcular el factorial. + * @return {number} El factorial del número. + */ +function factorial(n) { + // Casos base: factorial de 0 y 1 es 1 + if (n === 0 || n === 1) { + return 1; + } + + // Llamada recursiva: n * factorial(n-1) + return n * factorial(n - 1); +} + +/** + * Función recursiva para calcular el valor de un elemento en la sucesión de Fibonacci. + * @param {number} posicion - La posición del elemento en la sucesión de Fibonacci. + * @return {number} El valor del elemento en la posición dada. + */ +function fibonacci(posicion) { + // Casos base: posiciones 0 y 1 de Fibonacci son 0 y 1 respectivamente + if (posicion === 0) { + return 0; + } + if (posicion === 1) { + return 1; + } + + // Llamada recursiva: suma de los dos elementos anteriores + return fibonacci(posicion - 1) + fibonacci(posicion - 2); +} + +// Pruebas de las funciones +console.log("Números del 100 al 0:"); +imprimirNumeros(100); + +const numeroFactorial = 5; +console.log(`\nFactorial de ${numeroFactorial}: ${factorial(numeroFactorial)}`); + +const posicionFibonacci = 7; +console.log(`Elemento en la posición ${posicionFibonacci} de Fibonacci: ${fibonacci(posicionFibonacci)}`); \ No newline at end of file From cda0b793d71d098f19ac9d855d83c825f133114a Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Wed, 18 Sep 2024 12:07:17 +0200 Subject: [PATCH 370/539] #06 php --- Roadmap/06 - RECURSIVIDAD/php/eulogioep.php | 64 +++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 Roadmap/06 - RECURSIVIDAD/php/eulogioep.php diff --git a/Roadmap/06 - RECURSIVIDAD/php/eulogioep.php b/Roadmap/06 - RECURSIVIDAD/php/eulogioep.php new file mode 100644 index 0000000000..bf07ac2253 --- /dev/null +++ b/Roadmap/06 - RECURSIVIDAD/php/eulogioep.php @@ -0,0 +1,64 @@ + \ No newline at end of file From ba7293973bd074c0a3d594733ecbdbce9e7d7a43 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Wed, 18 Sep 2024 12:08:46 +0200 Subject: [PATCH 371/539] #06 typescript --- .../06 - RECURSIVIDAD/typescript/eulogioep.ts | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Roadmap/06 - RECURSIVIDAD/typescript/eulogioep.ts diff --git a/Roadmap/06 - RECURSIVIDAD/typescript/eulogioep.ts b/Roadmap/06 - RECURSIVIDAD/typescript/eulogioep.ts new file mode 100644 index 0000000000..73c24f15bd --- /dev/null +++ b/Roadmap/06 - RECURSIVIDAD/typescript/eulogioep.ts @@ -0,0 +1,59 @@ +/** + * Función recursiva para imprimir números del 100 al 0. + * @param numero El número actual a imprimir. + */ +function imprimirNumeros(numero: number): void { + // Caso base: si el número es menor que 0, terminamos la recursión + if (numero < 0) { + return; + } + + // Imprimimos el número actual + console.log(numero); + + // Llamada recursiva con el número decrementado + imprimirNumeros(numero - 1); +} + +/** + * Función recursiva para calcular el factorial de un número. + * @param n El número del cual calcular el factorial. + * @returns El factorial del número. + */ +function factorial(n: number): number { + // Casos base: factorial de 0 y 1 es 1 + if (n === 0 || n === 1) { + return 1; + } + + // Llamada recursiva: n * factorial(n-1) + return n * factorial(n - 1); +} + +/** + * Función recursiva para calcular el valor de un elemento en la sucesión de Fibonacci. + * @param posicion La posición del elemento en la sucesión de Fibonacci. + * @returns El valor del elemento en la posición dada. + */ +function fibonacci(posicion: number): number { + // Casos base: posiciones 0 y 1 de Fibonacci son 0 y 1 respectivamente + if (posicion === 0) { + return 0; + } + if (posicion === 1) { + return 1; + } + + // Llamada recursiva: suma de los dos elementos anteriores + return fibonacci(posicion - 1) + fibonacci(posicion - 2); +} + +// Pruebas de las funciones +console.log("Números del 100 al 0:"); +imprimirNumeros(100); + +const numeroFactorial: number = 5; +console.log(`\nFactorial de ${numeroFactorial}: ${factorial(numeroFactorial)}`); + +const posicionFibonacci: number = 7; +console.log(`Elemento en la posición ${posicionFibonacci} de Fibonacci: ${fibonacci(posicionFibonacci)}`); \ No newline at end of file From f9b036e9084b5018aa6e82f792775c73bc2af0c9 Mon Sep 17 00:00:00 2001 From: Mario Barbero Date: Wed, 18 Sep 2024 13:13:55 +0200 Subject: [PATCH 372/539] Reto #9 - Python --- Roadmap/09 - HERENCIA/python/elbarbero.py | 114 ++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 Roadmap/09 - HERENCIA/python/elbarbero.py diff --git a/Roadmap/09 - HERENCIA/python/elbarbero.py b/Roadmap/09 - HERENCIA/python/elbarbero.py new file mode 100644 index 0000000000..db55f39b6d --- /dev/null +++ b/Roadmap/09 - HERENCIA/python/elbarbero.py @@ -0,0 +1,114 @@ +""" + * EJERCICIO: + * Explora el concepto de herencia según tu lenguaje. Crea un ejemplo que + * implemente una superclase Animal y un par de subclases Perro y Gato, + * junto con una función que sirva para imprimir el sonido que emite cada Animal. + * + * DIFICULTAD EXTRA (opcional): + * Implementa la jerarquía de una empresa de desarrollo formada por Empleados que + * pueden ser Gerentes, Gerentes de Proyectos o Programadores. + * Cada empleado tiene un identificador y un nombre. + * Dependiendo de su labor, tienen propiedades y funciones exclusivas de su + * actividad, y almacenan los empleados a su cargo. + """ + +class Animal: + def __init__(self, name, sound): + self.name = name + self.sound = sound + + def printSound(self): + print(f"El animal llamado {self.name} hace {self.sound}") + + +class Perro(Animal): + def __init__(self, name, sound): + super().__init__(name, sound) + + +class Gato(Animal): + def __init__(self, name, sound): + super().__init__(name, sound) + + +# DIFICULTAD EXTRA +class Empresa: + def __init__(self, name, year_creation, employees = []): + self.name = name + self.year_creation = year_creation + self.employees = [] + if employees is not None: + for e in employees: + self.employees.append(e) + + def showEmployees(self): + if len(self.employees): + print("--------LISTA DE EMPLEADOS--------") + print('\n'.join(str(f"- {e}") for e in self.employees)) + else: + print(f"La empresa {self.name} no tiene empleados") + +class Empleado: + def __init__(self, oid, name, category): + self.oid = oid + self.name = name + self.category = category + + def __str__(self): + return f"El empleado {self.name} tiene la categoría de {self.category}" + +class Gerente(Empleado): + def __init__(self, oid, name, employees = []): + super().__init__(oid, name, "Gerente") + self.employees = [] + if employees is not None: + for e in employees: + self.employees.append(e) + + def showEmployees(self): + if len(self.employees): + print("--------LISTA DE EMPLEADOS--------") + print('\n'.join(str(f"- {e}") for e in self.employees)) + else: + print(f"El empleado {self.name} no tiene empleados a su cargo") + +class GetenteProyectos(Empleado): + def __init__(self, oid, name, proyectos = []): + super().__init__(oid, name, "Gerente de proyectos") + self.proyectos = [] + if proyectos is not None: + for p in proyectos: + self.proyectos.append(p) + + def showProyects(self): + print(f"El empleado {self.name} tiene los siguientes proyectos a su cargo:") + print(self.proyectos) + + +class Programador(Empleado): + def __init__(self, oid, name, len_prog): + super().__init__(oid, name, "Programador") + self.leng_prog = len_prog + + def coding(self): + print(f"El empleado {super().name} ha empezado a picar código en {self.leng_prog}") + + +if __name__ == "__main__": + + print("----------------------CLASE----------------------------") + miPerro = Perro("Kala", "guau") + miGato = Gato("Michi", "miau") + + miPerro.printSound() + miGato.printSound() + + # DIFICULTAD EXTRA + developers = [GetenteProyectos(3, "Lucia Domingo Anaya", ["ERP", "Pagina Web"]), Programador(2, "Mario Garcia Arnaiz", "c#"), Programador(4, "Ana Gonzalez Diez", "python")] + all_employees = [Gerente(1, "Juan Lopez Ramirez", developers)] + all_employees.extend(developers) + miEMpresa = Empresa("PEPITO S.L.", 2019, all_employees) + miEMpresa.showEmployees() + print(all_employees[0].showEmployees()) + print(all_employees[1].showProyects()) + From fdb77e93cf98fb0115bad4d004aa23f34496f3a2 Mon Sep 17 00:00:00 2001 From: Mario Barbero Date: Wed, 18 Sep 2024 13:14:22 +0200 Subject: [PATCH 373/539] Reto #10 - Python --- Roadmap/10 - EXCEPCIONES/python/elbarbero.py | 54 ++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Roadmap/10 - EXCEPCIONES/python/elbarbero.py diff --git a/Roadmap/10 - EXCEPCIONES/python/elbarbero.py b/Roadmap/10 - EXCEPCIONES/python/elbarbero.py new file mode 100644 index 0000000000..2dc326ef7c --- /dev/null +++ b/Roadmap/10 - EXCEPCIONES/python/elbarbero.py @@ -0,0 +1,54 @@ +""" + * EJERCICIO: + * Explora el concepto de manejo de excepciones según tu lenguaje. + * Fuerza un error en tu código, captura el error, imprime dicho error + * y evita que el programa se detenga de manera inesperada. + * Prueba a dividir "10/0" o acceder a un índice no existente + * de un listado para intentar provocar un error. + * + * DIFICULTAD EXTRA (opcional): + * Crea una función que sea capaz de procesar parámetros, pero que también + * pueda lanzar 3 tipos diferentes de excepciones (una de ellas tiene que + * corresponderse con un tipo de excepción creada por nosotros de manera + * personalizada, y debe ser lanzada de manera manual) en caso de error. + * - Captura todas las excepciones desde el lugar donde llamas a la función. + * - Imprime el tipo de error. + * - Imprime si no se ha producido ningún error. + * - Imprime que la ejecución ha finalizado. + """ +import random + +class MyCustomException(Exception): + def __init__(self, msg): + self.message = msg + + def __str__(self): + return f"{self.message}" + + +def myFunction(): + try: + value = int(input("Introduce texto: ")) + if value == 0: + raise MyCustomException("No se puede dividir por cero chaval") + l = ["a", 3] + r_value = random.choice(l) + print(4 + 5 / (value + r_value)) + except ValueError as ex: + print("Debe introducir un número\n" + str(ex)) + except TypeError as ex: + print("Debe introducir un número para realizar la operación\n" + str(ex)) + else: + print("Ha salido todo bien") + + + +if __name__ == "__main__": + + try: + print(10/0) + except ZeroDivisionError as ex: + print(ex) + + myFunction() + From ee8b8e488272f9abae245db061bc455b5c5466f6 Mon Sep 17 00:00:00 2001 From: TizoG Date: Wed, 18 Sep 2024 13:14:47 +0200 Subject: [PATCH 374/539] # 00 - JavaScript --- .../javascript/TizoG.js | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/TizoG.js diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/TizoG.js b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/TizoG.js new file mode 100644 index 0000000000..f3c1c1f167 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/TizoG.js @@ -0,0 +1,52 @@ + +/* + * - Crea un comentario en el código y coloca la URL del sitio web oficial del + * lenguaje de programación que has seleccionado +*/ +// Sitio web oficial de JavaScript -> https://developer.mozilla.org/es/docs/Web/JavaScript + + +/* +* - Representa las diferentes sintaxis que existen de crear comentarios +* en el lenguaje (en una línea, varias...).*/ +/* +Esto es +un comentario +en varias +lineas +*/ + + +// * - Crea una variable (y una constante si el lenguaje lo soporta). +/* +Var -> Variable Global. +let -> Variable Local. +*/ + +var variableGlobal = "Esto es una variable global." +let variableLocal = "Estos es una variable local." + +// Const -> Constantes. +const constante = "Esto es una constante." + + +/* +* - Crea variables representando todos los tipos de datos primitivos + * del lenguaje (cadenas de texto, enteros, booleanos...). +*/ + +// Datos Primitivos. +let entero = 1 // Number +let conDecimal = 3.12 // Decimal +let texto1 = "Hola Mundo" // String +let verdaddero = true // Boolean +let falso = false // Boolean +let noDefinido +let unDefined = undefined // Undefined +let conPrecision = 9862534839n //BigInt +let nulo = null // null + + +// * - Imprime por terminal el texto: "¡Hola, [y el nombre de tu lenguaje]!" + +console.log("¡Hola, JavaScript!") \ No newline at end of file From aa1c757d3393c6d4c1736833012e113d2fd1cf25 Mon Sep 17 00:00:00 2001 From: Johanna Palo Date: Wed, 18 Sep 2024 08:40:55 -0300 Subject: [PATCH 375/539] #02 - javascript --- .../javascript/joapalobael.js | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/javascript/joapalobael.js diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/javascript/joapalobael.js b/Roadmap/02 - FUNCIONES Y ALCANCE/javascript/joapalobael.js new file mode 100644 index 0000000000..d24de8c173 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/javascript/joapalobael.js @@ -0,0 +1,72 @@ +//---------------------------------------- > +function funcion_simple() { + let varLocal = "función simple" + console.log(`Esto es una ${varLocal} y sin parámetro utilizando una variable local`); +} +funcion_simple(); +//----------------------------------------> +function funcion_simpleParametro(a, b) { + return a + b; +} +console.log(`Esto es una función simple, con parámetro y retorno: ${funcion_simpleParametro(3, 4)}.`); +//----------------------------------------> +let funcion_flecha = () => console.log("Esto es una función flecha simple"); +funcion_flecha(); +//----------------------------------------> +let funcion_flechaParametro = (cant) => console.log(`Esto es una función flecha con parámetro: ${cant}.`) +funcion_flechaParametro(3); +//----------------------------------------> +const nombreCriatura = "Roberto" +function vivir() { + let llamar = () => console.log(`Hola, me llamo ${nombreCriatura} y soy una función dentro de una función con variable global.`) + let respirar = () => console.log("Respiro"); + let alimentar = () => console.log("Me alimento"); + let morir = () => console.log("Muero") + return llamar(), respirar(), alimentar(), morir(); +} +vivir(); +//----------------------------------------> +console.log("Soy una función propia del lenguaje // Built-in") +console.log(("Soy la función lenght // Built-in").length); +//----------------------------------------> +// ABSTRACCIÓN EJERCICIO EXTRA +/* Inicio + Crear una función ejercicioExtra que reciba 2 parámetros (a,b) { + setear contador en 0 + Crear un bucle contador que vaya del 1 al 100 teniendo en cuenta que{ + SI (el número es multiplo de 3 Y de 5){ + muestre el texto a concatenado con el b} + SI (el número del contador es multiplo de 3) { + muestre el parametro a} + SI (el número del contador es multiplo de 5) { + muestre el parametro b} + ELSE { + Mostrar por consola el index + Incrementar el contador + } + } + Retornar el contador + } + + Mostrar por consola el retorno de la función => console.log(ejercicioExtra(fizz, buzz)); +Fin */ + +function ejercicioExtra(a, b) { + let counter = 0; + for (let i = 1; i <= 100; i++) { + if (i % 3 === 0 && i % 5 === 0) { + console.log(`${a} ${b}`) + } else if (i % 3 === 0) { + console.log(a) + } else if (i % 5 === 0) { + console.log(b) + } else { + console.log(i); + counter++; + } + } + console.log(`Se mostraron números ${counter} veces`); + // Si no pongo retorno, da indefinida la función + return counter; +} +ejercicioExtra('Fizz', 'Buzz'); \ No newline at end of file From 0e9c9e48fdb47e6995ec0e88d7c97f927e76d1cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Wed, 18 Sep 2024 13:45:41 +0200 Subject: [PATCH 376/539] retos 00, 01, 02, 03 --- .../c/d1d4cdev.c | 18 -- .../c/d1d4cum.c | 34 +++ .../c/{d1d4cdev.c => d1d4cum.c} | 0 .../c/{d1d4cdev.c => d1d4cum.c} | 0 Roadmap/03 - ESTRUCTURAS DE DATOS/c/d1d4cum.c | 276 ++++++++++++++++++ 5 files changed, 310 insertions(+), 18 deletions(-) delete mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cdev.c create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cum.c rename Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/{d1d4cdev.c => d1d4cum.c} (100%) rename Roadmap/02 - FUNCIONES Y ALCANCE/c/{d1d4cdev.c => d1d4cum.c} (100%) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/c/d1d4cum.c diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cdev.c b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cdev.c deleted file mode 100644 index f930b0aba3..0000000000 --- a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cdev.c +++ /dev/null @@ -1,18 +0,0 @@ -#include - - -// https://www.w3schools.com/c/index.php -// Comentario de una sola línea -/* -Comentario -de varias -líneas -*/ - -int age = 28; -const char letter = 'D'; - -int main() { - printf("¡Hola, C!\n"); - return 0; -} diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cum.c b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cum.c new file mode 100644 index 0000000000..4afa1a5dd7 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c/d1d4cum.c @@ -0,0 +1,34 @@ +#include +#include + +// https://www.w3schools.com/c/index.php +// Comentario de una sola línea +/* +Comentario +de varias +líneas +*/ + +int age = 28; +const char letter = 'D'; + +// Tipos de datos +char caracter = 'A'; +int numero = 10; +float decimalPequeño = 10.191283; +double decimalGrande = 10.192845671829345; +bool boolean = true; + +int main() { + printf("¡Hola, C!\n"); + printf("%c\n", caracter); + printf("%d\n", numero); + printf("%f\n", decimalPequeño); + printf("%.1f\n", decimalPequeño); + printf("%.2f\n", decimalPequeño); + printf("%lf\n", decimalGrande); + printf("%.1lf\n", decimalGrande); + printf("%.2lf\n", decimalGrande); + + return 0; +} diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/d1d4cdev.c b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/d1d4cum.c similarity index 100% rename from Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/d1d4cdev.c rename to Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c/d1d4cum.c diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/c/d1d4cdev.c b/Roadmap/02 - FUNCIONES Y ALCANCE/c/d1d4cum.c similarity index 100% rename from Roadmap/02 - FUNCIONES Y ALCANCE/c/d1d4cdev.c rename to Roadmap/02 - FUNCIONES Y ALCANCE/c/d1d4cum.c diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/c/d1d4cum.c b/Roadmap/03 - ESTRUCTURAS DE DATOS/c/d1d4cum.c new file mode 100644 index 0000000000..b10ba7aeec --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/c/d1d4cum.c @@ -0,0 +1,276 @@ +#include +#include +#include +#include +#include +#include + +/* +//---------------- Array +int numbers[] = {0, 1, 2, 3, 4, 5}; + +// Acceder a un elemento +printf("%d\n", numbers[2]); + +// Cambiar un elemento +numbers[2] = 7; +printf("%d\n", numbers[2]); + +// Iterar +printf("{"); +for (int i = 0; i < 6; i++) { + printf("%d, ", numbers[i]); +} +printf("}\n"); + +// Iniciar con tamaño fijo +int fourNumbers[4]; +fourNumbers[0] = 0; +fourNumbers[1] = 1; +fourNumbers[2] = 2; +fourNumbers[3] = 3; + +// Tamaño del array +int length = sizeof(fourNumbers) / sizeof(fourNumbers[0]); +printf("%d\n", length); + +//Multidimensional +int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; + +for (int i = 0; i < 3; i++) { + + for (int j = 0; j < 3; j++) { + printf("%d, ", matrix[i][j]); + } + printf("\n"); +} + +//------------------ Structs +struct myStructure { + int number; + char character; +}; + +struct myStructure s1; +s1.character = 'A'; +s1.number = 10; +printf("%c\n", s1.character); +printf("%d\n", s1.number); + +//------------- Enumeration +enum Level { + LOW, + MEDIUM, + HIGH +}; + + +enum Level { + LOW = 25, + MEDIUM = 50, + HIGH = 75 +}; + +enum Level myLevel1 = LOW; +enum Level myLevel2 = MEDIUM; +enum Level myLevel3 = HIGH; +printf("%d\n", myLevel1); +printf("%d\n", myLevel2); +printf("%d\n", myLevel3); +*/ + +#define MAX_CONTACTS 100 +#define MAX_NAME_LENGTH 100 + +struct Contact { + int number; + char name[MAX_NAME_LENGTH]; +}; + +struct Contact contacts[MAX_CONTACTS]; +int contactCount = 0; + +void clearInputBuffer() { + int c; + while ((c = getchar()) != '\n' && c != EOF); +} + +void removeElement(struct Contact arr[], int index) { + if (index < 0 || index >= MAX_CONTACTS) { + printf("Índice fuera de rango\n"); + return; + } + + // Desplazar los elementos posteriores hacia adelante + for (int i = index; i < MAX_CONTACTS - 1; i++) { + arr[i] = arr[i + 1]; + } + + // Inicializar el último elemento a valores predeterminados + arr[contactCount - 1].number = 0; + arr[contactCount - 1].name[0] = '\0'; + + contactCount--; + } + +struct Contact search() { + char contactName[MAX_NAME_LENGTH]; + struct Contact contact = {0, ""}; + + clearInputBuffer(); + + printf("\nIntroduce el nombre del contacto: "); + if (fgets(contactName, sizeof(contactName), stdin) == NULL) { + fprintf(stderr, "\nError al leer el nombre\n"); + } + + // Eliminar el carácter de nueva línea al final de la cadena + size_t len = strlen(contactName); + if (len > 0 && contactName[len - 1] == '\n') { + contactName[len - 1] = '\0'; + } + + for (int i = 0; i < MAX_CONTACTS; i++) { + if (strcmp(contacts[i].name, contactName) == 0) { + contact = contacts[i]; + break; + } + } + + return contact; +} + +int addContact() { + if (contactCount >= MAX_CONTACTS) { + fprintf(stderr, "\nNo se pueden añadir más contactos\n"); + return 1; + } + + struct Contact contact; + char contactName[MAX_NAME_LENGTH]; + int contactNumber; + + clearInputBuffer(); + + printf("\nIntroduce el nombre del contacto: "); + if (fgets(contactName, sizeof(contactName), stdin) == NULL) { + fprintf(stderr, "\nError al leer el nombre\n"); + return 1; + } + + // Eliminar el carácter de nueva línea al final de la cadena + size_t len = strlen(contactName); + if (len > 0 && contactName[len - 1] == '\n') { + contactName[len - 1] = '\0'; + } + + // Solicitar el número del contacto + printf("Introduce el número del contacto: "); + if (scanf("%d", &contactNumber) != 1) { + fprintf(stderr, "\nError al leer el número\n"); + clearInputBuffer(); + return 1; + } + + strcpy(contact.name, contactName); + contact.number = contactNumber; + + contacts[contactCount++] = contact; + printf("Contacto añadido correctamente\n"); + + return 0; +} + +int update() { + int contactNumber; + struct Contact contact = search(); + + // Solicitar el nuevo número del contacto + printf("Introduce el nuevo número del contacto: "); + if (scanf("%d", &contactNumber) != 1) { + fprintf(stderr, "\nError al leer el número\n"); + clearInputBuffer(); + return 1; + } + + if (contact.number) { + for (int i = 0; i < MAX_CONTACTS; i++) { + if (strcmp(contacts[i].name, contact.name) == 0) { + contacts[i].number = contactNumber; + printf("Contacto actualizado\n"); + break; + } + } + } else { + printf("El contacto no existe\n"); + } + + return 0; +} + +int removeContact() { + struct Contact contact = search(); + + if (contact.number) { + for (int i = 0; i < MAX_CONTACTS; i++) { + if (strcmp(contacts[i].name, contact.name) == 0) { + removeElement(contacts, i); + printf("Contacto eliminado\n"); + break; + } + } + } else { + printf("El contacto no existe\n"); + } + + return 0; +} + +int main() { + + int choice; + bool finish = false; + struct Contact contact; + + while (!finish) { + printf("\nQué dese hacer?:\n"); + printf("1- Buscar\n"); + printf("2- Añadir\n"); + printf("3- Actualizar\n"); + printf("4- Eliminar\n"); + printf("5- Salir\n"); + + if (scanf("%d", &choice) != 1) { + fprintf(stderr, "\n⚠️ Opción incorrecta\n"); + } + + switch (choice) { + case 1: + contact = search(); + if (contact.number) { + printf("%s - %d\n", contact.name, contact.number); + } else { + printf("No existe el contacto\n"); + } + break; + case 2: + addContact(); + break; + case 3: + update(); + break; + case 4: + removeContact(); + break; + case 5: + finish = true; + printf("👋 Hasta pronto"); + break; + default: + printf("\n⚠️ Opción incorrecta\n"); + } + } + + + return 0; +} From 3f3477a229c58abb337a40c92f3e2f0618c0c928 Mon Sep 17 00:00:00 2001 From: TizoG Date: Wed, 18 Sep 2024 15:27:53 +0200 Subject: [PATCH 377/539] # 00 - Python --- .../python/TizoG.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/TizoG.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/TizoG.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/TizoG.py new file mode 100644 index 0000000000..39c0db3ea8 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/TizoG.py @@ -0,0 +1,21 @@ +# https://python.org + +# Comentario en una linea + +''' +Esto es un +comentario en +varias lineas +''' + +my_variable = "Esto es una variable" + +MY_CONSTANTE = "Esto es una constante" + +my_int = 1 +my_float = 1.1 +my_boolean = True +my_boolean = False +my_string = "Cadena de texto" + +print("¡Hola, Python!") \ No newline at end of file From caf6a3a73233ee383047c37ab0b718e8a419f2e6 Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Wed, 18 Sep 2024 16:37:21 +0200 Subject: [PATCH 378/539] =?UTF-8?q?Correcci=C3=B3n=20Roadmap=2037=20en=20v?= =?UTF-8?q?=C3=ADdeo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5431e70618..fbeae21deb 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ |34|[ÁRBOL GENEALÓGICO DE LA CASA DEL DRAGÓN](./Roadmap/34%20-%20ÁRBOL%20GENEALÓGICO%20LA%20CASA%20DEL%20DRAGÓN/ejercicio.md)|[📝](./Roadmap/34%20-%20ÁRBOL%20GENEALÓGICO%20LA%20CASA%20DEL%20DRAGÓN/python/mouredev.py)|[▶️](https://youtu.be/GAHBOAzgE2w)|[👥](./Roadmap/34%20-%20ÁRBOL%20GENEALÓGICO%20LA%20CASA%20DEL%20DRAGÓN/) |35|[REPARTIENDO LOS ANILLOS DE PODER](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/ejercicio.md)|[📝](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/python/mouredev.py)|[▶️](https://youtu.be/10i2dnaMLj8)|[👥](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/) |36|[EL SOMBRERO SELECCIONADOR](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/ejercicio.md)|[📝](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/python/mouredev.py)|[▶️](https://youtu.be/_UjOD587elY)|[👥](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/) -|37|[OASIS VS LINKIN PARK](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/ejercicio.md)|[📝](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/python/mouredev.py)||[👥](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/) +|37|[OASIS VS LINKIN PARK](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/ejercicio.md)|[📝](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/python/mouredev.py)|[▶️](https://youtu.be/q-zBKriHupY)|[👥](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/) |38|[MOUREDEV PRO](./Roadmap/38%20-%20MOUREDEV%20PRO/ejercicio.md)|[🗓️ 23/09/24](https://discord.gg/xeebRweK?event=1283082037917519985)||[👥](./Roadmap/38%20-%20MOUREDEV%20PRO/) ## Cursos en YouTube From 382514f9809f79fcfb38181653b6d7107ab5e1ce Mon Sep 17 00:00:00 2001 From: Ignacio Esteves <149106695+NachitoE@users.noreply.github.com> Date: Wed, 18 Sep 2024 12:17:05 -0300 Subject: [PATCH 379/539] #37 - C# --- .../37 - OASIS VS LINKIN PARK/c#/NachitoE.cs | 319 ++++++++++++++++++ 1 file changed, 319 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/c#/NachitoE.cs diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/c#/NachitoE.cs b/Roadmap/37 - OASIS VS LINKIN PARK/c#/NachitoE.cs new file mode 100644 index 0000000000..73392734f8 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/c#/NachitoE.cs @@ -0,0 +1,319 @@ +using System; +using System.Diagnostics.Metrics; +using System.Security.Cryptography; +using System.Text; +using System.Text.Json; +using System.Text.Json.Nodes; +using System.Text.Json.Serialization; + +/* + * EJERCICIO: + * ¡Dos de las bandas más grandes de la historia están de vuelta! + * Oasis y Linkin Park han anunciado nueva gira, pero, ¿quién es más popular? + * Desarrolla un programa que se conecte al API de Spotify y los compare. + * Requisitos: + * 1. Crea una cuenta de desarrollo en https://developer.spotify.com. + * 2. Conéctate al API utilizando tu lenguaje de programación. + * 3. Recupera datos de los endpoint que tú quieras. + * Acciones: + * 1. Accede a las estadísticas de las dos bandas. + * Por ejemplo: número total de seguidores, escuchas mensuales, + * canción con más reproducciones... + * 2. Compara los resultados de, por lo menos, 3 endpoint. + * 3. Muestra todos los resultados por consola para notificar al usuario. + * 4. Desarrolla un criterio para seleccionar qué banda es más popular. + */ + +public class Program +{ + static async Task Main() + { + string clientId = Environment.GetEnvironmentVariable("SPOTIFY_CLIENT_ID"); + string clientSecret = Environment.GetEnvironmentVariable("SPOTIFY_CLIENT_SECRET"); + SpotifyAPI api = new SpotifyAPI(clientId, clientSecret); + List bandsIDs = new List(); + List defaultbandIDs = ["2DaxqgrOhkeH0fpeiQq2f4", "6XyY86QOPPrYVGvF9ch6wz"]; + string token = await api.GetAuthToken(); + if (token == "") + { + Console.WriteLine("Invalid Token. Check if ClientID and ClientSecret are correctly written."); + return; + } + + Console.WriteLine("Write your desired band ID and press Enter.\nIf you don't want to add any more bands, just press Enter.\nNOTE : By default this program will compare Linkin Park against Oasis."); + Console.Write("Write your band ID (or just Enter if you want to go with Linking Park and Oasis): "); + string newBandId = Console.ReadLine(); + while (newBandId != "" || bandsIDs.Count < 2) + { + newBandId = newBandId.Trim(); + if (newBandId == "" && bandsIDs.Count == 0) //Going with Linkin Park and Oasis + { + bandsIDs = defaultbandIDs; + break; + } + else if (newBandId == "" && bandsIDs.Count > 1) break; //User has written more than 1 band + else if (newBandId == "" && bandsIDs.Count == 1) Console.WriteLine("Please enter at least one more band before proceeding"); + + if (bandsIDs.Contains(newBandId)) + { + Console.WriteLine("You've already added that band. Please add another one."); + } + else + { + string? json = await api.GetArtistInfo(newBandId, token); + if (json != null) bandsIDs.Add(newBandId); + else Console.WriteLine("Invalid band ID. Please check for typos."); + } + + + Console.Write("Write your band ID"); + //If user has written more than 1 band, inform him that he can continue + if (bandsIDs.Count > 1) Console.Write(" (or just Enter to proceed)"); + Console.Write(": "); + + newBandId = Console.ReadLine(); + } + + //We'll be storing the artists data here + List artistsData = new List(); + + foreach (string bandId in bandsIDs) + { + int accumPopularity = 0; + + //Get artist's name and number of followers + string artistJsonString = await api.GetArtistInfo(bandId, token); + Artist artist = JsonSerializer.Deserialize(artistJsonString); + + Console.ForegroundColor = ConsoleColor.DarkGreen; + Console.WriteLine($"\n~~~~~BAND: {artist.Name}~~~~~"); + Console.ForegroundColor = ConsoleColor.White; + + Console.WriteLine($"\n{artist.Name} has {artist.Followers.TotalFollowers} followers."); + accumPopularity += ((int)(artist.Followers.TotalFollowers * 0.00001)); + + //Get top tracks + string topTracksJsonString = await api.GetTopTracksInfo(bandId, token); + + TopTracks topTracks = JsonSerializer.Deserialize(topTracksJsonString); + //Get Popularity of the last 10 tracks + Console.WriteLine($"\nWriting Top 10 Tracks for {artist.Name}"); + int i = 0; + foreach (TrackObject track in topTracks.trackObjects) + { + Console.WriteLine($"The track called {track.Name} has {track.Popularity} popularity"); + accumPopularity += track.Popularity; + i++; + if (i >= 10) break; + } + + //Get Albums + string AlbumsJsonString = await api.GetAlbumsInfo(bandId, token); + + Albums simplifiedAlbums = JsonSerializer.Deserialize(AlbumsJsonString); + List albums = new List(); + + + foreach (SimplifiedAlbumObject sAlbum in simplifiedAlbums.AlbumObjects) + { + //Get Albums from SimplifiedAlbumObject, append them to an array + string albumJsonString = await api.GetAlbumInfo(sAlbum.Id, token); + Album album = JsonSerializer.Deserialize(albumJsonString); + + + albums.Add(album); + } + List sortedAlbums = albums.OrderByDescending(x => x.Popularity).ToList(); + + + Album? mostFamousAlbum = null; + Console.WriteLine($"\nWriting Top 10 Albums for {artist.Name}"); + i = 0; + foreach (Album album in sortedAlbums) + { + if (mostFamousAlbum == null || album.Popularity > mostFamousAlbum.Popularity) mostFamousAlbum = album; + Console.WriteLine($"The album called {album.Name} has {album.Popularity} popularity"); + accumPopularity += album.Popularity; + i++; + if (i >= 10) break; + } + + ArtistData artistData = new ArtistData(bandId, artist.Name, artist.Followers.TotalFollowers, accumPopularity, mostFamousAlbum.Name); + artistsData.Add(artistData); + } + + //Sort by popularity, pick the most famous one + List sortedArtists = artistsData.OrderByDescending(x => x.Popularity).ToList(); + ArtistData mostFamousArtist = sortedArtists.First(); + + Console.WriteLine($"\nThe most famous artist is {mostFamousArtist.Name}! (https://open.spotify.com/artist/{mostFamousArtist.Id})\nHe has the incredible amount of {mostFamousArtist.Followers} followers and his current most famous album is {mostFamousArtist.MostFamousAlbumName}"); + } +} + +public class SpotifyAPI +{ + const string APIURL = "https://accounts.spotify.com/api/token"; + private string _clientId; + private string _clientSecret; + HttpClient httpClient; + + public SpotifyAPI(string clientId, string clientSecret) + { + httpClient = new HttpClient(); + _clientId = clientId; + _clientSecret = clientSecret; + } + + public async Task GetArtistInfo(string artistId, string token) + { + //Create url + var url = $"https://api.spotify.com/v1/artists/{artistId}"; + var rString = await GetJSONStringFromGETRequest(url, token); + + return rString; + } + + public async Task GetTopTracksInfo(string artistId, string token) + { + var url = $"https://api.spotify.com/v1/artists/{artistId}/top-tracks"; + var rString = await GetJSONStringFromGETRequest(url, token); + + return rString; + } + public async Task GetAlbumsInfo(string artistId, string token) + { + var url = $"https://api.spotify.com/v1/artists/{artistId}/albums"; + var rString = await GetJSONStringFromGETRequest(url, token); + + return rString; + } + + public async Task GetAlbumInfo(string artistId, string token) + { + var url = $"https://api.spotify.com/v1/albums/{artistId}"; + var rString = await GetJSONStringFromGETRequest(url, token); + + return rString; + } + + public async Task GetJSONStringFromGETRequest(string url, string token) + { + //send GET request + var r = await CreateGETRequestAtUrl(url, token); + if (r == null) return null; + + //Make response "r" a String + string responseStr = await r.Content.ReadAsStringAsync(); + return responseStr; + } + + public async Task CreateGETRequestAtUrl(string url, string token) + { + //Set Headers + httpClient.DefaultRequestHeaders.Clear(); + httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}"); + HttpResponseMessage response = await httpClient.GetAsync(url); + if (response.IsSuccessStatusCode) + { + return response; + } + return null; + } + + public async Task GetAuthToken() + { + //Format to Base64, grant_type to client_credentials + string authHeader = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{_clientId}:{_clientSecret}")); + var requestKey = new List> + { + new KeyValuePair("grant_type", "client_credentials") + }; + + httpClient.DefaultRequestHeaders.Clear(); + httpClient.DefaultRequestHeaders.Add("Authorization", $"Basic {authHeader}"); + + //Encode requestKey + FormUrlEncodedContent content = new FormUrlEncodedContent(requestKey); + + HttpResponseMessage response = await httpClient.PostAsync(APIURL, content); + if (response.IsSuccessStatusCode) + { + string responseStr = await response.Content.ReadAsStringAsync(); + Console.WriteLine(response.StatusCode); + + //Deserialize to dict + var responseDict = JsonSerializer.Deserialize>(responseStr); + return responseDict["access_token"].ToString(); + } + + Console.WriteLine($"Error: {response.StatusCode}"); + return ""; + } +} + + +public class Artist +{ + [JsonPropertyName("name")] + public string Name { get; set; } + [JsonPropertyName("followers")] + public Followers Followers { get; set; } +} + +public class Followers +{ + [JsonPropertyName("total")] + public int TotalFollowers { get; set; } +} + +public class TopTracks +{ + [JsonPropertyName("tracks")] + public TrackObject[] trackObjects { get; set; } +} + +public class TrackObject +{ + [JsonPropertyName("name")] + public string Name { get; set; } + [JsonPropertyName("popularity")] + public int Popularity { get; set; } +} + +public class Albums +{ + [JsonPropertyName("items")] + public SimplifiedAlbumObject[] AlbumObjects { get; set; } +} + +public class SimplifiedAlbumObject +{ + [JsonPropertyName("id")] + public string Id { get; set; } +} + +public class Album +{ + [JsonPropertyName("name")] + public string Name { get; set; } + [JsonPropertyName("popularity")] + public int Popularity { get; set; } +} + +public class ArtistData +{ + public string Id; + public string Name; + public int Followers; + public int Popularity; + public string MostFamousAlbumName; + + public ArtistData(string id, string name, int followers, int popularity, string mostFamousAlbumName) + { + Id = id; + Name = name; + Followers = followers; + Popularity = popularity; + MostFamousAlbumName = mostFamousAlbumName; + } +} \ No newline at end of file From ab6d185662ddd04d485be7987c6cf244736834d5 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Wed, 18 Sep 2024 12:21:53 -0500 Subject: [PATCH 380/539] #13 - Java --- .../java/martinbohorquez.java | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 Roadmap/13 - PRUEBAS UNITARIAS/java/martinbohorquez.java diff --git a/Roadmap/13 - PRUEBAS UNITARIAS/java/martinbohorquez.java b/Roadmap/13 - PRUEBAS UNITARIAS/java/martinbohorquez.java new file mode 100644 index 0000000000..fbf51319c1 --- /dev/null +++ b/Roadmap/13 - PRUEBAS UNITARIAS/java/martinbohorquez.java @@ -0,0 +1,111 @@ +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * #13 PRUEBAS UNITARIAS + * + * + * org.junit.jupiter + * junit-jupiter + * 5.10.3 + * + * + * + * @author martinbohorquez + */ +public class martinbohorquez { + public static void main(String[] args) throws Exception { + System.out.println(sum(23, 19)); + } + + private static Object sum(Object a, Object b) throws Exception { + if (!(a instanceof Integer) || !(b instanceof Integer)) + throw new Exception("Los argumentos deben ser enteros positivos!"); + return ((Integer) a) + ((Integer) b); + } + + /* + * DIFICULTAD EXTRA + */ + private static Map programmer() { + Map programmer = new HashMap<>(); + programmer.put("name", "Martin"); + Integer age = 29; + programmer.put("age", String.valueOf(age)); + LocalDate birthDate = LocalDate.of(1994, 9, 26); + programmer.put("birthDate", String.valueOf(birthDate)); + ArrayList programmingLanguage = new ArrayList<>(Arrays.asList("Java", "Typescript", "Python")); + programmer.put("programmingLanguage", String.valueOf(programmingLanguage)); + return programmer; + } + + @Nested + class TestMain { + + Map data; + Map programmer = programmer(); + + @BeforeEach + void setUp() { + data = new HashMap<>(); + data.put("name", "Martin"); + Integer age = 29; + data.put("age", String.valueOf(age)); + LocalDate birthDate = LocalDate.of(1994, 9, 26); + data.put("birthDate", String.valueOf(birthDate)); + ArrayList programmingLanguage = new ArrayList<>(Arrays.asList("Java", "Typescript", "Python")); + data.put("programmingLanguage", String.valueOf(programmingLanguage)); + } + + @Test + void testSum() throws Exception { + assertEquals(37, sum(14, 23)); + assertEquals(10, sum(15, -5)); + assertEquals(25, sum(-10, 35)); + assertEquals(-15, sum(-20, 5)); + assertEquals(-5, sum(20, -25)); + assertEquals(-20, sum(-15, -5)); + } + + @Test + void testSumTypes() throws Exception { + String esperado = "Los argumentos deben ser enteros positivos!"; + Exception exceptionDouble = assertThrows(Exception.class, () -> sum(5, 2.5)); + String actual = exceptionDouble.getMessage(); + assertEquals(esperado, actual); + Exception exceptionString = assertThrows(Exception.class, () -> sum("5", 2)); + actual = exceptionString.getMessage(); + assertEquals(esperado, actual); + } + + @Test + void testMapSize() { + assertEquals(programmer.size(), data.size()); + } + + @Test + void testKeysExist() { + programmer.keySet().forEach(key -> assertTrue(data.containsKey(key))); + } + + @Test + void testValuesCorrect() { + programmer.keySet().forEach(key -> assertEquals(programmer.get(key), data.get(key))); + } + + @Test + void testValuesInstance() { + programmer.keySet().forEach(key -> assertInstanceOf(programmer.get(key).getClass(), data.get(key))); + } + + } +} From 27699640b3ae8e9a8bdd464dea8f395439da7a08 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Wed, 18 Sep 2024 13:12:31 -0500 Subject: [PATCH 381/539] #14 - Java --- Roadmap/14 - FECHAS/java/martinbohorquez.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Roadmap/14 - FECHAS/java/martinbohorquez.java diff --git a/Roadmap/14 - FECHAS/java/martinbohorquez.java b/Roadmap/14 - FECHAS/java/martinbohorquez.java new file mode 100644 index 0000000000..a03dc19bdb --- /dev/null +++ b/Roadmap/14 - FECHAS/java/martinbohorquez.java @@ -0,0 +1,60 @@ +import java.time.LocalDateTime; +import java.time.Period; +import java.time.format.DateTimeFormatter; + +/** + * #14 FECHAS + * + * @author martinbohorquez + */ +public class martinbohorquez { + + public static void main(String[] args) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime birthDate = LocalDateTime.of(1994, 9, 26, + 18, 30, 45); + System.out.printf("La fecha actual es: %s%n", now); + System.out.printf("La fecha de nacimiento es: %s%n", birthDate); + + System.out.printf("La edad es: %s%n", Period.between(birthDate.toLocalDate(), + now.toLocalDate())); + System.out.printf("La edad es: %s%n", Period.between(birthDate.toLocalDate(), + now.toLocalDate()).getYears()); + System.out.printf("Los meses son: %s%n", Period.between(birthDate.toLocalDate(), + now.toLocalDate()).getMonths()); + System.out.printf("Los días son: %s%n", Period.between(birthDate.toLocalDate(), + now.toLocalDate()).getDays()); + + /* + * DIFICULTAD EXTRA + */ + // Día, mes y año. + DateTimeFormatter f = DateTimeFormatter.ofPattern("dd/MM/yyyy"); + System.out.printf("La fecha de nacimiento (Día, mes y año) es: %s%n", + birthDate.toLocalDate().format(f)); + // Hora, minuto y segundo. + f = DateTimeFormatter.ofPattern("HH:mm:ss"); + System.out.printf("La hora de nacimiento (Hora, mínuto y segundo) es: %s%n", + birthDate.toLocalTime().format(f)); + // Día del año. + System.out.printf("La día del año de la fecha nacimiento es: %s%n", + birthDate.getDayOfYear()); + // Día del mes. + System.out.printf("El día del mes de la fecha nacimiento es: %s%n", + birthDate.getDayOfMonth()); + // Día de la semana. + System.out.printf("El día de la semana de la fecha de nacimiento (Día, mes y año) es: %s%n", + birthDate.getDayOfWeek().getValue()); + // Nombre del mes. + System.out.printf("El nombre del mes de la fecha nacimiento es: %s%n", + birthDate.getMonth().name()); + // Nombre del día de la semana. + System.out.printf("El nombre del día de la semana de la fecha de nacimiento es: %s%n", + birthDate.getDayOfWeek().name()); + + f = DateTimeFormatter.ofPattern("EE MMM dd HH:mm:ss yyyy"); + + System.out.printf("La fecha de nacimiento (Día, mes y año) es: %s%n", + birthDate.format(f).toUpperCase()); + } +} From ecbfbcbc6e3dea81e964650faeb4d4cbf98f3d5d Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 18 Sep 2024 20:47:22 +0200 Subject: [PATCH 382/539] #38 python --- .../python/javierfiestasbotella.py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/javierfiestasbotella.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/javierfiestasbotella.py b/Roadmap/38 - MOUREDEV PRO/python/javierfiestasbotella.py new file mode 100644 index 0000000000..9d9c64896b --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/javierfiestasbotella.py @@ -0,0 +1,49 @@ +''' +/* + * EJERCICIO: + * He presentado mi proyecto más importante del año: mouredev pro. + * Un campus para la comunidad, que lanzaré en octubre, donde estudiar + * programación de una manera diferente. + * Cualquier persona suscrita a la newsletter de https://mouredev.pro + * accederá a sorteos mensuales de suscripciones, regalos y descuentos. + * + * Desarrolla un programa que lea los registros de un fichero .csv y + * seleccione de manera aleatoria diferentes ganadores. + * Requisitos: + * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + * o "inactivo" (y datos ficticios). + * Ejemplo: 1 | test@test.com | activo + * 2 | test2@test.com | inactivo + * (El .csv no debe subirse como parte de la corrección) + * 2. Recupera los datos desde el programa y selecciona email aleatorios. + * Acciones: + * 1. Accede al fichero .csv y selecciona de manera aleatoria un email + * ganador de una suscripción, otro ganador de un descuento y un último + * ganador de un libro (sólo si tiene status "activo" y no está repetido). + * 2. Muestra los emails ganadores y su id. + * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + * no debe tenerse en cuenta. + */''' +import pandas as pd +import random + +df = pd.read_csv('csv.csv') +lista = [] + +for index, row in df.iterrows(): + if row['status'] == 'activo': + lista.append([row['id'], row['email']]) + +print(lista) + +premios = [] + +for _ in range(3): + p = random.choice(lista) + premios.append(p) + lista = [x for x in lista if x != p] +print(f''' +Ganador de una suscripción --> ID: {premios[0][0]}, Email: {premios[0][1]} +Ganador de un descuento --> ID: {premios[1][0]}, Email: {premios[1][1]} +Ganador de un libro --> ID: {premios[2][0]}, Email: {premios[2][1]} +''') From ca8f61b629c25d3a97375ac4fd640369539f020e Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Wed, 18 Sep 2024 14:27:01 -0500 Subject: [PATCH 383/539] Ejemplo de principio de liskop con la libreria, sin liskop --- .../26 - SOLID SRP/java/.LCKsimonguzman.java~ | 1 + .../27 - SOLID OCP/java/.LCKsimonguzman.java~ | 1 + Roadmap/28 - SOLID LSP/java/simonguzman.java | 74 +++++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100644 Roadmap/26 - SOLID SRP/java/.LCKsimonguzman.java~ create mode 100644 Roadmap/27 - SOLID OCP/java/.LCKsimonguzman.java~ create mode 100644 Roadmap/28 - SOLID LSP/java/simonguzman.java diff --git a/Roadmap/26 - SOLID SRP/java/.LCKsimonguzman.java~ b/Roadmap/26 - SOLID SRP/java/.LCKsimonguzman.java~ new file mode 100644 index 0000000000..0566afe8eb --- /dev/null +++ b/Roadmap/26 - SOLID SRP/java/.LCKsimonguzman.java~ @@ -0,0 +1 @@ +C:\Users\SIMON\Desktop\Ejercicios\roadmap-retos-programacion-1\Roadmap\26 - SOLID SRP\java\simonguzman.java \ No newline at end of file diff --git a/Roadmap/27 - SOLID OCP/java/.LCKsimonguzman.java~ b/Roadmap/27 - SOLID OCP/java/.LCKsimonguzman.java~ new file mode 100644 index 0000000000..8e841a6df4 --- /dev/null +++ b/Roadmap/27 - SOLID OCP/java/.LCKsimonguzman.java~ @@ -0,0 +1 @@ +C:\Users\SIMON\Desktop\Ejercicios\roadmap-retos-programacion-1\Roadmap\27 - SOLID OCP\java\simonguzman.java \ No newline at end of file diff --git a/Roadmap/28 - SOLID LSP/java/simonguzman.java b/Roadmap/28 - SOLID LSP/java/simonguzman.java new file mode 100644 index 0000000000..7fe592f11a --- /dev/null +++ b/Roadmap/28 - SOLID LSP/java/simonguzman.java @@ -0,0 +1,74 @@ +public class simonguzman { + public static void main(String[] args) { + libraryManagementSystemLiskovViolation(); + } + + /****************************** ejemplo sin lsp (Incorrecto) ******************************/ + public static void libraryManagementSystemLiskovViolation(){ + Book physicalBook = new Book("1984", "George Orwell", 3); + EBook ebook = new EBook("Digital Fortress", "Dan Brown", "www.download.com"); + + LoanManager loanManager = new LoanManager(); + + loanManager.borrowBook(physicalBook); + + loanManager.borrowBook(ebook); + } + + static class Book{ + private String title; + private String author; + private int copies; + + public Book(){ + + } + + public Book(String title, String author, int copies){ + this.title = title; + this.author = author; + this.copies = copies; + } + + public String getTitle() { + return title; + } + + public int getCopies() { + return copies; + } + + public void setCopies(int copies) { + this.copies = copies; + } + + public void borrow(){ + if (copies > 0){ + copies--; + System.out.println("Libro prestado: " + title); + } else { + System.out.println("No hay copias disponibles de: " + title); + } + } + } + + static class EBook extends Book { + private String downloadLink; + + public EBook(String title, String author,String downloadLink) { + super(title, author, 1); + this.downloadLink = downloadLink; + } + + @Override + public void borrow(){ + System.out.println("No se puede prestar el eBook, pero puedes descargarlo aquí: " + downloadLink); + } + } + + static class LoanManager{ + public void borrowBook(Book book){ + book.borrow(); + } + } +} From 04cf451ff73b48378aac39fe156c74d640440652 Mon Sep 17 00:00:00 2001 From: emanuelgauler Date: Wed, 18 Sep 2024 16:52:08 -0300 Subject: [PATCH 384/539] =?UTF-8?q?arm=C3=A9=20un=20script=20en=20RUBY?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../38 - MOUREDEV PRO/ruby/emanuelgauler.rb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/ruby/emanuelgauler.rb diff --git a/Roadmap/38 - MOUREDEV PRO/ruby/emanuelgauler.rb b/Roadmap/38 - MOUREDEV PRO/ruby/emanuelgauler.rb new file mode 100644 index 0000000000..6dcad2e7a7 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/ruby/emanuelgauler.rb @@ -0,0 +1,31 @@ +require 'csv' + +ACTIVE = "activo" +INACTIVE = "inactivo" + +def main participants_file + return "ERROR: Debes proporcionar un fichero CSV" if participants_file.nil? + return "ERROR: File Not Found" unless File.exist? participants_file + participants = [] + awards = ["ganador de una suscripción", "ganó un descuento", "ganó un libro"] + + CSV.foreach participants_file, headers: true do |participant_row| + participant = { + id: participant_row["id"], + email: participant_row["email"], + status: participant_row["status"] + } + participants << participant unless participant[:status] == INACTIVE + end + + winners = 3.times.map do + p = participants.shuffle!.shift + + "#{p[:id]} #{p[:email]} #{awards.shift}" + end + +end + +participants_file = ARGV.first + +puts main( participants_file ) \ No newline at end of file From 4f999579348517b8cacd56218884e4d375edfb52 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Wed, 18 Sep 2024 15:03:11 -0500 Subject: [PATCH 385/539] ejemplo de la libreria con lsp completo --- .../26 - SOLID SRP/java/.LCKsimonguzman.java~ | 1 - .../27 - SOLID OCP/java/.LCKsimonguzman.java~ | 1 - Roadmap/28 - SOLID LSP/java/simonguzman.java | 179 +++++++++++++++++- 3 files changed, 178 insertions(+), 3 deletions(-) delete mode 100644 Roadmap/26 - SOLID SRP/java/.LCKsimonguzman.java~ delete mode 100644 Roadmap/27 - SOLID OCP/java/.LCKsimonguzman.java~ diff --git a/Roadmap/26 - SOLID SRP/java/.LCKsimonguzman.java~ b/Roadmap/26 - SOLID SRP/java/.LCKsimonguzman.java~ deleted file mode 100644 index 0566afe8eb..0000000000 --- a/Roadmap/26 - SOLID SRP/java/.LCKsimonguzman.java~ +++ /dev/null @@ -1 +0,0 @@ -C:\Users\SIMON\Desktop\Ejercicios\roadmap-retos-programacion-1\Roadmap\26 - SOLID SRP\java\simonguzman.java \ No newline at end of file diff --git a/Roadmap/27 - SOLID OCP/java/.LCKsimonguzman.java~ b/Roadmap/27 - SOLID OCP/java/.LCKsimonguzman.java~ deleted file mode 100644 index 8e841a6df4..0000000000 --- a/Roadmap/27 - SOLID OCP/java/.LCKsimonguzman.java~ +++ /dev/null @@ -1 +0,0 @@ -C:\Users\SIMON\Desktop\Ejercicios\roadmap-retos-programacion-1\Roadmap\27 - SOLID OCP\java\simonguzman.java \ No newline at end of file diff --git a/Roadmap/28 - SOLID LSP/java/simonguzman.java b/Roadmap/28 - SOLID LSP/java/simonguzman.java index 7fe592f11a..50e140f138 100644 --- a/Roadmap/28 - SOLID LSP/java/simonguzman.java +++ b/Roadmap/28 - SOLID LSP/java/simonguzman.java @@ -1,6 +1,183 @@ + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + public class simonguzman { public static void main(String[] args) { - libraryManagementSystemLiskovViolation(); + //libraryManagementSystemLiskovViolation(); + libraryLSP(); + } + + /****************************** ejemplo con lsp (Correcto) ******************************/ + static void libraryLSP(){ + LibraryManager libraryManager = new LibraryManager(); + UserManager userManager = new UserManager(); + LoanManagerLsp loanManager = new LoanManagerLsp(); + + libraryManager.registerBook(new PhysicalBook("1984", "George Orwell", 3)); + libraryManager.registerBook(new EBookLsp("Clean Code", "Robert Martin")); + + userManager.registerUser("John Doe", "001", "johndoe@example.com"); + + User user = userManager.findUserById("001"); + BookLsp book1 = libraryManager.findBookByTitle("1984"); + BookLsp book2 = libraryManager.findBookByTitle("Clean Code"); + + loanManager.borrowBook(user, book1); + loanManager.borrowBook(user, book2); + + loanManager.returnBook(user, book1); + loanManager.returnBook(user, book2); + } + + static abstract class BookLsp{ + protected String title; + protected String author; + + public BookLsp(){ + + } + + public BookLsp(String title, String author){ + this.title = title; + this.author = author; + } + + public String getTitle() { + return title; + } + + public abstract boolean isAvailable(); + public abstract void borrow(); + public abstract void returnBook(); + } + + static class PhysicalBook extends BookLsp{ + private int copies; + + public PhysicalBook(){ + + } + + public PhysicalBook(String title, String author, int copies){ + super(title, author); + this.copies = copies; + } + + @Override + public boolean isAvailable(){ + return copies > 0; + } + + @Override + public void borrow(){ + if(copies > 0){ + copies--; + } + } + + @Override + public void returnBook(){ + copies++; + } + } + + static class EBookLsp extends BookLsp { + + public EBookLsp(String title, String author) { + super(title, author); + } + + @Override + public boolean isAvailable() { + return true; // Siempre disponible + } + + @Override + public void borrow() { + System.out.println("Descargando eBook..."); + } + + @Override + public void returnBook() { + System.out.println("El eBook ha sido devuelto."); + } + } + static class LibraryManager{ + private List books = new ArrayList<>(); + + public void registerBook(BookLsp book){ + books.add(book); + System.out.println("Libro registrado: " + book.getTitle()); + } + + public BookLsp findBookByTitle(String title){ + return books.stream().filter(b -> b.getTitle().equals(title)).findFirst().orElse(null); + } + } + + static class UserManager{ + private List users = new ArrayList<>(); + + public void registerUser(String name, String id, String email){ + users.add(new User(name, id, email)); + System.out.println("Usuario registrado: " + name); + } + + public User findUserById(String id){ + return users.stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null); + } + } + + static class LoanManagerLsp{ + private Map> borrowedBooks = new HashMap<>(); + + public void borrowBook(User user, BookLsp book){ + if(book.isAvailable()){ + borrowedBooks.computeIfAbsent(user, k -> new ArrayList<>()).add(book); + book.borrow(); + System.out.println("Libro prestado: " + book.getTitle() + " a " + user.getName()); + } else { + System.out.println("El libro no está disponible para préstamo."); + } + } + + public void returnBook(User user, BookLsp book) { + List borrowed = borrowedBooks.get(user); + if (borrowed != null && borrowed.contains(book)) { + borrowed.remove(book); + book.returnBook(); + System.out.println("Libro devuelto: " + book.getTitle()); + } else { + System.out.println("No se pudo devolver el libro."); + } + } + } + + static class User{ + private String name; + private String id; + private String email; + + public User(){ + + } + + public User(String name, String id, String email){ + this.name = name; + this.id = id; + this.email = email; + } + + public String getName() { + return name; + } + + public String getId() { + return id; + } } /****************************** ejemplo sin lsp (Incorrecto) ******************************/ From 03f5688d02e029099f38dcf639d64fc12caf54f3 Mon Sep 17 00:00:00 2001 From: Esteban Date: Wed, 18 Sep 2024 17:03:48 -0300 Subject: [PATCH 386/539] #00 - SINTAXIS, VARIABLES, TIPOS DE DATOS, Y HOLA MUNDO - Javascript --- .../javascript/lopesteban.js | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/lopesteban.js diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/lopesteban.js b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/lopesteban.js new file mode 100644 index 0000000000..5366e3903e --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/lopesteban.js @@ -0,0 +1,61 @@ +// ##00 - SINTAXIS, VARIABLES, TIPOS DE DATOS, Y "HOLA MUNDO"*/ + +/*EJERCICIO: +Crea un comentario en el código y coloca la URL del sitio web oficial del + lenguaje de programación que has seleccionado. */ + +//https://developer.mozilla.org/es/docs/Web/JavaScript + +/*EJERCICIO: + Representa las diferentes sintaxis que existen de crear comentarios + en el lenguaje (en una línea, varias...)*/ + +// Esta es la forma de comentar el código con una sola línea +/*Esta es la forma de comentar el código usando más de una línea. Es muy similar a otros lenguajes de programación */ + +/*EJERCICIO: + Crea una variable (y una constante si el lenguaje lo soporta) + */ + +// Variable usando "let" +let variableNueva = "Variable no constante"; + +//Variable usando "var" (en desuso) +var variableVieja = "Variale no constante vieja"; + +// Variable llamada Constante. Sólo se usa para crear una variable que no se modificará +const variableConstante = "Variable constante"; + +/*EJERCICIO: + Crea variables representando todos los tipos de datos primitivos + del lenguaje (cadenas de texto, enteros, booleanos...)*/ + +/*Los tipos de datos son la naturaleza del contenido de una variable o constante.Javascript dispone de muchos tipos de datos, sin embargo, se suelen catalogar en dos grupos: tipos de datos primitivos (básicos) y tipos de datos no primitivos (complejos). Los datos primitivos son siete*/ + +// "String" o Cadena de texto +let cadenaDeTexto = "Esteban"; + +// "Number" o valor numérico +let valorNumérico = 45; + +// "Bigint". Es un valor numérico muy grande + +let valorNumericoGrande = 50n; + +// "Boolean" o booleano: Tipo de valor "Falso" o "Verdadero" +let valorBooleanoFalso = false, + valorBooleanoVerdadero = true; + +//"Symbol": Tipo de dato para crear valores únicos. +const valorUnico = Symbol("Único"); + +// "Unefined": Valor sin definir (variable sin inicializar) +let valorIndef = undefined; + +//"Null": Representa un valor vacío o ausencia de información +let valorNulo = null; + +/*EJERCICIO: +Imprime por terminal el texto: "¡Hola, [y el nombre de tu lenguaje]!" */ + +console.log("¡Hola, Javascript!"); From 79700a295a1124d971409be4cce8206b47e60f90 Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Wed, 18 Sep 2024 15:07:26 -0500 Subject: [PATCH 387/539] ejercicio adicional sin lsp --- Roadmap/28 - SOLID LSP/java/simonguzman.java | 44 +++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/Roadmap/28 - SOLID LSP/java/simonguzman.java b/Roadmap/28 - SOLID LSP/java/simonguzman.java index 50e140f138..79f97b1db0 100644 --- a/Roadmap/28 - SOLID LSP/java/simonguzman.java +++ b/Roadmap/28 - SOLID LSP/java/simonguzman.java @@ -7,9 +7,51 @@ public class simonguzman { public static void main(String[] args) { //libraryManagementSystemLiskovViolation(); - libraryLSP(); + //libraryLSP(); + LiskovIncorrectTest(); } + /****************************** ejercicio adicional con lsp (Correcto) ******************************/ + /****************************** ejercicio adicional sin lsp (Incorrecto) ******************************/ + public static void LiskovIncorrectTest() { + Vehiculo cocheElectrico = new CocheElectrico(); + acelerarYFrenar(cocheElectrico); + + ((CocheElectrico) cocheElectrico).recargarBateria(); + } + + public static void acelerarYFrenar(Vehiculo vehiculo) { + vehiculo.acelerar(); + vehiculo.frenar(); + } + + static class Vehiculo { + public void acelerar() { + System.out.println("El vehículo está acelerando."); + } + + public void frenar() { + System.out.println("El vehículo está frenando."); + } + } + +// Subclase CocheEléctrico que viola LSP + static class CocheElectrico extends Vehiculo { + @Override + public void acelerar() { + System.out.println("El coche eléctrico está acelerando silenciosamente."); + } + + @Override + public void frenar() { + System.out.println("El coche eléctrico está frenando regenerativamente."); + } + + // Método adicional que viola el LSP + public void recargarBateria() { + System.out.println("Recargando la batería del coche eléctrico."); + } + } /****************************** ejemplo con lsp (Correcto) ******************************/ static void libraryLSP(){ LibraryManager libraryManager = new LibraryManager(); From 6f4024e33a4e64ed54a90833fac015a406ac604a Mon Sep 17 00:00:00 2001 From: SimonGuzman Date: Wed, 18 Sep 2024 15:11:05 -0500 Subject: [PATCH 388/539] Ejercicio #28 completo --- Roadmap/28 - SOLID LSP/java/simonguzman.java | 62 +++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/Roadmap/28 - SOLID LSP/java/simonguzman.java b/Roadmap/28 - SOLID LSP/java/simonguzman.java index 79f97b1db0..ad86e8f224 100644 --- a/Roadmap/28 - SOLID LSP/java/simonguzman.java +++ b/Roadmap/28 - SOLID LSP/java/simonguzman.java @@ -8,10 +8,70 @@ public class simonguzman { public static void main(String[] args) { //libraryManagementSystemLiskovViolation(); //libraryLSP(); - LiskovIncorrectTest(); + //LiskovIncorrectTest(); + LiskovCorrectTest(); } /****************************** ejercicio adicional con lsp (Correcto) ******************************/ + public static void LiskovCorrectTest() { + VehiculoLsp coche = new Coche(); + VehiculoLsp bicicleta = new Bicicleta(); + VehiculoLsp motocicleta = new Motocicleta(); + + // Probar comportamiento de los vehículos + acelerarYFrenarLsp(coche); + acelerarYFrenarLsp(bicicleta); + acelerarYFrenarLsp(motocicleta); + } + + public static void acelerarYFrenarLsp(VehiculoLsp vehiculo) { + vehiculo.acelerar(); + vehiculo.frenar(); + } + + static class VehiculoLsp { + public void acelerar() { + System.out.println("El vehículo está acelerando."); + } + + public void frenar() { + System.out.println("El vehículo está frenando."); + } + } + + static class Coche extends VehiculoLsp { + @Override + public void acelerar() { + System.out.println("El coche está acelerando rápidamente."); + } + @Override + public void frenar() { + System.out.println("El coche está frenando suavemente."); + } + } + + static class Bicicleta extends VehiculoLsp { + @Override + public void acelerar() { + System.out.println("La bicicleta está acelerando lentamente."); + } + + @Override + public void frenar() { + System.out.println("La bicicleta está frenando manualmente."); + } + } + static class Motocicleta extends VehiculoLsp { + @Override + public void acelerar() { + System.out.println("La motocicleta está acelerando con potencia."); + } + + @Override + public void frenar() { + System.out.println("La motocicleta está frenando rápidamente."); + } + } /****************************** ejercicio adicional sin lsp (Incorrecto) ******************************/ public static void LiskovIncorrectTest() { Vehiculo cocheElectrico = new CocheElectrico(); From 535ff3287d3d03369644ad40d67004da0ec4f254 Mon Sep 17 00:00:00 2001 From: GlossyPath Date: Wed, 18 Sep 2024 23:21:21 +0200 Subject: [PATCH 389/539] #09 - Java --- Roadmap/09 - HERENCIA/java/GlossyPath.java | 315 +++++++++++++++++++++ 1 file changed, 315 insertions(+) create mode 100644 Roadmap/09 - HERENCIA/java/GlossyPath.java diff --git a/Roadmap/09 - HERENCIA/java/GlossyPath.java b/Roadmap/09 - HERENCIA/java/GlossyPath.java new file mode 100644 index 0000000000..1a296f30cf --- /dev/null +++ b/Roadmap/09 - HERENCIA/java/GlossyPath.java @@ -0,0 +1,315 @@ +/* + * EJERCICIO: + * Explora el concepto de herencia según tu lenguaje. Crea un ejemplo que + * implemente una superclase Animal y un par de subclases Perro y Gato, + * junto con una función que sirva para imprimir el sonido que emite cada Animal. + * + * DIFICULTAD EXTRA (opcional): + * Implementa la jerarquía de una empresa de desarrollo formada por Empleados que + * pueden ser Gerentes, Gerentes de Proyectos o Programadores. + * Cada empleado tiene un identificador y un nombre. + * Dependiendo de su labor, tienen propiedades y funciones exclusivas de su + * actividad, y almacenan los empleados a su cargo. + * + * @version v1.0 + * + * @since 09/09/2024 + * + * @author GlossyPath + */ + + import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + +public class GlossyPath { + public static void main(String[] args) throws Exception { + + Gato cat = new Gato(); + Perro dog = new Perro(); + + cat.sonidoAnimal(); + dog.sonidoAnimal(); + + System.out.println(); + + Gerentes gerentePaco = new Gerentes("Paco", "Gerente"); + + GerentesProyecto gerenteProyectoAna = new GerentesProyecto("Ana", "Gerente de proyecto"); + + gerenteProyectoAna.setProyecto("Valerian"); + + GerentesProyecto.Programador claraProgramadora = gerenteProyectoAna.new Programador("Clara", "Programador", gerenteProyectoAna); + + gerentePaco.añadirGerentesProyecto(gerenteProyectoAna); + + gerenteProyectoAna.añadirProgramador(claraProgramadora); + System.out.println(); + + System.out.println(gerentePaco); + System.out.println(); + + System.out.println(gerenteProyectoAna); + System.out.println(); + + System.out.println(claraProgramadora); + + } +} + + abstract class Animal { + + public abstract void sonidoAnimal(); +} + + +class Perro extends Animal { + + @Override + public void sonidoAnimal() { + System.out.println("El perro hace GUAU"); + } +} + + +class Gato extends Animal { + + @Override + public void sonidoAnimal() { + System.out.println("El gato hace MIAUUU"); + } +} + + +abstract class Empleados { + + private String identificador; + private String nombre; + private String puesto; + + public Empleados (String nombre, String categoria){ + this.nombre = nombre; + this.puesto = categoriaTrabajador(categoria); + this.identificador = indentificadorAleatorio(); + } + + private String categoriaTrabajador(String categoria) throws IllegalArgumentException { + + String[] categorias = {"gerente", "gerente de proyecto", "programador"}; + + boolean correcto = Arrays.stream(categorias).anyMatch(c -> c.equalsIgnoreCase(categoria)); + + if(correcto) { + return categoria; + + } else { + throw new IllegalArgumentException ("Categoria no valida"); + } + } + + + private String indentificadorAleatorio () { + + StringBuilder id = new StringBuilder(); + char[] letras = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'}; + + for(int i=0; i<5; i++){ + String numsAle = String.valueOf((int) (Math.random()*10)); + id.append(numsAle); + } + + for(int i=0; i<5; i++){ + int indice = (int) (Math.random()*letras.length); + id.append(letras[indice]); + } + + return id.toString(); + } + + public String getPuesto(){ + return this.puesto; + } + + public String getIdentificador() { + return identificador; + } + + public void setIdentificador(String identificador) { + this.identificador = identificador; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + @Override + public String toString() { + + return "Empleado: " + getNombre() + "\n" + + "Puesto de trabajo: " + getPuesto() + "\n" + + "Identificador: " + getIdentificador(); + } +} + + + +class Gerentes extends Empleados { + + private List gerentesProyecto; + + private final Scanner SC = new Scanner("System.in"); + + public Gerentes(String nombre, String categoria) { + super(nombre, categoria); + + this.gerentesProyecto = new ArrayList<>(); + } + + public void añadirGerentesProyecto(GerentesProyecto gerenteAñadir) { + + boolean existe = gerentesProyecto.stream().anyMatch(gp -> gp.getNombre().equals(gerenteAñadir.getNombre())); + + if(!existe){ + gerentesProyecto.add(gerenteAñadir); + System.out.println("El gerente de proyecto " + gerenteAñadir.getNombre() + " ha sido añadido correctamente."); + + } else { + System.out.println("El gerente de proyectos ya esta en la lista"); + } + } + + public void despedirGerenteProyecto() { + + gerentesProyecto.stream().forEach(System.out::println); + + System.out.println("Introduce el nombre del gerente de proyecto que quieres despedir"); + String nombre = SC.nextLine(); + + boolean existe = gerentesProyecto.stream().anyMatch(p -> p.getNombre().equals(nombre)); + + if(existe) { + gerentesProyecto.removeIf(p -> p.getNombre().equals(nombre)); + System.out.println("El programador " + nombre + " ha sido despedido."); + + } else { + System.out.println("Ese programador no existe"); + } + } + + + public List getGerentesProyecto() { + return gerentesProyecto; + } + + public void setGerentesProyecto(List gerentesProyecto) { + this.gerentesProyecto = gerentesProyecto; + } + + @Override + public String toString(){ + return super.toString() + + "\nGerentes de proyecto que gestiona: " + gerentesProyecto.size(); + } +} + + + +class GerentesProyecto extends Empleados { + + private final Scanner SC = new Scanner(System.in); + String proyecto; + private List programadores; + + public GerentesProyecto(String nombre, String categoria) { + super(nombre, categoria); + + this.programadores = new ArrayList<>(); + } + + + public void añadirProgramador(Programador programador){ + + boolean existe = programadores.stream().anyMatch(p -> p.getNombre().equals(programador.getNombre())); + + if(!existe) { + this.programadores.add(programador); + + } else { + System.out.println("El nombre del programador ya existe"); + } + } + + public void despedirProgramador() { + + programadores.stream().forEach(System.out::println); + + System.out.println("Introduce el nombre del programador que quieres despedir"); + String nombre = SC.nextLine(); + + boolean existe = programadores.stream().anyMatch(p -> p.getNombre().equals(nombre)); + + if(existe) { + programadores.removeIf(p -> p.getNombre().equals(nombre)); + System.out.println("El programador " + nombre + " ha sido despedido."); + + + } else { + System.out.println("Ese programador no existe"); + } + } + + + public List getProgramadores() { + return programadores; + } + + + public void setProgramadores(List programadores) { + this.programadores = programadores; + } + + + public String getProyecto() { + return proyecto; + } + + + public void setProyecto(String proyecto) { + this.proyecto = proyecto; + } + + @Override + public String toString(){ + return super.toString() + + "\nProgramadores que gestiona: " + programadores.size() + + "\nProyecto en el que esta involucrado: " + proyecto; + } + + class Programador extends Empleados { + + GerentesProyecto gerenteJefe; + + public Programador(String nombre, String puesto, GerentesProyecto gerenteProyecto) { + super(nombre, puesto); + + this.gerenteJefe = gerenteProyecto; + + } + + @Override + public String toString() { + return super.toString() + + "\nSu jefe es: " + gerenteJefe.getNombre(); + } + + } + +} + + + From 7003f9009be33d4e382d5f2604d4fcfcf37f5c9e Mon Sep 17 00:00:00 2001 From: hfvaronb Date: Wed, 18 Sep 2024 16:51:42 -0500 Subject: [PATCH 390/539] #00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO - javascript --- .../javascript/hfvaronb.js | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/hfvaronb.js diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/hfvaronb.js b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/hfvaronb.js new file mode 100644 index 0000000000..e0efd3a1e3 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/hfvaronb.js @@ -0,0 +1,23 @@ +// https://developer.mozilla.org/es/docs/Web/JavaScript + +// Comentario en una linea + +/* +Comentario +en varias +lineas + */ + +// Representación de los tipos de datos primitivos de JavaScript +mi_variable = "Variable"; +const PI = 3.14159; + +let ciudad = "Bogotá"; // String +let telefono = 312457897; // Number +let aprobado = true; // Boolean +let nulo = null; // Variable sin valor +let estado = undefined; // Valor desconocido +const unico = Symbol(80123654); // Valores unicos +const numeroGrande = 987654321n; // Entero sin limite de tamaño + +console.log("¡Hola, JavaScript!"); \ No newline at end of file From 899224ab7707806ad1bd929c5323562f768f03c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Heguaburu=20S=C3=A1nchez?= Date: Wed, 18 Sep 2024 19:13:28 -0300 Subject: [PATCH 391/539] #05-python --- .../python/Nicoheguaburu.py | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 Roadmap/05 - VALOR Y REFERENCIA/python/Nicoheguaburu.py diff --git a/Roadmap/05 - VALOR Y REFERENCIA/python/Nicoheguaburu.py b/Roadmap/05 - VALOR Y REFERENCIA/python/Nicoheguaburu.py new file mode 100644 index 0000000000..82deeea509 --- /dev/null +++ b/Roadmap/05 - VALOR Y REFERENCIA/python/Nicoheguaburu.py @@ -0,0 +1,110 @@ +#Valor y referencia + + + +# tipos de dato por valor + +mi_entero_a = 10 +mi_entero_b = 20 + +mi_entero_a = mi_entero_b + +print(mi_entero_a) +print(mi_entero_b) + + +#tipos de dato por referencia + +mi_lista_a = [10, 20] +mi_lista_b = [30, 40] + +mi_lista_a = mi_lista_b #cambio de direccion de memoria + +mi_lista_a.append(50) + +print(mi_lista_a) +print(mi_lista_b) + + +# Funciones con datos por valor + +def mi_entero_funcion(mi_entero: int): + mi_entero = 20 + print(mi_entero) + + +mi_entero_funcion(55) + + +#funciones de datos por referencia +#funciona como un puntero al igualar valores lo que hace es que tengan el mismo valor de memoria + +def mi_lista_funcion(mi_lista: list): + mi_lista.append(4) + mi_lista_d = mi_lista + mi_lista_d.append(5) + print(mi_lista_d) + print(mi_lista) + +mi_lista_c = [1,2,3] +mi_lista_funcion(mi_lista_c) +print(mi_lista_c) + + + +#DIFICULTAD EXTRA + +#parametros por valor +valor_a = 30 +valor_b = 50 + +#parametros por referencia +referencia_a = [1,2,3,4] +referencia_b = [5,6,7,8] + +#programa de valor +def programa_valor(): + def cambiar_valores (param_a, param_b): + guardar_valor = param_a + param_a = param_b + param_b = guardar_valor + return(param_a , param_b) + + + resultados = cambiar_valores(valor_a, valor_b) + valor_1 = resultados[0] + valor_2 = resultados[1] + + print(valor_a) + print(valor_b) + print(valor_1) + print(valor_2) + +programa_valor() + + +#programa de referencia +def programa_referencia(): + def cambiar_referencia (param_a, param_b): + guardar_valor = param_a + param_a = param_b + param_b = guardar_valor + return(param_a , param_b) + + + resultados = cambiar_referencia(referencia_a, referencia_b) + referencia_1 = resultados[0] + referencia_2 = resultados[1] + + print(referencia_a) + print(referencia_b) + print(referencia_1) + print(referencia_2) + +programa_referencia() + + + + + + From ad61cd411382f8c3320fb90c5ea82a23d4ad985e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Heguaburu=20S=C3=A1nchez?= Date: Wed, 18 Sep 2024 21:13:52 -0300 Subject: [PATCH 392/539] 06-python --- .../06 - RECURSIVIDAD/python/NicoHeguaburu.py | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Roadmap/06 - RECURSIVIDAD/python/NicoHeguaburu.py diff --git a/Roadmap/06 - RECURSIVIDAD/python/NicoHeguaburu.py b/Roadmap/06 - RECURSIVIDAD/python/NicoHeguaburu.py new file mode 100644 index 0000000000..2b94bb9ee6 --- /dev/null +++ b/Roadmap/06 - RECURSIVIDAD/python/NicoHeguaburu.py @@ -0,0 +1,57 @@ +""" +ejercicio de recursividad +""" + +def hola (): + print("nico") + hola() + +#es una funcion recursiva ya que se vuelve a llamar dentro de la funcion + +""" +Funcion recursiva que imprima los valores del 100 al 1 +""" + +def fun_recursiva(num : int): + if num >= 0: + print(num) + fun_recursiva(num - 1) + + +# fun_recursiva(100) + + + + +#DIFICULTAD EXTRA + +#Calcular un factorial + +def calc_factorial(num): + if num == 0 or num == 1: + return 1 + elif num < 0: + print("no se puede calcular el factorial de un numero negativo") + else: + return num * calc_factorial(num - 1) + + + +print(calc_factorial(10)) + + + +#calcular fibonacci + +def calc_fibonacci(num): + if num == 0: + return(0) + elif num == 1: + return(1) + elif num < 0: + print("fibonacci no tiene posiciones negativas") + else: + return(calc_fibonacci(num - 1) + calc_fibonacci(num - 2)) + + +print(calc_fibonacci(7)) \ No newline at end of file From 49e010b99c5096de3e789ad9c01daf86235c08ac Mon Sep 17 00:00:00 2001 From: mouredev Date: Thu, 19 Sep 2024 00:15:18 +0000 Subject: [PATCH 393/539] Update stats --- Roadmap/stats.json | 2354 ++++++++++++++++++++++---------------------- 1 file changed, 1192 insertions(+), 1162 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index 6c80ca5205..c6c66301d8 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,23 +1,23 @@ { "challenges_total": 39, "languages_total": 48, - "files_total": 7110, - "users_total": 1189, + "files_total": 7135, + "users_total": 1194, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1290 + "count": 1294 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 786 + "count": 788 }, { "order": 3, "name": "02 - FUNCIONES Y ALCANCE", - "count": 598 + "count": 599 }, { "order": 4, @@ -27,7 +27,7 @@ { "order": 5, "name": "04 - CADENAS DE CARACTERES", - "count": 339 + "count": 340 }, { "order": 6, @@ -102,7 +102,7 @@ { "order": 20, "name": "19 - ENUMERACIONES", - "count": 101 + "count": 103 }, { "order": 21, @@ -131,12 +131,12 @@ }, { "order": 26, - "name": "25 - LOGS", + "name": "26 - SOLID SRP", "count": 65 }, { "order": 27, - "name": "26 - SOLID SRP", + "name": "25 - LOGS", "count": 65 }, { @@ -171,12 +171,12 @@ }, { "order": 34, - "name": "36 - EL SOMBRERO SELECCIONADOR", + "name": "31 - SIMULADOR JUEGOS OL\u00cdMPICOS", "count": 42 }, { "order": 35, - "name": "31 - SIMULADOR JUEGOS OL\u00cdMPICOS", + "name": "36 - EL SOMBRERO SELECCIONADOR", "count": 42 }, { @@ -187,79 +187,79 @@ { "order": 37, "name": "34 - \u00c1RBOL GENEAL\u00d3GICO LA CASA DEL DRAG\u00d3N", - "count": 35 + "count": 36 }, { "order": 38, "name": "37 - OASIS VS LINKIN PARK", - "count": 21 + "count": 27 }, { "order": 39, "name": "38 - MOUREDEV PRO", - "count": 5 + "count": 13 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 3064, - "percentage": 43.09 + "count": 3077, + "percentage": 43.13 }, { "order": 2, "name": "javascript", - "count": 1400, - "percentage": 19.69 + "count": 1402, + "percentage": 19.65 }, { "order": 3, "name": "java", - "count": 654, - "percentage": 9.2 + "count": 656, + "percentage": 9.19 }, { "order": 4, "name": "typescript", - "count": 318, - "percentage": 4.47 + "count": 321, + "percentage": 4.5 }, { "order": 5, "name": "c#", - "count": 257, - "percentage": 3.61 + "count": 259, + "percentage": 3.63 }, { "order": 6, "name": "kotlin", "count": 220, - "percentage": 3.09 + "percentage": 3.08 }, { "order": 7, "name": "go", - "count": 216, + "count": 217, "percentage": 3.04 }, { "order": 8, "name": "swift", "count": 167, - "percentage": 2.35 + "percentage": 2.34 }, { "order": 9, "name": "php", - "count": 159, - "percentage": 2.24 + "count": 161, + "percentage": 2.26 }, { "order": 10, "name": "c++", "count": 117, - "percentage": 1.65 + "percentage": 1.64 }, { "order": 11, @@ -329,25 +329,25 @@ }, { "order": 22, - "name": "cobol", + "name": "nasm", "count": 11, "percentage": 0.15 }, { "order": 23, - "name": "nasm", + "name": "cobol", "count": 11, "percentage": 0.15 }, { "order": 24, - "name": "julia", + "name": "scala", "count": 10, "percentage": 0.14 }, { "order": 25, - "name": "scala", + "name": "julia", "count": 10, "percentage": 0.14 }, @@ -371,25 +371,25 @@ }, { "order": 29, - "name": "gdscript", + "name": "fortran", "count": 4, "percentage": 0.06 }, { "order": 30, - "name": "fortran", + "name": "gdscript", "count": 4, "percentage": 0.06 }, { "order": 31, - "name": "prolog", + "name": "mojo", "count": 3, "percentage": 0.04 }, { "order": 32, - "name": "mojo", + "name": "prolog", "count": 3, "percentage": 0.04 }, @@ -407,13 +407,13 @@ }, { "order": 35, - "name": "ada", + "name": "solidity", "count": 2, "percentage": 0.03 }, { "order": 36, - "name": "solidity", + "name": "raku", "count": 2, "percentage": 0.03 }, @@ -425,7 +425,7 @@ }, { "order": 38, - "name": "raku", + "name": "ada", "count": 2, "percentage": 0.03 }, @@ -443,43 +443,43 @@ }, { "order": 41, - "name": "al", + "name": "f#", "count": 1, "percentage": 0.01 }, { "order": 42, - "name": "abap", + "name": "perl", "count": 1, "percentage": 0.01 }, { "order": 43, - "name": "objectivec", + "name": "harbour", "count": 1, "percentage": 0.01 }, { "order": 44, - "name": "f#", + "name": "abap", "count": 1, "percentage": 0.01 }, { "order": 45, - "name": "perl", + "name": "maxmsp", "count": 1, "percentage": 0.01 }, { "order": 46, - "name": "harbour", + "name": "objectivec", "count": 1, "percentage": 0.01 }, { "order": 47, - "name": "maxmsp", + "name": "al", "count": 1, "percentage": 0.01 }, @@ -494,13 +494,13 @@ { "order": 1, "name": "miguelex", - "count": 161, + "count": 171, "languages": 15 }, { "order": 2, "name": "kenysdev", - "count": 153, + "count": 154, "languages": 4 }, { @@ -529,13 +529,13 @@ }, { "order": 7, - "name": "nlarrea", + "name": "achapeton", "count": 72, "languages": 3 }, { "order": 8, - "name": "achapeton", + "name": "nlarrea", "count": 72, "languages": 3 }, @@ -595,27 +595,27 @@ }, { "order": 18, - "name": "amadorquispe", + "name": "jesusway69", "count": 49, "languages": 2 }, { "order": 19, - "name": "juanppdev", - "count": 48, - "languages": 3 + "name": "raulg91", + "count": 49, + "languages": 2 }, { "order": 20, - "name": "raulg91", - "count": 48, + "name": "amadorquispe", + "count": 49, "languages": 2 }, { "order": 21, - "name": "jesusway69", + "name": "juanppdev", "count": 48, - "languages": 2 + "languages": 3 }, { "order": 22, @@ -685,82 +685,82 @@ }, { "order": 33, - "name": "luishendrix92", + "name": "raynerpv2022", "count": 37, "languages": 2 }, { "order": 34, - "name": "rauldoezon", + "name": "luishendrix92", "count": 37, - "languages": 1 + "languages": 2 }, { "order": 35, - "name": "emmanuelmmontesinos", + "name": "soohav", "count": 37, "languages": 1 }, { "order": 36, - "name": "soohav", + "name": "emmanuelmmontesinos", "count": 37, "languages": 1 }, { "order": 37, - "name": "asjordi", + "name": "rauldoezon", "count": 37, "languages": 1 }, { "order": 38, + "name": "asjordi", + "count": 37, + "languages": 1 + }, + { + "order": 39, "name": "qv1ko", "count": 36, "languages": 4 }, { - "order": 39, + "order": 40, "name": "n0hagonada", "count": 36, "languages": 3 }, { - "order": 40, + "order": 41, "name": "avcenal", "count": 36, "languages": 1 }, { - "order": 41, + "order": 42, "name": "rigo93acosta", "count": 36, "languages": 1 }, { - "order": 42, - "name": "raynerpv2022", + "order": 43, + "name": "fborjalv", "count": 35, - "languages": 2 + "languages": 1 }, { - "order": 43, + "order": 44, "name": "angelsanchezt", "count": 34, "languages": 12 }, { - "order": 44, + "order": 45, "name": "rikmij", "count": 34, "languages": 2 }, - { - "order": 45, - "name": "fborjalv", - "count": 34, - "languages": 1 - }, { "order": 46, "name": "worlion", @@ -841,13 +841,13 @@ }, { "order": 59, - "name": "isilanes", + "name": "lucasrebuffo", "count": 27, "languages": 1 }, { "order": 60, - "name": "lucasrebuffo", + "name": "isilanes", "count": 27, "languages": 1 }, @@ -889,25 +889,25 @@ }, { "order": 67, - "name": "victoriaparraf", + "name": "fedeairala", "count": 24, "languages": 1 }, { "order": 68, - "name": "jamerrq", + "name": "deyvid-10", "count": 24, "languages": 1 }, { "order": 69, - "name": "deyvid-10", + "name": "victoriaparraf", "count": 24, "languages": 1 }, { "order": 70, - "name": "fedeairala", + "name": "jamerrq", "count": 24, "languages": 1 }, @@ -919,13 +919,13 @@ }, { "order": 72, - "name": "christian-jfr", + "name": "juandaw37", "count": 23, "languages": 1 }, { "order": 73, - "name": "juandaw37", + "name": "christian-jfr", "count": 23, "languages": 1 }, @@ -943,19 +943,19 @@ }, { "order": 76, - "name": "emedevelopa", + "name": "jptxaya", "count": 22, "languages": 1 }, { "order": 77, - "name": "jptxaya", + "name": "gordo-master", "count": 22, "languages": 1 }, { "order": 78, - "name": "gordo-master", + "name": "emedevelopa", "count": 22, "languages": 1 }, @@ -967,7 +967,7 @@ }, { "order": 80, - "name": "igledev", + "name": "restevean", "count": 21, "languages": 1 }, @@ -979,13 +979,13 @@ }, { "order": 82, - "name": "gringoam", + "name": "igledev", "count": 21, "languages": 1 }, { "order": 83, - "name": "restevean", + "name": "gringoam", "count": 21, "languages": 1 }, @@ -1051,25 +1051,25 @@ }, { "order": 94, - "name": "raulfauli", + "name": "saicobys", "count": 17, "languages": 2 }, { "order": 95, - "name": "saicobys", + "name": "raulfauli", "count": 17, "languages": 2 }, { "order": 96, - "name": "andreavzqz", + "name": "hyromy", "count": 17, "languages": 1 }, { "order": 97, - "name": "hyromy", + "name": "andreavzqz", "count": 17, "languages": 1 }, @@ -1081,13 +1081,13 @@ }, { "order": 99, - "name": "sergiogi99", + "name": "mariovelascodev", "count": 16, "languages": 2 }, { "order": 100, - "name": "mariovelascodev", + "name": "sergiogi99", "count": 16, "languages": 2 }, @@ -1099,31 +1099,31 @@ }, { "order": 102, - "name": "kontroldev", + "name": "oniricoh", "count": 16, "languages": 1 }, { "order": 103, - "name": "artickun", + "name": "danielhdzr", "count": 16, "languages": 1 }, { "order": 104, - "name": "oniricoh", + "name": "mvidalb", "count": 16, "languages": 1 }, { "order": 105, - "name": "mvidalb", + "name": "artickun", "count": 16, "languages": 1 }, { "order": 106, - "name": "danielhdzr", + "name": "kontroldev", "count": 16, "languages": 1 }, @@ -1135,31 +1135,31 @@ }, { "order": 108, - "name": "alvaro-neyra", + "name": "eugeniasoria", "count": 15, "languages": 2 }, { "order": 109, - "name": "eugeniasoria", + "name": "alvaro-neyra", "count": 15, "languages": 2 }, { "order": 110, - "name": "seandsun", + "name": "juanchernandezdev", "count": 15, "languages": 1 }, { "order": 111, - "name": "jafeito", + "name": "seandsun", "count": 15, "languages": 1 }, { "order": 112, - "name": "juanchernandezdev", + "name": "jafeito", "count": 15, "languages": 1 }, @@ -1183,19 +1183,19 @@ }, { "order": 116, - "name": "andresgcastillo", + "name": "gonzadev28", "count": 14, "languages": 2 }, { "order": 117, - "name": "ygriegasb", + "name": "andresgcastillo", "count": 14, "languages": 2 }, { "order": 118, - "name": "gonzadev28", + "name": "ygriegasb", "count": 14, "languages": 2 }, @@ -1207,37 +1207,37 @@ }, { "order": 120, - "name": "elmer125", + "name": "mikelm2020", "count": 14, "languages": 1 }, { "order": 121, - "name": "vincentrodriguezr", + "name": "paula2409", "count": 14, "languages": 1 }, { "order": 122, - "name": "mikelm2020", + "name": "vincentrodriguezr", "count": 14, "languages": 1 }, { "order": 123, - "name": "paula2409", + "name": "elmer125", "count": 14, "languages": 1 }, { "order": 124, - "name": "volumidev", + "name": "diegoibb", "count": 13, "languages": 3 }, { "order": 125, - "name": "diegoibb", + "name": "volumidev", "count": 13, "languages": 3 }, @@ -1249,145 +1249,145 @@ }, { "order": 127, - "name": "7r0n1x", + "name": "neosv", "count": 13, "languages": 1 }, { "order": 128, - "name": "ocram1304", + "name": "c-gabs", "count": 13, "languages": 1 }, { "order": 129, - "name": "dan-corbo", + "name": "tomu98", "count": 13, "languages": 1 }, { "order": 130, - "name": "c-gabs", + "name": "7r0n1x", "count": 13, "languages": 1 }, { "order": 131, - "name": "jav-mol", + "name": "ocram1304", "count": 13, "languages": 1 }, { "order": 132, - "name": "tomu98", + "name": "dan-corbo", "count": 13, "languages": 1 }, { "order": 133, - "name": "neosv", + "name": "julian98789", "count": 13, "languages": 1 }, { "order": 134, - "name": "julian98789", + "name": "jav-mol", "count": 13, "languages": 1 }, { "order": 135, - "name": "juanrcoder", + "name": "andresmcardenas", "count": 12, "languages": 2 }, { "order": 136, - "name": "martinbohorquez", + "name": "juanrcoder", "count": 12, "languages": 2 }, { "order": 137, - "name": "keltoi-dev", + "name": "a-mayans", "count": 12, "languages": 2 }, { "order": 138, - "name": "andresmcardenas", + "name": "martinbohorquez", "count": 12, "languages": 2 }, { "order": 139, - "name": "a-mayans", + "name": "keltoi-dev", "count": 12, "languages": 2 }, { "order": 140, - "name": "pancratzia", + "name": "javierfiestasbotella", "count": 12, "languages": 1 }, { "order": 141, - "name": "jeronimocardu", + "name": "pipe281", "count": 12, "languages": 1 }, { "order": 142, - "name": "evilpotato04", + "name": "dataciriano", "count": 12, "languages": 1 }, { "order": 143, - "name": "javierjoyera", + "name": "josealberto13", "count": 12, "languages": 1 }, { "order": 144, - "name": "dataciriano", + "name": "evilpotato04", "count": 12, "languages": 1 }, { "order": 145, - "name": "josealberto13", + "name": "clmiranda", "count": 12, "languages": 1 }, { "order": 146, - "name": "clmiranda", + "name": "javierjoyera", "count": 12, "languages": 1 }, { "order": 147, - "name": "andrewcodev", + "name": "pancratzia", "count": 12, "languages": 1 }, { "order": 148, - "name": "javierfiestasbotella", + "name": "jeronimocardu", "count": 12, "languages": 1 }, { "order": 149, - "name": "pipe281", + "name": "andrewcodev", "count": 12, "languages": 1 }, { "order": 150, - "name": "jchavescaceres", + "name": "arkmiguel379", "count": 11, "languages": 2 }, @@ -1399,37 +1399,37 @@ }, { "order": 152, - "name": "arkmiguel379", + "name": "jchavescaceres", "count": 11, "languages": 2 }, { "order": 153, - "name": "ialmontedr0", + "name": "majinka10", "count": 11, "languages": 1 }, { "order": 154, - "name": "charlerodriguez3", + "name": "warclimb", "count": 11, "languages": 1 }, { "order": 155, - "name": "oleojake", + "name": "59822", "count": 11, "languages": 1 }, { "order": 156, - "name": "alainmartz", + "name": "m1l0j05", "count": 11, "languages": 1 }, { "order": 157, - "name": "warclimb", + "name": "alainmartz", "count": 11, "languages": 1 }, @@ -1441,25 +1441,25 @@ }, { "order": 159, - "name": "m1l0j05", + "name": "oleojake", "count": 11, "languages": 1 }, { "order": 160, - "name": "59822", + "name": "charlerodriguez3", "count": 11, "languages": 1 }, { "order": 161, - "name": "majinka10", + "name": "evanz2608", "count": 11, "languages": 1 }, { "order": 162, - "name": "jeigar2", + "name": "gustavogomez19", "count": 11, "languages": 1 }, @@ -1471,13 +1471,13 @@ }, { "order": 164, - "name": "gustavogomez19", + "name": "jeigar2", "count": 11, "languages": 1 }, { "order": 165, - "name": "evanz2608", + "name": "ialmontedr0", "count": 11, "languages": 1 }, @@ -1495,7 +1495,7 @@ }, { "order": 168, - "name": "vixxtory", + "name": "m-doce", "count": 10, "languages": 2 }, @@ -1507,67 +1507,67 @@ }, { "order": 170, - "name": "m-doce", + "name": "vixxtory", "count": 10, "languages": 2 }, { "order": 171, - "name": "natalyjoanna", + "name": "marcose-ferretoe", "count": 10, "languages": 1 }, { "order": 172, - "name": "glitzypanic", + "name": "josecox13", "count": 10, "languages": 1 }, { "order": 173, - "name": "popmaquin", + "name": "littlemabbit", "count": 10, "languages": 1 }, { "order": 174, - "name": "k-90", + "name": "thonys07", "count": 10, "languages": 1 }, { "order": 175, - "name": "marcose-ferretoe", + "name": "k-90", "count": 10, "languages": 1 }, { "order": 176, - "name": "thonys07", + "name": "daparradom", "count": 10, "languages": 1 }, { "order": 177, - "name": "daparradom", + "name": "xemita007", "count": 10, "languages": 1 }, { "order": 178, - "name": "josecox13", + "name": "popmaquin", "count": 10, "languages": 1 }, { "order": 179, - "name": "xemita007", + "name": "glitzypanic", "count": 10, "languages": 1 }, { "order": 180, - "name": "littlemabbit", + "name": "natalyjoanna", "count": 10, "languages": 1 }, @@ -1579,13 +1579,13 @@ }, { "order": 182, - "name": "teren91", + "name": "mauricio-leyva", "count": 10, "languages": 1 }, { "order": 183, - "name": "mauricio-leyva", + "name": "teren91", "count": 10, "languages": 1 }, @@ -1597,7 +1597,7 @@ }, { "order": 185, - "name": "joseesmil04", + "name": "luisolivaresj", "count": 9, "languages": 2 }, @@ -1609,7 +1609,7 @@ }, { "order": 187, - "name": "luisolivaresj", + "name": "joseesmil04", "count": 9, "languages": 2 }, @@ -1621,49 +1621,49 @@ }, { "order": 189, - "name": "karys4", + "name": "jcdm60", "count": 9, "languages": 1 }, { "order": 190, - "name": "cmejiajulian", + "name": "gjbecerrae", "count": 9, "languages": 1 }, { "order": 191, - "name": "omarland", + "name": "yoezequiel", "count": 9, "languages": 1 }, { "order": 192, - "name": "brockar", + "name": "troynebula", "count": 9, "languages": 1 }, { "order": 193, - "name": "jcdm60", + "name": "omarland", "count": 9, "languages": 1 }, { "order": 194, - "name": "troynebula", + "name": "cmejiajulian", "count": 9, "languages": 1 }, { "order": 195, - "name": "yoezequiel", + "name": "karys4", "count": 9, "languages": 1 }, { "order": 196, - "name": "gjbecerrae", + "name": "brockar", "count": 9, "languages": 1 }, @@ -1675,13 +1675,13 @@ }, { "order": 198, - "name": "angel-delg", + "name": "pakiuh", "count": 8, "languages": 4 }, { "order": 199, - "name": "pakiuh", + "name": "angel-delg", "count": 8, "languages": 4 }, @@ -1705,67 +1705,67 @@ }, { "order": 203, - "name": "matitc", + "name": "jtrujilloalcocer", "count": 8, "languages": 1 }, { "order": 204, - "name": "srvariable", + "name": "linerlander", "count": 8, "languages": 1 }, { "order": 205, - "name": "isj-code", + "name": "zequy40", "count": 8, "languages": 1 }, { "order": 206, - "name": "westwbn", + "name": "toral24", "count": 8, "languages": 1 }, { "order": 207, - "name": "jaxi86", + "name": "abelperezcollado", "count": 8, "languages": 1 }, { "order": 208, - "name": "vid92", + "name": "matitc", "count": 8, "languages": 1 }, { "order": 209, - "name": "toral24", + "name": "jaxi86", "count": 8, "languages": 1 }, { "order": 210, - "name": "jtrujilloalcocer", + "name": "isj-code", "count": 8, "languages": 1 }, { "order": 211, - "name": "linerlander", + "name": "vid92", "count": 8, "languages": 1 }, { "order": 212, - "name": "zequy40", + "name": "westwbn", "count": 8, "languages": 1 }, { "order": 213, - "name": "abelperezcollado", + "name": "srvariable", "count": 8, "languages": 1 }, @@ -1789,79 +1789,79 @@ }, { "order": 217, - "name": "cubandeveloper89", + "name": "nwpablodeveloper", "count": 7, "languages": 3 }, { "order": 218, - "name": "nwpablodeveloper", + "name": "cubandeveloper89", "count": 7, "languages": 3 }, { "order": 219, - "name": "h4ckxel", + "name": "younes0-0", "count": 7, "languages": 2 }, { "order": 220, - "name": "danielbelenguer", + "name": "h4ckxel", "count": 7, "languages": 2 }, { "order": 221, - "name": "younes0-0", + "name": "danielbelenguer", "count": 7, "languages": 2 }, { "order": 222, - "name": "hectordbh", + "name": "dgrex", "count": 7, "languages": 1 }, { "order": 223, - "name": "18miguelgalarza", + "name": "franvozzi", "count": 7, "languages": 1 }, { "order": 224, - "name": "marinaortells", + "name": "abrahamraies", "count": 7, "languages": 1 }, { "order": 225, - "name": "abrahamraies", + "name": "ocandodev", "count": 7, "languages": 1 }, { "order": 226, - "name": "ocandodev", + "name": "marinaortells", "count": 7, "languages": 1 }, { "order": 227, - "name": "franvozzi", + "name": "18miguelgalarza", "count": 7, "languages": 1 }, { "order": 228, - "name": "dgrex", + "name": "ldre3", "count": 7, "languages": 1 }, { "order": 229, - "name": "albertomorilla", + "name": "mtirador", "count": 7, "languages": 1 }, @@ -1873,37 +1873,37 @@ }, { "order": 231, - "name": "ldre3", + "name": "albertomorilla", "count": 7, "languages": 1 }, { "order": 232, - "name": "mtirador", + "name": "hectordbh", "count": 7, "languages": 1 }, { "order": 233, - "name": "curtobrull", + "name": "fidelysla", "count": 6, "languages": 3 }, { "order": 234, - "name": "fidelysla", + "name": "curtobrull", "count": 6, "languages": 3 }, { "order": 235, - "name": "adrs1166ma", + "name": "luisk0706", "count": 6, "languages": 2 }, { "order": 236, - "name": "devknn", + "name": "luterfloyd", "count": 6, "languages": 2 }, @@ -1915,43 +1915,43 @@ }, { "order": 238, - "name": "isaias-alt", + "name": "rserradev", "count": 6, "languages": 2 }, { "order": 239, - "name": "luterfloyd", + "name": "kronstadt-lambda", "count": 6, "languages": 2 }, { "order": 240, - "name": "kronstadt-lambda", + "name": "isaias-alt", "count": 6, "languages": 2 }, { "order": 241, - "name": "troleomotor10", + "name": "oixild", "count": 6, "languages": 2 }, { "order": 242, - "name": "oixild", + "name": "adrs1166ma", "count": 6, "languages": 2 }, { "order": 243, - "name": "luisk0706", + "name": "troleomotor10", "count": 6, "languages": 2 }, { "order": 244, - "name": "rserradev", + "name": "devknn", "count": 6, "languages": 2 }, @@ -1963,67 +1963,67 @@ }, { "order": 246, - "name": "glossypath", + "name": "blancowilson", "count": 6, "languages": 1 }, { "order": 247, - "name": "guillemduno", + "name": "eamartin96", "count": 6, "languages": 1 }, { "order": 248, - "name": "mxtrar23", + "name": "eduhumanes91", "count": 6, "languages": 1 }, { "order": 249, - "name": "dannymarperone", + "name": "lazar171717ech", "count": 6, "languages": 1 }, { "order": 250, - "name": "facundo-muoio", + "name": "abascal92", "count": 6, "languages": 1 }, { "order": 251, - "name": "lazar171717ech", + "name": "facundo-muoio", "count": 6, "languages": 1 }, { "order": 252, - "name": "eduhumanes91", + "name": "wolffcode", "count": 6, "languages": 1 }, { "order": 253, - "name": "abascal92", + "name": "dannymarperone", "count": 6, "languages": 1 }, { "order": 254, - "name": "blancowilson", + "name": "guillemduno", "count": 6, "languages": 1 }, { "order": 255, - "name": "eamartin96", + "name": "mxtrar23", "count": 6, "languages": 1 }, { "order": 256, - "name": "dafi02", + "name": "yeisonagm", "count": 6, "languages": 1 }, @@ -2035,13 +2035,13 @@ }, { "order": 258, - "name": "wolffcode", + "name": "dafi02", "count": 6, "languages": 1 }, { "order": 259, - "name": "yeisonagm", + "name": "glossypath", "count": 6, "languages": 1 }, @@ -2059,655 +2059,655 @@ }, { "order": 262, - "name": "jalivur", + "name": "espinoleandroo", "count": 5, "languages": 2 }, { "order": 263, - "name": "icedrek", + "name": "vmatmarco", "count": 5, "languages": 2 }, { "order": 264, - "name": "vmatmarco", + "name": "andresmendozaf", "count": 5, "languages": 2 }, { "order": 265, - "name": "alejandrodave", + "name": "icedrek", "count": 5, "languages": 2 }, { "order": 266, - "name": "espinoleandroo", + "name": "jalivur", "count": 5, "languages": 2 }, { "order": 267, - "name": "andresmendozaf", + "name": "alejandrodave", "count": 5, "languages": 2 }, { "order": 268, - "name": "eloychavezdev", + "name": "d0ubt0", "count": 5, "languages": 1 }, { "order": 269, - "name": "drvito1977", + "name": "yharyarias", "count": 5, "languages": 1 }, { "order": 270, - "name": "vasilealexandru02", + "name": "jorgeadamowicz", "count": 5, "languages": 1 }, { "order": 271, - "name": "esaens12", + "name": "jose-luis-lanza", "count": 5, "languages": 1 }, { "order": 272, - "name": "victormugo", + "name": "santiago434c", "count": 5, "languages": 1 }, { "order": 273, - "name": "adridoce", + "name": "augustdev2003", "count": 5, "languages": 1 }, { "order": 274, - "name": "vixito", + "name": "alberba", "count": 5, "languages": 1 }, { "order": 275, - "name": "danielbustos342", + "name": "thezhizn", "count": 5, "languages": 1 }, { "order": 276, - "name": "douglasdiazr", + "name": "gabrielramos02", "count": 5, "languages": 1 }, { "order": 277, - "name": "n1sek", + "name": "gmbarrios", "count": 5, "languages": 1 }, { "order": 278, - "name": "robmxz", + "name": "nomellamodante", "count": 5, "languages": 1 }, { "order": 279, - "name": "d4-n1", + "name": "sarismejiasanchez", "count": 5, "languages": 1 }, { "order": 280, - "name": "lauracastrillonmp", + "name": "franz-arzapalo", "count": 5, "languages": 1 }, { "order": 281, - "name": "joanfv-git", + "name": "drvito1977", "count": 5, "languages": 1 }, { "order": 282, - "name": "yharyarias", + "name": "joanfv-git", "count": 5, "languages": 1 }, { "order": 283, - "name": "jorgeadamowicz", + "name": "eloychavezdev", "count": 5, "languages": 1 }, { "order": 284, - "name": "franz-arzapalo", + "name": "n1sek", "count": 5, "languages": 1 }, { "order": 285, - "name": "d0ubt0", + "name": "vixito", "count": 5, "languages": 1 }, { "order": 286, - "name": "gmbarrios", + "name": "d4-n1", "count": 5, "languages": 1 }, { "order": 287, - "name": "santiago434c", + "name": "lauracastrillonmp", "count": 5, "languages": 1 }, { "order": 288, - "name": "augustdev2003", + "name": "danielbustos342", "count": 5, "languages": 1 }, { "order": 289, - "name": "alberba", + "name": "robmxz", "count": 5, "languages": 1 }, { "order": 290, - "name": "gabrielramos02", + "name": "douglasdiazr", "count": 5, "languages": 1 }, { "order": 291, - "name": "thezhizn", + "name": "vasilealexandru02", "count": 5, "languages": 1 }, { "order": 292, - "name": "jose-luis-lanza", + "name": "victormugo", "count": 5, "languages": 1 }, { "order": 293, - "name": "nomellamodante", + "name": "esaens12", "count": 5, "languages": 1 }, { "order": 294, - "name": "karolle", + "name": "adridoce", "count": 5, "languages": 1 }, { "order": 295, - "name": "jcrodmir", + "name": "lucasag01", "count": 5, "languages": 1 }, { "order": 296, - "name": "alvarofernandezavalos", + "name": "karolle", "count": 5, "languages": 1 }, { "order": 297, - "name": "lucasag01", + "name": "jcrodmir", "count": 5, "languages": 1 }, { "order": 298, - "name": "thaishdz", + "name": "alvarofernandezavalos", "count": 5, "languages": 1 }, { "order": 299, - "name": "bastianalq", + "name": "thaishdz", "count": 5, "languages": 1 }, { "order": 300, - "name": "w00k", + "name": "boterop", "count": 5, "languages": 1 }, { "order": 301, - "name": "mohamedelderkaoui", + "name": "bastianalq", "count": 5, "languages": 1 }, { "order": 302, - "name": "boterop", + "name": "rafacv23", "count": 5, "languages": 1 }, { "order": 303, - "name": "rafacv23", + "name": "mohamedelderkaoui", "count": 5, "languages": 1 }, { "order": 304, - "name": "zarakilancelot", - "count": 4, - "languages": 3 + "name": "w00k", + "count": 5, + "languages": 1 }, { "order": 305, - "name": "eonozux", + "name": "zarakilancelot", "count": 4, - "languages": 2 + "languages": 3 }, { "order": 306, - "name": "yablik", + "name": "ruthmp", "count": 4, "languages": 2 }, { "order": 307, - "name": "fullovellas", + "name": "mendozalz", "count": 4, "languages": 2 }, { "order": 308, - "name": "k3nvd", + "name": "salkalero", "count": 4, "languages": 2 }, { "order": 309, - "name": "josefuentes-dev", + "name": "willr30", "count": 4, "languages": 2 }, { "order": 310, - "name": "willr30", + "name": "eonozux", "count": 4, "languages": 2 }, { "order": 311, - "name": "ruthmp", + "name": "josefuentes-dev", "count": 4, "languages": 2 }, { "order": 312, - "name": "daeduol", + "name": "k3nvd", "count": 4, "languages": 2 }, { "order": 313, - "name": "mendozalz", + "name": "daeduol", "count": 4, "languages": 2 }, { "order": 314, - "name": "salkalero", + "name": "fullovellas", "count": 4, "languages": 2 }, { "order": 315, - "name": "elhacedordecosas", + "name": "yablik", "count": 4, - "languages": 1 + "languages": 2 }, { "order": 316, - "name": "andeveling", + "name": "nox456", "count": 4, "languages": 1 }, { "order": 317, - "name": "santiago-munoz-garcia", + "name": "mplatab", "count": 4, "languages": 1 }, { "order": 318, - "name": "deivitdev", + "name": "davstudy", "count": 4, "languages": 1 }, { "order": 319, - "name": "joshbaez", + "name": "rodrigoghr", "count": 4, "languages": 1 }, { "order": 320, - "name": "marcoslombardo", + "name": "ramxv", "count": 4, "languages": 1 }, { "order": 321, - "name": "lrpeset", + "name": "inkhemi", "count": 4, "languages": 1 }, { "order": 322, - "name": "dieswae", + "name": "tobibordino", "count": 4, "languages": 1 }, { "order": 323, - "name": "mateo423", + "name": "mallcca", "count": 4, "languages": 1 }, { "order": 324, - "name": "joaquinlopez14", + "name": "guillermo-k", "count": 4, "languages": 1 }, { "order": 325, - "name": "angelurrutdev", + "name": "angell4s", "count": 4, "languages": 1 }, { "order": 326, - "name": "elianisdev", + "name": "axelprz", "count": 4, "languages": 1 }, { "order": 327, - "name": "omegatroy", + "name": "luissssoto", "count": 4, "languages": 1 }, { "order": 328, - "name": "socramwd", + "name": "zakkdrte", "count": 4, "languages": 1 }, { "order": 329, - "name": "carzep09", + "name": "dlgai12", "count": 4, "languages": 1 }, { "order": 330, - "name": "mayerga", + "name": "carrenoalexander", "count": 4, "languages": 1 }, { "order": 331, - "name": "hugovrc", + "name": "txuky", "count": 4, "languages": 1 }, { "order": 332, - "name": "cdbiancotti", + "name": "zerek247", "count": 4, "languages": 1 }, { "order": 333, - "name": "tobibordino", + "name": "buriticasara", "count": 4, "languages": 1 }, { "order": 334, - "name": "guillermo-k", + "name": "jadraz", "count": 4, "languages": 1 }, { "order": 335, - "name": "zakkdrte", + "name": "cdbiancotti", "count": 4, "languages": 1 }, { "order": 336, - "name": "sarismejiasanchez", + "name": "albertorevel", "count": 4, "languages": 1 }, { "order": 337, - "name": "buriticasara", + "name": "anvildestroyer", "count": 4, "languages": 1 }, { "order": 338, - "name": "davstudy", + "name": "vicman-182", "count": 4, "languages": 1 }, { "order": 339, - "name": "zerek247", + "name": "sunjamer", "count": 4, "languages": 1 }, { "order": 340, - "name": "vicman-182", + "name": "javirub", "count": 4, "languages": 1 }, { "order": 341, - "name": "dlgai12", + "name": "lrpeset", "count": 4, "languages": 1 }, { "order": 342, - "name": "rodrigoghr", + "name": "joshbaez", "count": 4, "languages": 1 }, { "order": 343, - "name": "txuky", + "name": "joaquinlopez14", "count": 4, "languages": 1 }, { "order": 344, - "name": "nox456", + "name": "juperdev", "count": 4, "languages": 1 }, { "order": 345, - "name": "mplatab", + "name": "angelurrutdev", "count": 4, "languages": 1 }, { "order": 346, - "name": "angell4s", + "name": "omegatroy", "count": 4, "languages": 1 }, { "order": 347, - "name": "quejuan52", + "name": "socramwd", "count": 4, "languages": 1 }, { "order": 348, - "name": "axelprz", + "name": "mateo423", "count": 4, "languages": 1 }, { "order": 349, - "name": "javirub", + "name": "dieswae", "count": 4, "languages": 1 }, { "order": 350, - "name": "mallcca", + "name": "elianisdev", "count": 4, "languages": 1 }, { "order": 351, - "name": "sunjamer", + "name": "marcoslombardo", "count": 4, "languages": 1 }, { "order": 352, - "name": "carrenoalexander", + "name": "andeveling", "count": 4, "languages": 1 }, { "order": 353, - "name": "jadraz", + "name": "sbs24", "count": 4, "languages": 1 }, { "order": 354, - "name": "anvildestroyer", + "name": "carzep09", "count": 4, "languages": 1 }, { "order": 355, - "name": "luissssoto", + "name": "traver79", "count": 4, "languages": 1 }, { "order": 356, - "name": "albertorevel", + "name": "santiago-munoz-garcia", "count": 4, "languages": 1 }, { "order": 357, - "name": "juanca2805", + "name": "blasbarragan", "count": 4, "languages": 1 }, { "order": 358, - "name": "bladi23", + "name": "jerrysantana", "count": 4, "languages": 1 }, { "order": 359, - "name": "blasbarragan", + "name": "password1989", "count": 4, "languages": 1 }, { "order": 360, - "name": "jerrysantana", + "name": "bladi23", "count": 4, "languages": 1 }, { "order": 361, - "name": "password1989", + "name": "juanca2805", "count": 4, "languages": 1 }, { "order": 362, - "name": "abel-ade", + "name": "elhacedordecosas", "count": 4, "languages": 1 }, { "order": 363, - "name": "jairo-alejandro", + "name": "hugovrc", "count": 4, "languages": 1 }, { "order": 364, - "name": "sbs24", + "name": "mayerga", "count": 4, "languages": 1 }, { "order": 365, - "name": "traver79", + "name": "deivitdev", "count": 4, "languages": 1 }, { "order": 366, - "name": "ramxv", + "name": "jairo-alejandro", "count": 4, "languages": 1 }, { "order": 367, - "name": "inkhemi", + "name": "quejuan52", "count": 4, "languages": 1 }, { "order": 368, - "name": "juperdev", + "name": "abel-ade", "count": 4, "languages": 1 }, { "order": 369, - "name": "abelsrzz", + "name": "angelo-eyama", "count": 3, "languages": 3 }, { "order": 370, - "name": "angelo-eyama", + "name": "owen-ian", "count": 3, "languages": 3 }, @@ -2719,31 +2719,31 @@ }, { "order": 372, - "name": "oskarcali", + "name": "abelsrzz", "count": 3, "languages": 3 }, { "order": 373, - "name": "owen-ian", + "name": "jehiselruth", "count": 3, "languages": 3 }, { "order": 374, - "name": "jehiselruth", + "name": "oskarcali", "count": 3, "languages": 3 }, { "order": 375, - "name": "n-skot", + "name": "eloitr", "count": 3, "languages": 2 }, { "order": 376, - "name": "clotrack", + "name": "diegopc-dev", "count": 3, "languages": 2 }, @@ -2755,811 +2755,811 @@ }, { "order": 378, - "name": "alfarog507", + "name": "seba9906", "count": 3, "languages": 2 }, { "order": 379, - "name": "eloitr", + "name": "arliumdev", "count": 3, "languages": 2 }, { "order": 380, - "name": "diegopc-dev", + "name": "robindev1812", "count": 3, "languages": 2 }, { "order": 381, - "name": "robindev1812", + "name": "alfarog507", "count": 3, "languages": 2 }, { "order": 382, - "name": "arliumdev", + "name": "skala2301", "count": 3, "languages": 2 }, { "order": 383, - "name": "skala2301", + "name": "augustosdev", "count": 3, "languages": 2 }, { "order": 384, - "name": "pablotaber", + "name": "clotrack", "count": 3, "languages": 2 }, { "order": 385, - "name": "allanoscoding", + "name": "pablotaber", "count": 3, "languages": 2 }, { "order": 386, - "name": "seba9906", + "name": "allanoscoding", "count": 3, "languages": 2 }, { "order": 387, - "name": "augustosdev", + "name": "n-skot", "count": 3, "languages": 2 }, { "order": 388, - "name": "dylanb55", + "name": "bryanalzate007", "count": 3, "languages": 1 }, { "order": 389, - "name": "elbarbero", + "name": "tonywarcode", "count": 3, "languages": 1 }, { "order": 390, - "name": "mellamoomar", + "name": "exanderguitar", "count": 3, "languages": 1 }, { "order": 391, - "name": "oscar503sv", + "name": "elkin-dev", "count": 3, "languages": 1 }, { "order": 392, - "name": "alejomazov", + "name": "carlosalberto05", "count": 3, "languages": 1 }, { "order": 393, - "name": "bryanalzate007", + "name": "minn09", "count": 3, "languages": 1 }, { "order": 394, - "name": "ivanpelu7", + "name": "jorgegarcia-dev", "count": 3, "languages": 1 }, { "order": 395, - "name": "dmauricio4", + "name": "guillesese", "count": 3, "languages": 1 }, { "order": 396, - "name": "davidr1594", + "name": "tekatoki", "count": 3, "languages": 1 }, { "order": 397, - "name": "vandresca", + "name": "dandrusco", "count": 3, "languages": 1 }, { "order": 398, - "name": "marlonleon2023", + "name": "estelacode", "count": 3, "languages": 1 }, { "order": 399, - "name": "nikorasu-d", + "name": "strooplab", "count": 3, "languages": 1 }, { "order": 400, - "name": "barbafebles", + "name": "monikgbar", "count": 3, "languages": 1 }, { "order": 401, - "name": "heliercamejo", + "name": "mstaz4", "count": 3, "languages": 1 }, { "order": 402, - "name": "aggranadoss", + "name": "ramon-almeida", "count": 3, "languages": 1 }, { "order": 403, - "name": "dannyvera1234", + "name": "oscarhub90", "count": 3, "languages": 1 }, { "order": 404, - "name": "axelsparta", + "name": "artdugarte", "count": 3, "languages": 1 }, { "order": 405, - "name": "gitperalta", + "name": "elder202", "count": 3, "languages": 1 }, { "order": 406, - "name": "samuelarandia", + "name": "bertolini-victor", "count": 3, "languages": 1 }, { "order": 407, - "name": "jaimerocel96", + "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { "order": 408, - "name": "sitnestic", + "name": "rgeditv1", "count": 3, "languages": 1 }, { "order": 409, - "name": "matteozhao98", + "name": "frostbitepy", "count": 3, "languages": 1 }, { "order": 410, - "name": "tebaah", + "name": "antii16", "count": 3, "languages": 1 }, { "order": 411, - "name": "sebasgrdev", + "name": "mmacalli", "count": 3, "languages": 1 }, { "order": 412, - "name": "14davidnkt", + "name": "eliskopun", "count": 3, "languages": 1 }, { "order": 413, - "name": "legs30011", + "name": "jofedev", "count": 3, "languages": 1 }, { "order": 414, - "name": "dariorfm", + "name": "suescun845", "count": 3, "languages": 1 }, { "order": 415, - "name": "orlas135", + "name": "yeam-10", "count": 3, "languages": 1 }, { "order": 416, - "name": "arbenisacosta", + "name": "joandevpy", "count": 3, "languages": 1 }, { "order": 417, - "name": "hectoriglesias", + "name": "macova96", "count": 3, "languages": 1 }, { "order": 418, - "name": "matrix-miguel", + "name": "beonzj", "count": 3, "languages": 1 }, { "order": 419, - "name": "jacarrillob", + "name": "betzadev", "count": 3, "languages": 1 }, { "order": 420, - "name": "jelozanov", + "name": "nicoheguaburu", "count": 3, "languages": 1 }, { "order": 421, - "name": "andyfg0289", + "name": "mizadlogcia", "count": 3, "languages": 1 }, { "order": 422, - "name": "daniback95", + "name": "emilianohoyos", "count": 3, "languages": 1 }, { "order": 423, - "name": "r4kso", + "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { "order": 424, - "name": "singularpigeon", + "name": "zzepu", "count": 3, "languages": 1 }, { "order": 425, - "name": "sandracalatayud", + "name": "danielperezrubio", "count": 3, "languages": 1 }, { "order": 426, - "name": "andresargote", + "name": "marcoh2325", "count": 3, "languages": 1 }, { "order": 427, - "name": "fernandog25", + "name": "nathaliamf", "count": 3, "languages": 1 }, { "order": 428, - "name": "agusbelp", + "name": "jacarrillob", "count": 3, "languages": 1 }, { "order": 429, - "name": "uyarra73", + "name": "fdcorreadev", "count": 3, "languages": 1 }, { "order": 430, - "name": "asaelz", + "name": "matiascba27", "count": 3, "languages": 1 }, { "order": 431, - "name": "davidb313", + "name": "andresargote", "count": 3, "languages": 1 }, { "order": 432, - "name": "fdcorreadev", + "name": "victorsschz", "count": 3, "languages": 1 }, { "order": 433, - "name": "magupe09", + "name": "faga01", "count": 3, "languages": 1 }, { "order": 434, - "name": "nathaliamf", + "name": "dariorfm", "count": 3, "languages": 1 }, { "order": 435, - "name": "victorsschz", + "name": "hectoriglesias", "count": 3, "languages": 1 }, { "order": 436, - "name": "hatorob", + "name": "josueeeee", "count": 3, "languages": 1 }, { "order": 437, - "name": "zuluangel", + "name": "fernandog25", "count": 3, "languages": 1 }, { "order": 438, - "name": "matiascba27", + "name": "migueltfangche", "count": 3, "languages": 1 }, { "order": 439, - "name": "faga01", + "name": "emaenriquez", "count": 3, "languages": 1 }, { "order": 440, - "name": "ahinar", + "name": "matrix-miguel", "count": 3, "languages": 1 }, { "order": 441, - "name": "migueltfangche", + "name": "r4kso", "count": 3, "languages": 1 }, { "order": 442, - "name": "erysnell", + "name": "davidb313", "count": 3, "languages": 1 }, { "order": 443, - "name": "duendeintemporal", + "name": "arbenisacosta", "count": 3, "languages": 1 }, { "order": 444, - "name": "josueeeee", + "name": "sebascmb", "count": 3, "languages": 1 }, { "order": 445, - "name": "emaenriquez", + "name": "jelozanov", "count": 3, "languages": 1 }, { "order": 446, - "name": "sebascmb", + "name": "singularpigeon", "count": 3, "languages": 1 }, { "order": 447, - "name": "gpinedaoviedo", + "name": "duendeintemporal", "count": 3, "languages": 1 }, { "order": 448, - "name": "blfuentes", + "name": "asaelz", "count": 3, "languages": 1 }, { "order": 449, - "name": "javiearth", + "name": "gpinedaoviedo", "count": 3, "languages": 1 }, { "order": 450, - "name": "atienzar", + "name": "orlas135", "count": 3, "languages": 1 }, { "order": 451, - "name": "coshiloco", + "name": "zuluangel", "count": 3, "languages": 1 }, { "order": 452, - "name": "crisvigas", + "name": "uyarra73", "count": 3, "languages": 1 }, { "order": 453, - "name": "tomytsa", + "name": "sandracalatayud", "count": 3, "languages": 1 }, { "order": 454, - "name": "rocallejas", + "name": "agusbelp", "count": 3, "languages": 1 }, { "order": 455, - "name": "guido2288", + "name": "ahinar", "count": 3, "languages": 1 }, { "order": 456, - "name": "githjuan", + "name": "magupe09", "count": 3, "languages": 1 }, { "order": 457, - "name": "jeyker-dev", + "name": "daniback95", "count": 3, "languages": 1 }, { "order": 458, - "name": "eliskopun", + "name": "hatorob", "count": 3, "languages": 1 }, { "order": 459, - "name": "ramon-almeida", + "name": "erysnell", "count": 3, "languages": 1 }, { "order": 460, - "name": "danielperezrubio", + "name": "legs30011", "count": 3, "languages": 1 }, { "order": 461, - "name": "minn09", + "name": "andyfg0289", "count": 3, "languages": 1 }, { "order": 462, - "name": "elkin-dev", + "name": "14davidnkt", "count": 3, "languages": 1 }, { "order": 463, - "name": "bertolini-victor", + "name": "samuelarandia", "count": 3, "languages": 1 }, { "order": 464, - "name": "jorgegarcia-dev", + "name": "jaimerocel96", "count": 3, "languages": 1 }, { "order": 465, - "name": "suescun845", + "name": "gitperalta", "count": 3, "languages": 1 }, { "order": 466, - "name": "carlosalberto05", + "name": "dannyvera1234", "count": 3, "languages": 1 }, { "order": 467, - "name": "mmacalli", + "name": "axelsparta", "count": 3, "languages": 1 }, { "order": 468, - "name": "ggtorca", + "name": "tebaah", "count": 3, "languages": 1 }, { "order": 469, - "name": "mstaz4", + "name": "matteozhao98", "count": 3, "languages": 1 }, { "order": 470, - "name": "emilianohoyos", + "name": "crisvigas", "count": 3, "languages": 1 }, { "order": 471, - "name": "rgeditv1", + "name": "tomytsa", "count": 3, "languages": 1 }, { "order": 472, - "name": "elder202", + "name": "blfuentes", "count": 3, "languages": 1 }, { "order": 473, - "name": "dandrusco", + "name": "sebasgrdev", "count": 3, "languages": 1 }, { "order": 474, - "name": "mizadlogcia", + "name": "sitnestic", "count": 3, "languages": 1 }, { "order": 475, - "name": "antii16", + "name": "confley", "count": 3, "languages": 1 }, { "order": 476, - "name": "strooplab", + "name": "francofmv", "count": 3, "languages": 1 }, { "order": 477, - "name": "marcoh2325", + "name": "david-quinones", "count": 3, "languages": 1 }, { "order": 478, - "name": "frostbitepy", + "name": "marce1084", "count": 3, "languages": 1 }, { "order": 479, - "name": "zzepu", + "name": "freedainew", "count": 3, "languages": 1 }, { "order": 480, - "name": "tekatoki", + "name": "rubioj17", "count": 3, "languages": 1 }, { "order": 481, - "name": "yeam-10", + "name": "kine-jdf", "count": 3, "languages": 1 }, { "order": 482, - "name": "exanderguitar", + "name": "kingsaul22", "count": 3, "languages": 1 }, { "order": 483, - "name": "camilo-zuluaga", + "name": "ainoaran", "count": 3, "languages": 1 }, { "order": 484, - "name": "macova96", + "name": "fluna29", "count": 3, "languages": 1 }, { "order": 485, - "name": "betzadev", + "name": "xurxogz", "count": 3, "languages": 1 }, { "order": 486, - "name": "monikgbar", + "name": "davidsorroche", "count": 3, "languages": 1 }, { "order": 487, - "name": "guillesese", + "name": "natalinacn", "count": 3, "languages": 1 }, { "order": 488, - "name": "artdugarte", + "name": "yaretzyrb", "count": 3, "languages": 1 }, { "order": 489, - "name": "jofedev", + "name": "swifty0705", "count": 3, "languages": 1 }, { "order": 490, - "name": "oscarhub90", + "name": "marianoemir", "count": 3, "languages": 1 }, { "order": 491, - "name": "tonywarcode", + "name": "guido2288", "count": 3, "languages": 1 }, { "order": 492, - "name": "oscargeovannyrincon", + "name": "githjuan", "count": 3, "languages": 1 }, { "order": 493, - "name": "joandevpy", + "name": "rocallejas", "count": 3, "languages": 1 }, { "order": 494, - "name": "estelacode", + "name": "jeyker-dev", "count": 3, "languages": 1 }, { "order": 495, - "name": "xurxogz", + "name": "barbafebles", "count": 3, "languages": 1 }, { "order": 496, - "name": "freedainew", + "name": "aggranadoss", "count": 3, "languages": 1 }, { "order": 497, - "name": "swifty0705", + "name": "heliercamejo", "count": 3, "languages": 1 }, { "order": 498, - "name": "marce1084", + "name": "coshiloco", "count": 3, "languages": 1 }, { "order": 499, - "name": "rubioj17", + "name": "atienzar", "count": 3, "languages": 1 }, { "order": 500, - "name": "kingsaul22", + "name": "javiearth", "count": 3, "languages": 1 }, { "order": 501, - "name": "ainoaran", + "name": "marlonleon2023", "count": 3, "languages": 1 }, { "order": 502, - "name": "francofmv", + "name": "vandresca", "count": 3, "languages": 1 }, { "order": 503, - "name": "marianoemir", + "name": "ggtorca", "count": 3, "languages": 1 }, { "order": 504, - "name": "davidsorroche", + "name": "ivanpelu7", "count": 3, "languages": 1 }, { "order": 505, - "name": "david-quinones", + "name": "alejomazov", "count": 3, "languages": 1 }, { "order": 506, - "name": "fluna29", + "name": "oscar503sv", "count": 3, "languages": 1 }, { "order": 507, - "name": "natalinacn", + "name": "dmauricio4", "count": 3, "languages": 1 }, { "order": 508, - "name": "kine-jdf", + "name": "davidr1594", "count": 3, "languages": 1 }, { "order": 509, - "name": "yaretzyrb", + "name": "mellamoomar", "count": 3, "languages": 1 }, { "order": 510, - "name": "confley", + "name": "ikeragi05", "count": 3, "languages": 1 }, { "order": 511, - "name": "beonzj", + "name": "nikorasu-d", "count": 3, "languages": 1 }, { "order": 512, - "name": "davidvilem", + "name": "johnalexguerrero", "count": 3, "languages": 1 }, @@ -3571,115 +3571,115 @@ }, { "order": 514, - "name": "juxxon23", + "name": "davidvilem", "count": 3, "languages": 1 }, { "order": 515, - "name": "frangarmez21", + "name": "elbarbero", "count": 3, "languages": 1 }, { "order": 516, - "name": "ikeragi05", + "name": "frangarmez21", "count": 3, "languages": 1 }, { "order": 517, - "name": "johnalexguerrero", + "name": "dylanb55", "count": 3, "languages": 1 }, { "order": 518, - "name": "devvdroid01", - "count": 2, - "languages": 2 + "name": "juxxon23", + "count": 3, + "languages": 1 }, { "order": 519, - "name": "sgb004", + "name": "juan-wills", "count": 2, "languages": 2 }, { "order": 520, - "name": "chuanmi", + "name": "lilberick", "count": 2, "languages": 2 }, { "order": 521, - "name": "jlcareglio", + "name": "tecfer", "count": 2, "languages": 2 }, { "order": 522, - "name": "jurgen-alfaro", + "name": "chuanmi", "count": 2, "languages": 2 }, { "order": 523, - "name": "lydaf", + "name": "carresoft", "count": 2, "languages": 2 }, { "order": 524, - "name": "carresoft", + "name": "raul-progr", "count": 2, "languages": 2 }, { "order": 525, - "name": "ismaelmatiz", + "name": "felipedev303", "count": 2, "languages": 2 }, { "order": 526, - "name": "tecfer", + "name": "alejosor", "count": 2, "languages": 2 }, { "order": 527, - "name": "elsanty08", + "name": "lemito66", "count": 2, "languages": 2 }, { "order": 528, - "name": "jorgesilencio", + "name": "jmofuture", "count": 2, "languages": 2 }, { "order": 529, - "name": "berentolkien", + "name": "angel-alvarez-dev", "count": 2, "languages": 2 }, { "order": 530, - "name": "felipedev303", + "name": "berentolkien", "count": 2, "languages": 2 }, { "order": 531, - "name": "lemito66", + "name": "camiloforero1997", "count": 2, "languages": 2 }, { "order": 532, - "name": "alexsamboy", + "name": "jorgesilencio", "count": 2, "languages": 2 }, @@ -3691,55 +3691,55 @@ }, { "order": 534, - "name": "jovany-java", + "name": "jurgen-alfaro", "count": 2, "languages": 2 }, { "order": 535, - "name": "raul-progr", + "name": "alexsamboy", "count": 2, "languages": 2 }, { "order": 536, - "name": "jmofuture", + "name": "jovany-java", "count": 2, "languages": 2 }, { "order": 537, - "name": "angel-alvarez-dev", + "name": "jlcareglio", "count": 2, "languages": 2 }, { "order": 538, - "name": "lilberick", + "name": "elsanty08", "count": 2, "languages": 2 }, { "order": 539, - "name": "camiloforero1997", + "name": "lydaf", "count": 2, "languages": 2 }, { "order": 540, - "name": "alejosor", + "name": "ismaelmatiz", "count": 2, "languages": 2 }, { "order": 541, - "name": "juan-wills", + "name": "sgb004", "count": 2, "languages": 2 }, { "order": 542, - "name": "lurtur", + "name": "devvdroid01", "count": 2, "languages": 2 }, @@ -3751,955 +3751,955 @@ }, { "order": 544, - "name": "elmarqueli", + "name": "lurtur", "count": 2, - "languages": 1 + "languages": 2 }, { "order": 545, - "name": "tiaguiito3", + "name": "juanseevn", "count": 2, "languages": 1 }, { "order": 546, - "name": "angelargumedo", + "name": "miguelberrio0810", "count": 2, "languages": 1 }, { "order": 547, - "name": "reaien", + "name": "victore16", "count": 2, "languages": 1 }, { "order": 548, - "name": "rikar20", + "name": "zalazarmartin", "count": 2, "languages": 1 }, { "order": 549, - "name": "vdroiid", + "name": "alejandrovelasquezr", "count": 2, "languages": 1 }, { "order": 550, - "name": "frannmv", + "name": "dokeys28", "count": 2, "languages": 1 }, { "order": 551, - "name": "rrcoder", + "name": "noaregui", "count": 2, "languages": 1 }, { "order": 552, - "name": "diegosilval", + "name": "sofia-d-p", "count": 2, "languages": 1 }, { "order": 553, - "name": "nandaalf", + "name": "freyfonseca", "count": 2, "languages": 1 }, { "order": 554, - "name": "hawkbott", + "name": "anblackter", "count": 2, "languages": 1 }, { "order": 555, - "name": "tomasmarquez81", + "name": "fjsubero", "count": 2, "languages": 1 }, { "order": 556, - "name": "poetry0354", + "name": "gregfc95", "count": 2, "languages": 1 }, { "order": 557, - "name": "santiagocuevas2003", + "name": "nach012", "count": 2, "languages": 1 }, { "order": 558, - "name": "lmedina96", + "name": "pablosalme", "count": 2, "languages": 1 }, { "order": 559, - "name": "lorenamesa", + "name": "kcx46", "count": 2, "languages": 1 }, { "order": 560, - "name": "raulallue", + "name": "aboredllama", "count": 2, "languages": 1 }, { "order": 561, - "name": "luciarf", + "name": "jmontoyac", "count": 2, "languages": 1 }, { "order": 562, - "name": "aserranot", + "name": "josue-py", "count": 2, "languages": 1 }, { "order": 563, - "name": "devcherry1", + "name": "dariangl", "count": 2, "languages": 1 }, { "order": 564, - "name": "yowcloud", + "name": "alejandro-mantilla", "count": 2, "languages": 1 }, { "order": 565, - "name": "fefestuve", + "name": "inf015", "count": 2, "languages": 1 }, { "order": 566, - "name": "fsfigueroa77", + "name": "dota43ver", "count": 2, "languages": 1 }, { "order": 567, - "name": "nahuelborromeo", + "name": "culebropalido", "count": 2, "languages": 1 }, { "order": 568, - "name": "peibolstrike", + "name": "rojasricoo", "count": 2, "languages": 1 }, { "order": 569, - "name": "dararod", + "name": "csaraugusto2", "count": 2, "languages": 1 }, { "order": 570, - "name": "navarroemiliano", + "name": "lauradiazm29", "count": 2, "languages": 1 }, { "order": 571, - "name": "waldid32", + "name": "fernandoatello", "count": 2, "languages": 1 }, { "order": 572, - "name": "mikelroset", + "name": "vesubius", "count": 2, "languages": 1 }, { "order": 573, - "name": "reanthonyh", + "name": "s384", "count": 2, "languages": 1 }, { "order": 574, - "name": "roilhi", + "name": "aegpgrafologo", "count": 2, "languages": 1 }, { "order": 575, - "name": "cristiansystem", + "name": "e-techgod", "count": 2, "languages": 1 }, { "order": 576, - "name": "evelynnobile", + "name": "baauus", "count": 2, "languages": 1 }, { "order": 577, - "name": "nicolastapiasanz", + "name": "ziellucio01", "count": 2, "languages": 1 }, { "order": 578, - "name": "gomezcamilo9701", + "name": "santiagodc8", "count": 2, "languages": 1 }, { "order": 579, - "name": "vicgallego", + "name": "eriickm", "count": 2, "languages": 1 }, { "order": 580, - "name": "freddyasierraj", + "name": "pakomor", "count": 2, "languages": 1 }, { "order": 581, - "name": "luis-vb", + "name": "dkp-dev", "count": 2, "languages": 1 }, { "order": 582, - "name": "vikkanh", + "name": "adogdev", "count": 2, "languages": 1 }, { "order": 583, - "name": "juaruibr", + "name": "ignaciogm1973", "count": 2, "languages": 1 }, { "order": 584, - "name": "crisdev3", + "name": "josephfaster", "count": 2, "languages": 1 }, { "order": 585, - "name": "frealexandro", + "name": "pedrojog", "count": 2, "languages": 1 }, { "order": 586, - "name": "gamitocu", + "name": "carlosmarte23", "count": 2, "languages": 1 }, { "order": 587, - "name": "saracorraless", + "name": "tic4", "count": 2, "languages": 1 }, { "order": 588, - "name": "cesarocbu", + "name": "julind0", "count": 2, "languages": 1 }, { "order": 589, - "name": "jeisonredondo", + "name": "christiancoc", "count": 2, "languages": 1 }, { "order": 590, - "name": "alanox1", + "name": "javitron100", "count": 2, "languages": 1 }, { "order": 591, - "name": "christianumb", + "name": "steven9708m", "count": 2, "languages": 1 }, { "order": 592, - "name": "jhonf1992", + "name": "soydaviddev", "count": 2, "languages": 1 }, { "order": 593, - "name": "k4rv3r", + "name": "nevaito", "count": 2, "languages": 1 }, { "order": 594, - "name": "rikar2o", + "name": "fabianpa505", "count": 2, "languages": 1 }, { "order": 595, - "name": "rolo27s", + "name": "nachodev7", "count": 2, "languages": 1 }, { "order": 596, - "name": "franciscocuminilondero", + "name": "jsacristanbeltri", "count": 2, "languages": 1 }, { "order": 597, - "name": "wesborland-github", + "name": "cipollalucas", "count": 2, "languages": 1 }, { "order": 598, - "name": "doblea74", + "name": "devcherry1", "count": 2, "languages": 1 }, { "order": 599, - "name": "matiasfarfan89", + "name": "zeti1231", "count": 2, "languages": 1 }, { "order": 600, - "name": "nxl22", + "name": "josegago27", "count": 2, "languages": 1 }, { "order": 601, - "name": "valeriatorrealba", + "name": "gmigues", "count": 2, "languages": 1 }, { "order": 602, - "name": "farthaz", + "name": "dans182", "count": 2, "languages": 1 }, { "order": 603, - "name": "aleoe01", + "name": "jheisonquiroga", "count": 2, "languages": 1 }, { "order": 604, - "name": "jaimemunozdev", + "name": "misterdan100", "count": 2, "languages": 1 }, { "order": 605, - "name": "miguelrejon96", + "name": "mickel-arroz", "count": 2, "languages": 1 }, { "order": 606, - "name": "jorge186414", + "name": "jhonf1992", "count": 2, "languages": 1 }, { "order": 607, - "name": "andnikdev", + "name": "farthaz", "count": 2, "languages": 1 }, { "order": 608, - "name": "soldochris", + "name": "murquisdev", "count": 2, "languages": 1 }, { "order": 609, - "name": "leonardo291024", + "name": "cpcarlosprieto", "count": 2, "languages": 1 }, { "order": 610, - "name": "mickel-arroz", + "name": "valeriatorrealba", "count": 2, "languages": 1 }, { "order": 611, - "name": "gianbordon", + "name": "jorge186414", "count": 2, "languages": 1 }, { "order": 612, - "name": "cpcarlosprieto", + "name": "davhage", "count": 2, "languages": 1 }, { "order": 613, - "name": "juangomezn", + "name": "lmedina96", "count": 2, "languages": 1 }, { "order": 614, - "name": "angelvelasco1", + "name": "matiasfarfan89", "count": 2, "languages": 1 }, { "order": 615, - "name": "ssanjua", + "name": "joapalobael", "count": 2, "languages": 1 }, { "order": 616, - "name": "murquisdev", + "name": "alanox1", "count": 2, "languages": 1 }, { "order": 617, - "name": "joapalobael", + "name": "santiagocuevas2003", "count": 2, "languages": 1 }, { "order": 618, - "name": "davhage", + "name": "franciscocuminilondero", "count": 2, "languages": 1 }, { "order": 619, - "name": "erikayeah", + "name": "gianbordon", "count": 2, "languages": 1 }, { "order": 620, - "name": "misterdan100", + "name": "christianhernandezb", "count": 2, "languages": 1 }, { "order": 621, - "name": "memogv", + "name": "leonardo291024", "count": 2, "languages": 1 }, { "order": 622, - "name": "glaboryp", + "name": "haryblanco20", "count": 2, "languages": 1 }, { "order": 623, - "name": "ovjohn", + "name": "cesarocbu", "count": 2, "languages": 1 }, { "order": 624, - "name": "haryblanco20", + "name": "christianumb", "count": 2, "languages": 1 }, { "order": 625, - "name": "christianhernandezb", + "name": "aleoe01", "count": 2, "languages": 1 }, { "order": 626, - "name": "akzorla", + "name": "andnikdev", "count": 2, "languages": 1 }, { "order": 627, - "name": "0pio", + "name": "angelvelasco1", "count": 2, "languages": 1 }, { "order": 628, - "name": "whiterunjarl", + "name": "glaboryp", "count": 2, "languages": 1 }, { "order": 629, - "name": "porto1090", + "name": "nxl22", "count": 2, "languages": 1 }, { "order": 630, - "name": "johannhsdev", + "name": "erikayeah", "count": 2, "languages": 1 }, { "order": 631, - "name": "jago86", + "name": "jeisonredondo", "count": 2, "languages": 1 }, { "order": 632, - "name": "diegokarabin", + "name": "rikar2o", "count": 2, "languages": 1 }, { "order": 633, - "name": "gugliio", + "name": "rolo27s", "count": 2, "languages": 1 }, { "order": 634, - "name": "kcx46", + "name": "miguelrejon96", "count": 2, "languages": 1 }, { "order": 635, - "name": "nachodev7", + "name": "doblea74", "count": 2, "languages": 1 }, { "order": 636, - "name": "fernandoatello", + "name": "jaimemunozdev", "count": 2, "languages": 1 }, { "order": 637, - "name": "pablosalme", + "name": "tomasmarquez81", "count": 2, "languages": 1 }, { "order": 638, - "name": "jsacristanbeltri", + "name": "akzorla", "count": 2, "languages": 1 }, { "order": 639, - "name": "baauus", + "name": "juangomezn", "count": 2, "languages": 1 }, { "order": 640, - "name": "dkp-dev", + "name": "soldochris", "count": 2, "languages": 1 }, { "order": 641, - "name": "s384", + "name": "k4rv3r", "count": 2, "languages": 1 }, { "order": 642, - "name": "javitron100", + "name": "wesborland-github", "count": 2, "languages": 1 }, { "order": 643, - "name": "lauradiazm29", + "name": "ovjohn", "count": 2, "languages": 1 }, { "order": 644, - "name": "pakomor", + "name": "memogv", "count": 2, "languages": 1 }, { "order": 645, - "name": "adogdev", + "name": "navarroemiliano", "count": 2, "languages": 1 }, { "order": 646, - "name": "eriickm", + "name": "waldid32", "count": 2, "languages": 1 }, { "order": 647, - "name": "christiancoc", + "name": "mikelroset", "count": 2, "languages": 1 }, { "order": 648, - "name": "jheisonquiroga", + "name": "dararod", "count": 2, "languages": 1 }, { "order": 649, - "name": "josegago27", + "name": "freddyasierraj", "count": 2, "languages": 1 }, { "order": 650, - "name": "rojasricoo", + "name": "gomezcamilo9701", "count": 2, "languages": 1 }, { "order": 651, - "name": "inf015", + "name": "nicolastapiasanz", "count": 2, "languages": 1 }, { "order": 652, - "name": "csaraugusto2", + "name": "vicgallego", "count": 2, "languages": 1 }, { "order": 653, - "name": "zalazarmartin", + "name": "porto1090", "count": 2, "languages": 1 }, { "order": 654, - "name": "ziellucio01", + "name": "0pio", "count": 2, "languages": 1 }, { "order": 655, - "name": "dota43ver", + "name": "whiterunjarl", "count": 2, "languages": 1 }, { "order": 656, - "name": "fjsubero", + "name": "crisdev3", "count": 2, "languages": 1 }, { "order": 657, - "name": "julind0", + "name": "gamitocu", "count": 2, "languages": 1 }, { "order": 658, - "name": "jmontoyac", + "name": "luis-vb", "count": 2, "languages": 1 }, { "order": 659, - "name": "dariangl", + "name": "saracorraless", "count": 2, "languages": 1 }, { "order": 660, - "name": "soydaviddev", + "name": "vikkanh", "count": 2, "languages": 1 }, { "order": 661, - "name": "sofia-d-p", + "name": "juaruibr", "count": 2, "languages": 1 }, { "order": 662, - "name": "e-techgod", + "name": "frealexandro", "count": 2, "languages": 1 }, { "order": 663, - "name": "aboredllama", + "name": "roilhi", "count": 2, "languages": 1 }, { "order": 664, - "name": "nevaito", + "name": "evelynnobile", "count": 2, "languages": 1 }, { "order": 665, - "name": "josue-py", + "name": "cristiansystem", "count": 2, "languages": 1 }, { "order": 666, - "name": "nach012", + "name": "peibolstrike", "count": 2, "languages": 1 }, { "order": 667, - "name": "dans182", + "name": "nahuelborromeo", "count": 2, "languages": 1 }, { "order": 668, - "name": "freyfonseca", + "name": "arhl2023", "count": 2, "languages": 1 }, { "order": 669, - "name": "aegpgrafologo", + "name": "yowcloud", "count": 2, "languages": 1 }, { "order": 670, - "name": "alejandrovelasquezr", + "name": "jcknot", "count": 2, "languages": 1 }, { "order": 671, - "name": "fabianpa505", + "name": "coronelsam", "count": 2, "languages": 1 }, { "order": 672, - "name": "carlosmarte23", + "name": "peeanoot", "count": 2, "languages": 1 }, { "order": 673, - "name": "anblackter", + "name": "anaroncero", "count": 2, "languages": 1 }, { "order": 674, - "name": "steven9708m", + "name": "marioyellowy", "count": 2, "languages": 1 }, { "order": 675, - "name": "tic4", + "name": "hersac", "count": 2, "languages": 1 }, { "order": 676, - "name": "josephfaster", + "name": "isidrojng", "count": 2, "languages": 1 }, { "order": 677, - "name": "gregfc95", + "name": "lorenamesa", "count": 2, "languages": 1 }, { "order": 678, - "name": "victore16", + "name": "jago86", "count": 2, "languages": 1 }, { "order": 679, - "name": "dokeys28", + "name": "johannhsdev", "count": 2, "languages": 1 }, { "order": 680, - "name": "noaregui", + "name": "diegokarabin", "count": 2, "languages": 1 }, { "order": 681, - "name": "alejandro-mantilla", + "name": "gugliio", "count": 2, "languages": 1 }, { "order": 682, - "name": "gmigues", + "name": "fefestuve", "count": 2, "languages": 1 }, { "order": 683, - "name": "juanseevn", + "name": "fsfigueroa77", "count": 2, "languages": 1 }, { "order": 684, - "name": "vesubius", + "name": "reanthonyh", "count": 2, "languages": 1 }, { "order": 685, - "name": "zeti1231", + "name": "nandaalf", "count": 2, "languages": 1 }, { "order": 686, - "name": "cipollalucas", + "name": "vdroiid", "count": 2, "languages": 1 }, { "order": 687, - "name": "miguelberrio0810", + "name": "aserranot", "count": 2, "languages": 1 }, { "order": 688, - "name": "santiagodc8", + "name": "raulallue", "count": 2, "languages": 1 }, { "order": 689, - "name": "pedrojog", + "name": "luciarf", "count": 2, "languages": 1 }, { "order": 690, - "name": "culebropalido", + "name": "poetry0354", "count": 2, "languages": 1 }, { "order": 691, - "name": "marioyellowy", + "name": "rikar20", "count": 2, "languages": 1 }, { "order": 692, - "name": "jcknot", + "name": "reaien", "count": 2, "languages": 1 }, { "order": 693, - "name": "peeanoot", + "name": "elmarqueli", "count": 2, "languages": 1 }, { "order": 694, - "name": "coronelsam", + "name": "hawkbott", "count": 2, "languages": 1 }, { "order": 695, - "name": "arhl2023", + "name": "tiaguiito3", "count": 2, "languages": 1 }, { "order": 696, - "name": "isidrojng", + "name": "bereverte", "count": 2, "languages": 1 }, { "order": 697, - "name": "anaroncero", + "name": "sdm29gh", "count": 2, "languages": 1 }, { "order": 698, - "name": "hersac", + "name": "frannmv", "count": 2, "languages": 1 }, { "order": 699, - "name": "bereverte", + "name": "diegosilval", "count": 2, "languages": 1 }, { "order": 700, - "name": "vecinacoo", + "name": "ssanjua", "count": 2, "languages": 1 }, { "order": 701, - "name": "juanmjimenezs", + "name": "zonnen69", "count": 2, "languages": 1 }, { "order": 702, - "name": "armentaangel", + "name": "angelargumedo", "count": 2, "languages": 1 }, @@ -4711,2917 +4711,2947 @@ }, { "order": 704, - "name": "sdm29gh", + "name": "rrcoder", "count": 2, "languages": 1 }, { "order": 705, - "name": "zonnen69", + "name": "jmichael39", "count": 2, "languages": 1 }, { "order": 706, - "name": "jmichael39", + "name": "juanmjimenezs", "count": 2, "languages": 1 }, { "order": 707, - "name": "torvicv", - "count": 1, + "name": "armentaangel", + "count": 2, "languages": 1 }, { "order": 708, - "name": "dgquintero", - "count": 1, + "name": "vecinacoo", + "count": 2, "languages": 1 }, { "order": 709, - "name": "c-blskv", + "name": "wijimenezz", "count": 1, "languages": 1 }, { "order": 710, - "name": "emaerniquez", + "name": "rafapg93", "count": 1, "languages": 1 }, { "order": 711, - "name": "carolhs92", + "name": "vickalc", "count": 1, "languages": 1 }, { "order": 712, - "name": "pwrxman", + "name": "riukac", "count": 1, "languages": 1 }, { "order": 713, - "name": "leonardo-henao", + "name": "rusian69", "count": 1, "languages": 1 }, { "order": 714, - "name": "juancamilofvx", + "name": "edgarmedranoa", "count": 1, "languages": 1 }, { "order": 715, - "name": "vikernes27666", + "name": "sve-nnn", "count": 1, "languages": 1 }, { "order": 716, - "name": "cub-tor", + "name": "emiliordev", "count": 1, "languages": 1 }, { "order": 717, - "name": "nightmare79", + "name": "acirdeveloper", "count": 1, "languages": 1 }, { "order": 718, - "name": "carlosmperezm", + "name": "orzefox", "count": 1, "languages": 1 }, { "order": 719, - "name": "gonzalinuz18", + "name": "nicoloboo02", "count": 1, "languages": 1 }, { "order": 720, - "name": "qwik-zghieb", + "name": "jony-english22", "count": 1, "languages": 1 }, { "order": 721, - "name": "miquelrr", + "name": "deathbat00", "count": 1, "languages": 1 }, { "order": 722, - "name": "miguel2rar", + "name": "rocha30", "count": 1, "languages": 1 }, { "order": 723, - "name": "eamartin", + "name": "markayala13", "count": 1, "languages": 1 }, { "order": 724, - "name": "gabriel-dangelo", + "name": "angeloro", "count": 1, "languages": 1 }, { "order": 725, - "name": "agustinfccll", + "name": "righelch", "count": 1, "languages": 1 }, { "order": 726, - "name": "anitandil", + "name": "albertovf", "count": 1, "languages": 1 }, { "order": 727, - "name": "evilpodato04", + "name": "sergiopq", "count": 1, "languages": 1 }, { "order": 728, - "name": "francomyburg", + "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { "order": 729, - "name": "neicervb", + "name": "ouendinga", "count": 1, "languages": 1 }, { "order": 730, - "name": "josephinoo", + "name": "evilpodato04", "count": 1, "languages": 1 }, { "order": 731, - "name": "arathhh8", + "name": "agustinfccll", "count": 1, "languages": 1 }, { "order": 732, - "name": "paluzz", + "name": "miguel2rar", "count": 1, "languages": 1 }, { "order": 733, - "name": "theposi", + "name": "anitandil", "count": 1, "languages": 1 }, { "order": 734, - "name": "vinyoles", + "name": "neicervb", "count": 1, "languages": 1 }, { "order": 735, - "name": "omarroman29", + "name": "eamartin", "count": 1, "languages": 1 }, { "order": 736, - "name": "1cel4nc3", + "name": "miquelrr", "count": 1, "languages": 1 }, { "order": 737, - "name": "sergio-strazzacappa", + "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { "order": 738, - "name": "corvo-99", + "name": "francomyburg", "count": 1, "languages": 1 }, { "order": 739, - "name": "danielcastillo1112", + "name": "josephinoo", "count": 1, "languages": 1 }, { "order": 740, - "name": "malkarmah", + "name": "daichiko", "count": 1, "languages": 1 }, { "order": 741, - "name": "devm0nk3y", + "name": "willypaz243", "count": 1, "languages": 1 }, { "order": 742, - "name": "sirvega83", + "name": "rawc1nnamon", "count": 1, "languages": 1 }, { "order": 743, - "name": "franpua", + "name": "girngoma", "count": 1, "languages": 1 }, { "order": 744, - "name": "van-02", + "name": "juampaweb", "count": 1, "languages": 1 }, { "order": 745, - "name": "x3mboy", + "name": "marcos0803", "count": 1, "languages": 1 }, { "order": 746, - "name": "mickysoft", + "name": "anexo01", "count": 1, "languages": 1 }, { "order": 747, - "name": "deimoshall", + "name": "juli-m4", "count": 1, "languages": 1 }, { "order": 748, - "name": "palons29", + "name": "jchernandez87", "count": 1, "languages": 1 }, { "order": 749, - "name": "serg032", + "name": "juan-cruz01", "count": 1, "languages": 1 }, { "order": 750, - "name": "seigigim", + "name": "kronoscba", "count": 1, "languages": 1 }, { "order": 751, - "name": "cibacoa", + "name": "claudios1980", "count": 1, "languages": 1 }, { "order": 752, - "name": "axelwestman", + "name": "natanaelzubiri", "count": 1, "languages": 1 }, { "order": 753, - "name": "javodevon", + "name": "lizzymaken", "count": 1, "languages": 1 }, { "order": 754, - "name": "mauricioyair", + "name": "jereaguilar", "count": 1, "languages": 1 }, { "order": 755, - "name": "manuhssj", + "name": "neshurtado", "count": 1, "languages": 1 }, { "order": 756, - "name": "coletonosh", + "name": "masenace", "count": 1, "languages": 1 }, { "order": 757, - "name": "manugonzalito", + "name": "idiegorojas", "count": 1, "languages": 1 }, { "order": 758, - "name": "gizelads", + "name": "chema-dw", "count": 1, "languages": 1 }, { "order": 759, - "name": "lucc4sz", + "name": "latorredev", "count": 1, "languages": 1 }, { "order": 760, - "name": "feliaguirre7", + "name": "jandortiz", "count": 1, "languages": 1 }, { "order": 761, - "name": "rulo77", + "name": "demegorash", "count": 1, "languages": 1 }, { "order": 762, - "name": "is2095", + "name": "deivimiller", "count": 1, "languages": 1 }, { "order": 763, - "name": "jancalos", + "name": "snowcardenas", "count": 1, "languages": 1 }, { "order": 764, - "name": "marcosapodaca", + "name": "xalejandrow", "count": 1, "languages": 1 }, { "order": 765, - "name": "angelcruzg23", + "name": "wallsified", "count": 1, "languages": 1 }, { "order": 766, - "name": "ca2puntosv", + "name": "sherkla12e", "count": 1, "languages": 1 }, { "order": 767, - "name": "armm77", + "name": "turudev1979", "count": 1, "languages": 1 }, { "order": 768, - "name": "afacorroloscos", + "name": "miguelmancebo", "count": 1, "languages": 1 }, { "order": 769, - "name": "rocadev2714", + "name": "alejandro000", "count": 1, "languages": 1 }, { "order": 770, - "name": "chrisfelixgil", + "name": "miguelangel861", "count": 1, "languages": 1 }, { "order": 771, - "name": "sandrarg85", + "name": "obed-tc", "count": 1, "languages": 1 }, { "order": 772, - "name": "protpus98", + "name": "krisipo", "count": 1, "languages": 1 }, { "order": 773, - "name": "rootqui", + "name": "davidgramiro", "count": 1, "languages": 1 }, { "order": 774, - "name": "ishimaku", + "name": "luceldasilva", "count": 1, "languages": 1 }, { "order": 775, - "name": "pkmaventura", + "name": "m4xxdev", "count": 1, "languages": 1 }, { "order": 776, - "name": "miguelgargallo", + "name": "jrgranadosb", "count": 1, "languages": 1 }, { "order": 777, - "name": "astriebeck", + "name": "90dread", "count": 1, "languages": 1 }, { "order": 778, - "name": "lobogeekmx", + "name": "dimanu-py", "count": 1, "languages": 1 }, { "order": 779, - "name": "marvinagui", + "name": "marcelinoarias369", "count": 1, "languages": 1 }, { "order": 780, - "name": "marqitos", + "name": "gmedinat911", "count": 1, "languages": 1 }, { "order": 781, - "name": "nunezlagos", + "name": "alejarandro", "count": 1, "languages": 1 }, { "order": 782, - "name": "jcrobles99", + "name": "e-xtian", "count": 1, "languages": 1 }, { "order": 783, - "name": "ledyam", + "name": "tashidian", "count": 1, "languages": 1 }, { "order": 784, - "name": "jatomas", + "name": "eljavi0", "count": 1, "languages": 1 }, { "order": 785, - "name": "jaennova", + "name": "xtinarita", "count": 1, "languages": 1 }, { "order": 786, - "name": "luisalberto22", + "name": "pr1de-23", "count": 1, "languages": 1 }, { "order": 787, - "name": "francisleble", + "name": "diegogomezcor4", "count": 1, "languages": 1 }, { "order": 788, - "name": "deiiviitdev", + "name": "v0l0v", "count": 1, "languages": 1 }, { "order": 789, - "name": "braiso-22", + "name": "carlostoledoe", "count": 1, "languages": 1 }, { "order": 790, - "name": "daniel-cas", + "name": "pablom-2015", "count": 1, "languages": 1 }, { "order": 791, - "name": "acirdevelper", + "name": "jafuma0320", "count": 1, "languages": 1 }, { "order": 792, - "name": "borjadelgadodev", + "name": "yamiyugi25", "count": 1, "languages": 1 }, { "order": 793, - "name": "elpeque29", + "name": "bassalex27", "count": 1, "languages": 1 }, { "order": 794, - "name": "jhordanluyo", + "name": "devkenn", "count": 1, "languages": 1 }, { "order": 795, - "name": "davidcv-dev", + "name": "vmarialuzm", "count": 1, "languages": 1 }, { "order": 796, - "name": "mbmaeso", + "name": "francgci", "count": 1, "languages": 1 }, { "order": 797, - "name": "alvarominarro", + "name": "yetlanezils", "count": 1, "languages": 1 }, { "order": 798, - "name": "bjchavez", + "name": "judithernandez", "count": 1, "languages": 1 }, { "order": 799, - "name": "madelefonb", + "name": "cris10026", "count": 1, "languages": 1 }, { "order": 800, - "name": "lfwzk", + "name": "dakkaj", "count": 1, "languages": 1 }, { "order": 801, - "name": "ercky1980", + "name": "ferngpv", "count": 1, "languages": 1 }, { "order": 802, - "name": "jsruedatorres", + "name": "mamartinez14", "count": 1, "languages": 1 }, { "order": 803, - "name": "jacobrwx", + "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { "order": 804, - "name": "abengl", + "name": "experthacker444", "count": 1, "languages": 1 }, { "order": 805, - "name": "jd-gm", + "name": "pushodev", "count": 1, "languages": 1 }, { "order": 806, - "name": "lucianogriffa", + "name": "ignacioskm", "count": 1, "languages": 1 }, { "order": 807, - "name": "quirogapau", + "name": "luisangeles20", "count": 1, "languages": 1 }, { "order": 808, - "name": "joseperesini", + "name": "xcortes", "count": 1, "languages": 1 }, { "order": 809, - "name": "mhrosariom", + "name": "isaacdci", "count": 1, "languages": 1 }, { "order": 810, - "name": "sergioab7", + "name": "yeisongil", "count": 1, "languages": 1 }, { "order": 811, - "name": "santaravena", + "name": "jalonso76", "count": 1, "languages": 1 }, { "order": 812, - "name": "datrujillog", + "name": "maxirica", "count": 1, "languages": 1 }, { "order": 813, - "name": "johnniew81", + "name": "devjerez", "count": 1, "languages": 1 }, { "order": 814, - "name": "chriszaldana", + "name": "betulioo", "count": 1, "languages": 1 }, { "order": 815, - "name": "antonioverdugo", + "name": "neftalyr", "count": 1, "languages": 1 }, { "order": 816, - "name": "kronomio", + "name": "josuelopez5", "count": 1, "languages": 1 }, { "order": 817, - "name": "kevinramirez28", + "name": "vickalck", "count": 1, "languages": 1 }, { "order": 818, - "name": "juanpablo-a", + "name": "xhinto", "count": 1, "languages": 1 }, { "order": 819, - "name": "gerespinosa", + "name": "jgregoris", "count": 1, "languages": 1 }, { "order": 820, - "name": "1978acb", + "name": "sofiamfernandez", "count": 1, "languages": 1 }, { "order": 821, - "name": "alexxawada", + "name": "haroldalb", "count": 1, "languages": 1 }, { "order": 822, - "name": "ricarsur", + "name": "g4nd4lf", "count": 1, "languages": 1 }, { "order": 823, - "name": "alemar16", + "name": "manueldenisdev", "count": 1, "languages": 1 }, { "order": 824, - "name": "pointfs", + "name": "kshields51", "count": 1, "languages": 1 }, { "order": 825, - "name": "edperez07", + "name": "omar8102", "count": 1, "languages": 1 }, { "order": 826, - "name": "dacronik", + "name": "lluistech", "count": 1, "languages": 1 }, { "order": 827, - "name": "abraham9804", + "name": "vicvilla30", "count": 1, "languages": 1 }, { "order": 828, - "name": "afl0r3s", + "name": "gilbertho502", "count": 1, "languages": 1 }, { "order": 829, - "name": "dianelis1", + "name": "13sauca13", "count": 1, "languages": 1 }, { "order": 830, - "name": "fernandofl", + "name": "cd1974", "count": 1, "languages": 1 }, { "order": 831, - "name": "conrado85", + "name": "salas89", "count": 1, "languages": 1 }, { "order": 832, - "name": "agus-ig", + "name": "eatsangels", "count": 1, "languages": 1 }, { "order": 833, - "name": "alvarommedia", + "name": "sergiomhernandez", "count": 1, "languages": 1 }, { "order": 834, - "name": "maximotoro", + "name": "carlosbb70", "count": 1, "languages": 1 }, { "order": 835, - "name": "m4xisil", + "name": "mjordanaam", "count": 1, "languages": 1 }, { "order": 836, - "name": "francomoreira", + "name": "howlett9999", "count": 1, "languages": 1 }, { "order": 837, - "name": "aleclto7", + "name": "copamire", "count": 1, "languages": 1 }, { "order": 838, - "name": "nnunezmedina", + "name": "erickcis", "count": 1, "languages": 1 }, { "order": 839, - "name": "codejoss", + "name": "and-y21", "count": 1, "languages": 1 }, { "order": 840, - "name": "yaojema", + "name": "leo18q", "count": 1, "languages": 1 }, { "order": 841, - "name": "romanocoder", + "name": "adcarret", "count": 1, "languages": 1 }, { "order": 842, - "name": "sixtodev", + "name": "arturodlapaz17", "count": 1, "languages": 1 }, { "order": 843, - "name": "cgomezadolfo", + "name": "danidan1214", "count": 1, "languages": 1 }, { "order": 844, - "name": "rojasvargas", + "name": "julioorozco05", "count": 1, "languages": 1 }, { "order": 845, - "name": "carlosdiaz-dev", + "name": "juanalbornoz32", "count": 1, "languages": 1 }, { "order": 846, - "name": "l3v1xx", + "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { "order": 847, - "name": "patricioguerra30", + "name": "manuu42", "count": 1, "languages": 1 }, { "order": 848, - "name": "lytsar", + "name": "sergiovelayos", "count": 1, "languages": 1 }, { "order": 849, - "name": "siuldev", + "name": "snowale", "count": 1, "languages": 1 }, { "order": 850, - "name": "brayancordova1", + "name": "gl-informatica", "count": 1, "languages": 1 }, { "order": 851, - "name": "ronnieruuz", + "name": "dacaldev", "count": 1, "languages": 1 }, { "order": 852, - "name": "yessikamichelle", + "name": "javirr4", "count": 1, "languages": 1 }, { "order": 853, - "name": "vainsito1", + "name": "amitchellg", "count": 1, "languages": 1 }, { "order": 854, - "name": "oscarletelier", + "name": "henrydavidprimera", "count": 1, "languages": 1 }, { "order": 855, - "name": "kocho03", + "name": "cristianvergaraf", "count": 1, "languages": 1 }, { "order": 856, - "name": "aidicoop", + "name": "geridage", "count": 1, "languages": 1 }, { "order": 857, - "name": "albabp", + "name": "osneidert", "count": 1, "languages": 1 }, { "order": 858, - "name": "nozodev", + "name": "perla-zg", "count": 1, "languages": 1 }, { "order": 859, - "name": "mvillegas18", + "name": "zeraven09", "count": 1, "languages": 1 }, { "order": 860, - "name": "augustbs", + "name": "acobo3", "count": 1, "languages": 1 }, { "order": 861, - "name": "mekanicas", + "name": "fergz1988", "count": 1, "languages": 1 }, { "order": 862, - "name": "luchof5", + "name": "johao23", "count": 1, "languages": 1 }, { "order": 863, - "name": "fullstackarlo", + "name": "hnaranjog", "count": 1, "languages": 1 }, { "order": 864, - "name": "mdemena", + "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { "order": 865, - "name": "cliverjimny123", + "name": "jgarteag", "count": 1, "languages": 1 }, { "order": 866, - "name": "rodmiggithub", + "name": "ndepaul82", "count": 1, "languages": 1 }, { "order": 867, - "name": "s9code", + "name": "neusier101", "count": 1, "languages": 1 }, { "order": 868, - "name": "javieradev", + "name": "wilsonbarrera", "count": 1, "languages": 1 }, { "order": 869, - "name": "xnomada", + "name": "mrf1989", "count": 1, "languages": 1 }, { "order": 870, - "name": "miguelsarm", + "name": "charly024", "count": 1, "languages": 1 }, { "order": 871, - "name": "royhuamanavila", + "name": "nico70012", "count": 1, "languages": 1 }, { "order": 872, - "name": "imista", + "name": "gersonoroz", "count": 1, "languages": 1 }, { "order": 873, - "name": "denisortega", + "name": "johannmanrique", "count": 1, "languages": 1 }, { "order": 874, - "name": "kouski", + "name": "facundorsabia", "count": 1, "languages": 1 }, { "order": 875, - "name": "leydimadrid", + "name": "cisneros2404", "count": 1, "languages": 1 }, { "order": 876, - "name": "frannm29", + "name": "josem17-cyber", "count": 1, "languages": 1 }, { "order": 877, - "name": "saintsluis", + "name": "sbngl", "count": 1, "languages": 1 }, { "order": 878, - "name": "gc796", + "name": "x3mboy", "count": 1, "languages": 1 }, { "order": 879, - "name": "pierre-ol", + "name": "van-02", "count": 1, "languages": 1 }, { "order": 880, - "name": "francescoalterio", + "name": "franciscokarriere", "count": 1, "languages": 1 }, { "order": 881, - "name": "gustavoguerrero", + "name": "jd-gm", "count": 1, "languages": 1 }, { "order": 882, - "name": "diegoxxd", + "name": "fzcarlitos", "count": 1, "languages": 1 }, { "order": 883, - "name": "fzcarlitos", + "name": "dmhenaopa", "count": 1, "languages": 1 }, { "order": 884, - "name": "walkerlyna", + "name": "gerespinosa", "count": 1, "languages": 1 }, { "order": 885, - "name": "sejotaz", + "name": "alexis0717", "count": 1, "languages": 1 }, { "order": 886, - "name": "frcan89", + "name": "rojasvargas", "count": 1, "languages": 1 }, { "order": 887, - "name": "nicorey89", + "name": "alexxawada", "count": 1, "languages": 1 }, { "order": 888, - "name": "alexis0717", + "name": "lytsar", "count": 1, "languages": 1 }, { "order": 889, - "name": "edgonzz", + "name": "jsruedatorres", "count": 1, "languages": 1 }, { "order": 890, - "name": "vmga09", + "name": "fullstackarlo", "count": 1, "languages": 1 }, { "order": 891, - "name": "lfam200", + "name": "brayancordova1", "count": 1, "languages": 1 }, { "order": 892, - "name": "kenzambrano", + "name": "francescoalterio", "count": 1, "languages": 1 }, { "order": 893, - "name": "dmhenaopa", + "name": "francomoreira", "count": 1, "languages": 1 }, { "order": 894, - "name": "jpiacaruso", + "name": "kenzambrano", "count": 1, "languages": 1 }, { "order": 895, - "name": "isnatthy", + "name": "edperez07", "count": 1, "languages": 1 }, { "order": 896, - "name": "diego-santana23", + "name": "edgonzz", "count": 1, "languages": 1 }, { "order": 897, - "name": "peticas", + "name": "siuldev", "count": 1, "languages": 1 }, { "order": 898, - "name": "flarien", + "name": "vmga09", "count": 1, "languages": 1 }, { "order": 899, - "name": "franciscokarriere", + "name": "frcan89", "count": 1, "languages": 1 }, { "order": 900, - "name": "pipeyz21", + "name": "jpiacaruso", "count": 1, "languages": 1 }, { "order": 901, - "name": "luisgarm", + "name": "m4xisil", "count": 1, "languages": 1 }, { "order": 902, - "name": "tetotille", + "name": "leydimadrid", "count": 1, "languages": 1 }, { "order": 903, - "name": "vorosdev", + "name": "albabp", "count": 1, "languages": 1 }, { "order": 904, - "name": "santiagomac", + "name": "juanpablo-a", "count": 1, "languages": 1 }, { "order": 905, - "name": "implevacui", + "name": "cgomezadolfo", "count": 1, "languages": 1 }, { "order": 906, - "name": "fede6299", + "name": "lfam200", "count": 1, "languages": 1 }, { "order": 907, - "name": "kevin05m", + "name": "kocho03", "count": 1, "languages": 1 }, { "order": 908, - "name": "diegomm27", + "name": "yessikamichelle", "count": 1, "languages": 1 }, { "order": 909, - "name": "pablo-lnx", + "name": "fernandofl", "count": 1, "languages": 1 }, { "order": 910, - "name": "darkohokage", + "name": "peticas", "count": 1, "languages": 1 }, { "order": 911, - "name": "jhonnfl", + "name": "royhuamanavila", "count": 1, "languages": 1 }, { "order": 912, - "name": "jarzatedev", + "name": "afl0r3s", "count": 1, "languages": 1 }, { "order": 913, - "name": "brunom-93", + "name": "abengl", "count": 1, "languages": 1 }, { "order": 914, - "name": "alejandroruiz23", + "name": "isnatthy", "count": 1, "languages": 1 }, { "order": 915, - "name": "trollface77", + "name": "lfwzk", "count": 1, "languages": 1 }, { "order": 916, - "name": "jaimesoftdev", + "name": "denisortega", "count": 1, "languages": 1 }, { "order": 917, - "name": "edm1ya", + "name": "johnniew81", "count": 1, "languages": 1 }, { "order": 918, - "name": "tartabullroberto", + "name": "sergioab7", "count": 1, "languages": 1 }, { "order": 919, - "name": "serg-pq", + "name": "joseperesini", "count": 1, "languages": 1 }, { "order": 920, - "name": "lara-vel-dev", + "name": "aleclto7", "count": 1, "languages": 1 }, { "order": 921, - "name": "alexisbarradev", + "name": "pierre-ol", "count": 1, "languages": 1 }, { "order": 922, - "name": "kelvincb", + "name": "sixtodev", "count": 1, "languages": 1 }, { "order": 923, - "name": "carlostoledoe", + "name": "nnunezmedina", "count": 1, "languages": 1 }, { "order": 924, - "name": "gilbertho502", + "name": "conrado85", "count": 1, "languages": 1 }, { "order": 925, - "name": "v0l0v", + "name": "patricioguerra30", "count": 1, "languages": 1 }, { "order": 926, - "name": "johao23", + "name": "walkerlyna", "count": 1, "languages": 1 }, { "order": 927, - "name": "geridage", + "name": "augustbs", "count": 1, "languages": 1 }, { "order": 928, - "name": "vmarialuzm", + "name": "gc796", "count": 1, "languages": 1 }, { "order": 929, - "name": "snowcardenas", + "name": "diegoxxd", "count": 1, "languages": 1 }, { "order": 930, - "name": "and-y21", + "name": "ronnieruuz", "count": 1, "languages": 1 }, { "order": 931, - "name": "arturodlapaz17", + "name": "nozodev", "count": 1, "languages": 1 }, { "order": 932, - "name": "josem17-cyber", + "name": "pointfs", "count": 1, "languages": 1 }, { "order": 933, - "name": "manuu42", + "name": "saintsluis", "count": 1, "languages": 1 }, { "order": 934, - "name": "howlett9999", + "name": "cliverjimny123", "count": 1, "languages": 1 }, { "order": 935, - "name": "hnaranjog", + "name": "mekanicas", "count": 1, "languages": 1 }, { "order": 936, - "name": "wallsified", + "name": "vainsito1", "count": 1, "languages": 1 }, { "order": 937, - "name": "lluistech", + "name": "kouski", "count": 1, "languages": 1 }, { "order": 938, - "name": "mamartinez14", + "name": "ricarsur", "count": 1, "languages": 1 }, { "order": 939, - "name": "ambrociojrdelacruz", + "name": "s9code", "count": 1, "languages": 1 }, { "order": 940, - "name": "bassalex27", + "name": "jacobrwx", "count": 1, "languages": 1 }, { "order": 941, - "name": "yetlanezils", + "name": "dianelis1", "count": 1, "languages": 1 }, { "order": 942, - "name": "ndepaul82", + "name": "oscarletelier", "count": 1, "languages": 1 }, { "order": 943, - "name": "amitchellg", + "name": "l3v1xx", "count": 1, "languages": 1 }, { "order": 944, - "name": "turudev1979", + "name": "codejoss", "count": 1, "languages": 1 }, { "order": 945, - "name": "deivimiller", + "name": "miguelsarm", "count": 1, "languages": 1 }, { "order": 946, - "name": "haroldalb", + "name": "romanocoder", "count": 1, "languages": 1 }, { "order": 947, - "name": "dakkaj", + "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { "order": 948, - "name": "juli-m4", + "name": "flarien", "count": 1, "languages": 1 }, { "order": 949, - "name": "sergiomhernandez", + "name": "abraham9804", "count": 1, "languages": 1 }, { "order": 950, - "name": "masenace", + "name": "sejotaz", "count": 1, "languages": 1 }, { "order": 951, - "name": "e-xtian", + "name": "gustavoguerrero", "count": 1, "languages": 1 }, { "order": 952, - "name": "vickalck", + "name": "javieradev", "count": 1, "languages": 1 }, { "order": 953, - "name": "gmedinat911", + "name": "frannm29", "count": 1, "languages": 1 }, { "order": 954, - "name": "eljavi0", + "name": "mvillegas18", "count": 1, "languages": 1 }, { "order": 955, - "name": "yeisongil", + "name": "antonioverdugo", "count": 1, "languages": 1 }, { "order": 956, - "name": "julioorozco05", + "name": "kronomio", "count": 1, "languages": 1 }, { "order": 957, - "name": "fergz1988", + "name": "quirogapau", "count": 1, "languages": 1 }, { "order": 958, - "name": "marcos0803", + "name": "ercky1980", "count": 1, "languages": 1 }, { "order": 959, - "name": "xcortes", + "name": "madelefonb", "count": 1, "languages": 1 }, { "order": 960, - "name": "facundorsabia", + "name": "imista", "count": 1, "languages": 1 }, { "order": 961, - "name": "nico70012", + "name": "mhrosariom", "count": 1, "languages": 1 }, { "order": 962, - "name": "charly024", + "name": "mdemena", "count": 1, "languages": 1 }, { "order": 963, - "name": "devjerez", + "name": "luchof5", "count": 1, "languages": 1 }, { "order": 964, - "name": "copamire", + "name": "nicorey89", "count": 1, "languages": 1 }, { "order": 965, - "name": "gersonoroz", + "name": "santaravena", "count": 1, "languages": 1 }, { "order": 966, - "name": "jafuma0320", + "name": "xnomada", "count": 1, "languages": 1 }, { "order": 967, - "name": "g4nd4lf", + "name": "yaojema", "count": 1, "languages": 1 }, { "order": 968, - "name": "obed-tc", + "name": "diego-santana23", "count": 1, "languages": 1 }, { "order": 969, - "name": "devkenn", + "name": "aidicoop", "count": 1, "languages": 1 }, { "order": 970, - "name": "xalejandrow", + "name": "agus-ig", "count": 1, "languages": 1 }, { "order": 971, - "name": "henrydavidprimera", + "name": "dacronik", "count": 1, "languages": 1 }, { "order": 972, - "name": "luceldasilva", + "name": "alemar16", "count": 1, "languages": 1 }, { "order": 973, - "name": "mjordanaam", + "name": "alvarommedia", "count": 1, "languages": 1 }, { "order": 974, - "name": "betulioo", + "name": "rodmiggithub", "count": 1, "languages": 1 }, { "order": 975, - "name": "judithernandez", + "name": "lucianogriffa", "count": 1, "languages": 1 }, { "order": 976, - "name": "dimanu-py", + "name": "datrujillog", "count": 1, "languages": 1 }, { "order": 977, - "name": "snowale", + "name": "kevinramirez28", "count": 1, "languages": 1 }, { "order": 978, - "name": "cd1974", + "name": "chriszaldana", "count": 1, "languages": 1 }, { "order": 979, - "name": "acobo3", + "name": "1978acb", "count": 1, "languages": 1 }, { "order": 980, - "name": "isaacdci", + "name": "maximotoro", "count": 1, "languages": 1 }, { "order": 981, - "name": "manueldenisdev", + "name": "bjchavez", "count": 1, "languages": 1 }, { "order": 982, - "name": "anexo01", + "name": "seigigim", "count": 1, "languages": 1 }, { "order": 983, - "name": "yamiyugi25", + "name": "gizelads", "count": 1, "languages": 1 }, { "order": 984, - "name": "gl-informatica", + "name": "mauricioyair", "count": 1, "languages": 1 }, { "order": 985, - "name": "miguelmancebo", + "name": "is2095", "count": 1, "languages": 1 }, { "order": 986, - "name": "neusier101", + "name": "axelwestman", "count": 1, "languages": 1 }, { "order": 987, - "name": "emmanuelmmontesinos ", + "name": "manugonzalito", "count": 1, "languages": 1 }, { "order": 988, - "name": "xhinto", + "name": "coletonosh", "count": 1, "languages": 1 }, { "order": 989, - "name": "dacaldev", + "name": "deaconst", "count": 1, "languages": 1 }, { "order": 990, - "name": "juan-cruz01", + "name": "cibacoa", "count": 1, "languages": 1 }, { "order": 991, - "name": "juanalbornoz32", + "name": "feliaguirre7", "count": 1, "languages": 1 }, { "order": 992, - "name": "cisneros2404", + "name": "rulo77", "count": 1, "languages": 1 }, { "order": 993, - "name": "neftalyr", + "name": "marcosapodaca", "count": 1, "languages": 1 }, { "order": 994, - "name": "latorredev", + "name": "manuhssj", "count": 1, "languages": 1 }, { "order": 995, - "name": "osneidert", + "name": "serg032", "count": 1, "languages": 1 }, { "order": 996, - "name": "jrgranadosb", + "name": "lucc4sz", "count": 1, "languages": 1 }, { "order": 997, - "name": "vicvilla30", + "name": "jancalos", "count": 1, "languages": 1 }, { "order": 998, - "name": "carlosbb70", + "name": "javodevon", "count": 1, "languages": 1 }, { "order": 999, - "name": "pablom-2015", + "name": "astriebeck", "count": 1, "languages": 1 }, { "order": 1000, - "name": "xtinarita", + "name": "ishimaku", "count": 1, "languages": 1 }, { "order": 1001, - "name": "wilsonbarrera", + "name": "afacorroloscos", "count": 1, "languages": 1 }, { "order": 1002, - "name": "jereaguilar", + "name": "ledyam", "count": 1, "languages": 1 }, { "order": 1003, - "name": "giovanni-schmaily", + "name": "jatomas", "count": 1, "languages": 1 }, { "order": 1004, - "name": "danidan1214", + "name": "marqitos", "count": 1, "languages": 1 }, { "order": 1005, - "name": "demegorash", + "name": "marvinagui", "count": 1, "languages": 1 }, { "order": 1006, - "name": "cris10026", + "name": "lobogeekmx", "count": 1, "languages": 1 }, { "order": 1007, - "name": "davidgramiro", + "name": "rocadev2714", "count": 1, "languages": 1 }, { "order": 1008, - "name": "jgarteag", + "name": "rootqui", "count": 1, "languages": 1 }, { "order": 1009, - "name": "adcarret", + "name": "miguelgargallo", "count": 1, "languages": 1 }, { "order": 1010, - "name": "natanaelzubiri", + "name": "sandrarg85", "count": 1, "languages": 1 }, { "order": 1011, - "name": "diegogomezcor4", + "name": "protpus98", "count": 1, "languages": 1 }, { "order": 1012, - "name": "perla-zg", + "name": "pkmaventura", "count": 1, "languages": 1 }, { "order": 1013, - "name": "neshurtado", + "name": "jcrobles99", "count": 1, "languages": 1 }, { "order": 1014, - "name": "maxirica", + "name": "nunezlagos", "count": 1, "languages": 1 }, { "order": 1015, - "name": "marcelinoarias369", + "name": "chrisfelixgil", "count": 1, "languages": 1 }, { "order": 1016, - "name": "pushodev", + "name": "deimoshall", "count": 1, "languages": 1 }, { "order": 1017, - "name": "sherkla12e", + "name": "fede6299", "count": 1, "languages": 1 }, { "order": 1018, - "name": "luisangeles20", + "name": "darkohokage", "count": 1, "languages": 1 }, { "order": 1019, - "name": "johannmanrique", + "name": "pablo-lnx", "count": 1, "languages": 1 }, { "order": 1020, - "name": "omar8102", + "name": "kevin05m", "count": 1, "languages": 1 }, { "order": 1021, - "name": "eatsangels", + "name": "diegomm27", "count": 1, "languages": 1 }, { "order": 1022, - "name": "alejarandro", + "name": "joferpg", "count": 1, "languages": 1 }, { "order": 1023, - "name": "tashidian", + "name": "mbmaeso", "count": 1, "languages": 1 }, { "order": 1024, - "name": "alejandro000", + "name": "braiso-22", "count": 1, "languages": 1 }, { "order": 1025, - "name": "francgci", + "name": "deiiviitdev", "count": 1, "languages": 1 }, { "order": 1026, - "name": "krisipo", + "name": "alvarominarro", "count": 1, "languages": 1 }, { "order": 1027, - "name": "jalonso76", + "name": "borjadelgadodev", "count": 1, "languages": 1 }, { "order": 1028, - "name": "leo18q", + "name": "elpeque29", "count": 1, "languages": 1 }, { "order": 1029, - "name": "sofiamfernandez", + "name": "jaennova", "count": 1, "languages": 1 }, { "order": 1030, - "name": "jgregoris", + "name": "luisalberto22", "count": 1, "languages": 1 }, { "order": 1031, - "name": "josuelopez5", + "name": "daniel-cas", "count": 1, "languages": 1 }, { "order": 1032, - "name": "mrf1989", + "name": "davidcv-dev", "count": 1, "languages": 1 }, { "order": 1033, - "name": "zeraven09", + "name": "francisleble", "count": 1, "languages": 1 }, { "order": 1034, - "name": "pr1de-23", + "name": "jhordanluyo", "count": 1, "languages": 1 }, { "order": 1035, - "name": "kronoscba", + "name": "acirdevelper", "count": 1, "languages": 1 }, { "order": 1036, - "name": "erickcis", + "name": "marcosjarrin", "count": 1, "languages": 1 }, { "order": 1037, - "name": "experthacker444", + "name": "implevacui", "count": 1, "languages": 1 }, { "order": 1038, - "name": "javirr4", + "name": "jandresalvar", "count": 1, "languages": 1 }, { "order": 1039, - "name": "ignacioskm", + "name": "ca2puntosv", "count": 1, "languages": 1 }, { "order": 1040, - "name": "jchernandez87", + "name": "angelcruzg23", "count": 1, "languages": 1 }, { "order": 1041, - "name": "ferngpv", + "name": "corvo-99", "count": 1, "languages": 1 }, { "order": 1042, - "name": "kshields51", + "name": "devm0nk3y", "count": 1, "languages": 1 }, { "order": 1043, - "name": "salas89", + "name": "danielcastillo1112", "count": 1, "languages": 1 }, { "order": 1044, - "name": "90dread", + "name": "sirvega83", "count": 1, "languages": 1 }, { "order": 1045, - "name": "chema-dw", + "name": "franpua", "count": 1, "languages": 1 }, { "order": 1046, - "name": "sbngl", + "name": "malkarmah", "count": 1, "languages": 1 }, { "order": 1047, - "name": "m4xxdev", + "name": "palons29", "count": 1, "languages": 1 }, { "order": 1048, - "name": "cristianvergaraf", + "name": "diegopardomontero", "count": 1, "languages": 1 }, { "order": 1049, - "name": "idiegorojas", + "name": "robermejia", "count": 1, "languages": 1 }, { "order": 1050, - "name": "lizzymaken", + "name": "zyn7e", "count": 1, "languages": 1 }, { "order": 1051, - "name": "jandortiz", + "name": "javiir", "count": 1, "languages": 1 }, { "order": 1052, - "name": "claudios1980", + "name": "antoniojzp86", "count": 1, "languages": 1 }, { "order": 1053, - "name": "sergiovelayos", + "name": "v1k770r", "count": 1, "languages": 1 }, { "order": 1054, - "name": "miguelangel861", + "name": "clespinosa2024", "count": 1, "languages": 1 }, { "order": 1055, - "name": "marcosjarrin", + "name": "gianellannie", "count": 1, "languages": 1 }, { "order": 1056, - "name": "jandresalvar", + "name": "dany3gs", "count": 1, "languages": 1 }, { "order": 1057, - "name": "joferpg", + "name": "queralesdev", "count": 1, "languages": 1 }, { "order": 1058, - "name": "jlrojano", + "name": "bycris13", "count": 1, "languages": 1 }, { "order": 1059, - "name": "ivanserran", + "name": "reneguzman7", "count": 1, "languages": 1 }, { "order": 1060, - "name": "dany3gs", + "name": "adriansaint07", "count": 1, "languages": 1 }, { "order": 1061, - "name": "lizandev", + "name": "dovinhoyos", "count": 1, "languages": 1 }, { "order": 1062, - "name": "adriangonzalezroble", + "name": "fredylopez01", "count": 1, "languages": 1 }, { "order": 1063, - "name": "dariel800xd", + "name": "lautimorales", "count": 1, "languages": 1 }, { "order": 1064, - "name": "cristian-encalada", + "name": "jlrojano", "count": 1, "languages": 1 }, { "order": 1065, - "name": "lewisoneil", + "name": "jrgim", "count": 1, "languages": 1 }, { "order": 1066, - "name": "hanzd07", + "name": "alefine", "count": 1, "languages": 1 }, { "order": 1067, - "name": "bycris13", + "name": "jaimenar", "count": 1, "languages": 1 }, { "order": 1068, - "name": "santiagopereiraviroga", + "name": "frankmon03", "count": 1, "languages": 1 }, { "order": 1069, - "name": "v1k770r", + "name": "det3992", "count": 1, "languages": 1 }, { "order": 1070, - "name": "gianellannie", + "name": "hanzd07", "count": 1, "languages": 1 }, { "order": 1071, - "name": "alefine", + "name": "jony_english22", "count": 1, "languages": 1 }, { "order": 1072, - "name": "chalaito88", + "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { "order": 1073, - "name": "fredylopez01", + "name": "alvaropg15", "count": 1, "languages": 1 }, { "order": 1074, - "name": "dsmhp0", + "name": "rreyes0424", "count": 1, "languages": 1 }, { "order": 1075, - "name": "lautimorales", + "name": "sanuka78", "count": 1, "languages": 1 }, { "order": 1076, - "name": "alexeigio", + "name": "albert-29", "count": 1, "languages": 1 }, { "order": 1077, - "name": "angeldevsarrollo", + "name": "dsmhp0", "count": 1, "languages": 1 }, { "order": 1078, - "name": "pguillo", + "name": "cristianmr87", "count": 1, "languages": 1 }, { "order": 1079, - "name": "vikinghost", + "name": "cristian-encalada", "count": 1, "languages": 1 }, { "order": 1080, - "name": "derkopath", + "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { "order": 1081, - "name": "adriansaint07", + "name": "pguillo", "count": 1, "languages": 1 }, { "order": 1082, - "name": "javiir", + "name": "martinaq", "count": 1, "languages": 1 }, { "order": 1083, - "name": "sxxnzdev", + "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { "order": 1084, - "name": "det3992", + "name": "lewisoneil", "count": 1, "languages": 1 }, { "order": 1085, - "name": "frankmon03", + "name": "danisaurio94", "count": 1, "languages": 1 }, { "order": 1086, - "name": "xhaloidx", + "name": "ivanserran", "count": 1, "languages": 1 }, { "order": 1087, - "name": "iguerrerov", + "name": "deathbato", "count": 1, "languages": 1 }, { "order": 1088, - "name": "jrgim", + "name": "jose-zga", "count": 1, "languages": 1 }, { "order": 1089, - "name": "cristianmr87", + "name": "nolemoon", "count": 1, "languages": 1 }, { "order": 1090, - "name": "rumacar05", + "name": "iguerrerov", "count": 1, "languages": 1 }, { "order": 1091, - "name": "jose-zga", + "name": "durwian", "count": 1, "languages": 1 }, { "order": 1092, - "name": "mathiur", + "name": "jaquelinetorres", "count": 1, "languages": 1 }, { "order": 1093, - "name": "robermejia", + "name": "vikinghost", "count": 1, "languages": 1 }, { "order": 1094, - "name": "nolemoon", + "name": "pvigo10", "count": 1, "languages": 1 }, { "order": 1095, - "name": "sanuka78", + "name": "derkopath", "count": 1, "languages": 1 }, { "order": 1096, - "name": "reneguzman7", + "name": "chrystiancalderon", "count": 1, "languages": 1 }, { "order": 1097, - "name": "durwian", + "name": "chalaito88", "count": 1, "languages": 1 }, { "order": 1098, - "name": "martinaq", + "name": "serg_pq", "count": 1, "languages": 1 }, { "order": 1099, - "name": "kgrc05", + "name": "dariel800xd", "count": 1, "languages": 1 }, { "order": 1100, - "name": "queralesdev", + "name": "cristobalbelcor", "count": 1, "languages": 1 }, { "order": 1101, - "name": "dovinhoyos", + "name": "mathiur", "count": 1, "languages": 1 }, { "order": 1102, - "name": "maynor06", + "name": "sxxnzdev", "count": 1, "languages": 1 }, { "order": 1103, - "name": "jaimenar", + "name": "maynor06", "count": 1, "languages": 1 }, { "order": 1104, - "name": "chrystiancalderon", + "name": "xhaloidx", "count": 1, "languages": 1 }, { "order": 1105, - "name": "alvaropg15", + "name": "algeloro", "count": 1, "languages": 1 }, { "order": 1106, - "name": "deathbato", + "name": "lizandev", "count": 1, "languages": 1 }, { "order": 1107, - "name": "rreyes0424", + "name": "rumacar05", "count": 1, "languages": 1 }, { "order": 1108, - "name": "algeloro", + "name": "kgrc05", "count": 1, "languages": 1 }, { "order": 1109, - "name": "jony_english22", + "name": "alexeigio", "count": 1, "languages": 1 }, { "order": 1110, - "name": "antoniojzp86", + "name": "trollface77", "count": 1, "languages": 1 }, { "order": 1111, - "name": "serg_pq", + "name": "brunom-93", "count": 1, "languages": 1 }, { "order": 1112, - "name": "zyn7e", + "name": "jhonnfl", "count": 1, "languages": 1 }, { "order": 1113, - "name": "diegopardomontero", + "name": "alejandroruiz23", "count": 1, "languages": 1 }, { "order": 1114, - "name": "cristobalbelcor", + "name": "jaimesoftdev", "count": 1, "languages": 1 }, { "order": 1115, - "name": "albert-29", + "name": "jarzatedev", "count": 1, "languages": 1 }, { "order": 1116, - "name": "pvigo10", + "name": "edm1ya", "count": 1, "languages": 1 }, { "order": 1117, - "name": "clespinosa2024", + "name": "serg-pq", "count": 1, "languages": 1 }, { "order": 1118, - "name": "danisaurio94", + "name": "tartabullroberto", "count": 1, "languages": 1 }, { "order": 1119, - "name": "jaquelinetorres", + "name": "alexisbarradev", "count": 1, "languages": 1 }, { "order": 1120, - "name": "bellodeveloper", + "name": "lara-vel-dev", "count": 1, "languages": 1 }, { "order": 1121, - "name": "cdryampi", + "name": "kelvincb", "count": 1, "languages": 1 }, { "order": 1122, - "name": "javosss", + "name": "armm77", "count": 1, "languages": 1 }, { "order": 1123, - "name": "eduardo282", + "name": "paluzz", "count": 1, "languages": 1 }, { "order": 1124, - "name": "franespina", + "name": "arathhh8", "count": 1, "languages": 1 }, { "order": 1125, - "name": "davidbastosg", + "name": "1cel4nc3", "count": 1, "languages": 1 }, { "order": 1126, - "name": "matinbohorquez", + "name": "theposi", "count": 1, "languages": 1 }, { "order": 1127, - "name": "carlosmares", + "name": "vinyoles", "count": 1, "languages": 1 }, { "order": 1128, - "name": "rawc1nnamon", + "name": "omarroman29", "count": 1, "languages": 1 }, { "order": 1129, - "name": "mvidab", + "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { "order": 1130, - "name": "deivisaherreraj", + "name": "tetotille", "count": 1, "languages": 1 }, { "order": 1131, - "name": "alfaroo1", + "name": "luisgarm", "count": 1, "languages": 1 }, { "order": 1132, - "name": "astrarothdlcxvi", + "name": "pipeyz21", "count": 1, "languages": 1 }, { "order": 1133, - "name": "kerunaru", + "name": "santiagomac", "count": 1, "languages": 1 }, { "order": 1134, - "name": "marcosalvarezcalabria", + "name": "vorosdev", "count": 1, "languages": 1 }, { "order": 1135, - "name": "orzefox", + "name": "mickysoft", "count": 1, "languages": 1 }, { "order": 1136, - "name": "acirdeveloper", + "name": "melonconyogurt", "count": 1, "languages": 1 }, { "order": 1137, - "name": "emiliordev", + "name": "cdryampi", "count": 1, "languages": 1 }, { "order": 1138, - "name": "sve-nnn", + "name": "bellodeveloper", "count": 1, "languages": 1 }, { "order": 1139, - "name": "edgarmedranoa", + "name": "batmarc91", "count": 1, "languages": 1 }, { "order": 1140, - "name": "rafapg93", + "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { "order": 1141, - "name": "vickalc", + "name": "angel-agis", "count": 1, "languages": 1 }, { "order": 1142, - "name": "riukac", + "name": "mauricioobgo", "count": 1, "languages": 1 }, { "order": 1143, - "name": "rusian69", + "name": "h4cker54n", "count": 1, "languages": 1 }, { "order": 1144, - "name": "wijimenezz", + "name": "joancharles07", "count": 1, "languages": 1 }, { "order": 1145, - "name": "albertovf", + "name": "cuervo23alpha", "count": 1, "languages": 1 }, { "order": 1146, - "name": "markayala13", + "name": "lesterdavid31", "count": 1, "languages": 1 }, { "order": 1147, - "name": "rocha30", + "name": "micendev", "count": 1, "languages": 1 }, { "order": 1148, - "name": "righelch", + "name": "alinares94", "count": 1, "languages": 1 }, { "order": 1149, - "name": "deathbat00", + "name": "jferchotorres", "count": 1, "languages": 1 }, { "order": 1150, - "name": "nicoloboo02", + "name": "713avo", "count": 1, "languages": 1 }, { "order": 1151, - "name": "sergiopq", + "name": "lordzzz", "count": 1, "languages": 1 }, { "order": 1152, - "name": "angeloro", + "name": "derobpe", "count": 1, "languages": 1 }, { "order": 1153, - "name": "jony-english22", + "name": "deivisaherreraj", "count": 1, "languages": 1 }, { "order": 1154, - "name": "tilordqwerty", + "name": "alfaroo1", "count": 1, "languages": 1 }, { "order": 1155, - "name": "lordzzz", + "name": "qwik-zghieb", "count": 1, "languages": 1 }, { "order": 1156, - "name": "alinares94", + "name": "gonzalinuz18", "count": 1, "languages": 1 }, { "order": 1157, - "name": "jferchotorres", + "name": "tilordqwerty", "count": 1, "languages": 1 }, { "order": 1158, - "name": "713avo", + "name": "dgquintero", "count": 1, "languages": 1 }, { "order": 1159, - "name": "micendev", + "name": "torvicv", "count": 1, "languages": 1 }, { "order": 1160, - "name": "ingjavierpinilla", + "name": "kerunaru", "count": 1, "languages": 1 }, { "order": 1161, - "name": "batmarc91", + "name": "eduardo282", "count": 1, "languages": 1 }, { "order": 1162, - "name": "angel-agis", + "name": "carlosmares", "count": 1, "languages": 1 }, { "order": 1163, - "name": "lesterdavid31", + "name": "mvidab", "count": 1, "languages": 1 }, { "order": 1164, - "name": "joancharles07", + "name": "leonardo-henao", "count": 1, "languages": 1 }, { "order": 1165, - "name": "mauricioobgo", + "name": "pwrxman", "count": 1, "languages": 1 }, { "order": 1166, - "name": "cuervo23alpha", + "name": "c-blskv", "count": 1, "languages": 1 }, { "order": 1167, - "name": "h4cker54n", + "name": "emaerniquez", "count": 1, "languages": 1 }, { "order": 1168, - "name": "derobpe", + "name": "carolhs92", "count": 1, "languages": 1 }, { "order": 1169, - "name": "willypaz243", + "name": "juancamilofvx", "count": 1, "languages": 1 }, { "order": 1170, - "name": "emersonxinay", + "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { "order": 1171, - "name": "arperezinf", + "name": "emersonxinay", "count": 1, "languages": 1 }, { "order": 1172, - "name": "alecraft8", + "name": "davidbastosg", "count": 1, "languages": 1 }, { "order": 1173, - "name": "greenalpak", + "name": "franespina", "count": 1, "languages": 1 }, { "order": 1174, - "name": "juampaweb", + "name": "matinbohorquez", "count": 1, "languages": 1 }, { "order": 1175, - "name": "girngoma", + "name": "javosss", "count": 1, "languages": 1 }, { "order": 1176, - "name": "jjaljuria", + "name": "greenalpak", "count": 1, "languages": 1 }, { "order": 1177, - "name": "ddaniel27", + "name": "alecraft8", "count": 1, "languages": 1 }, { "order": 1178, - "name": "dfc201692", + "name": "arperezinf", "count": 1, "languages": 1 }, { "order": 1179, - "name": "angelramirez02", + "name": "nightmare79", "count": 1, "languages": 1 }, { "order": 1180, - "name": "lesclaz", + "name": "vikernes27666", "count": 1, "languages": 1 }, { "order": 1181, - "name": "giovannipeirone", + "name": "cub-tor", "count": 1, "languages": 1 }, { "order": 1182, - "name": "whiterbb", + "name": "carlosmperezm", "count": 1, "languages": 1 }, { "order": 1183, - "name": "adridiazz", + "name": "santyjl44", "count": 1, "languages": 1 }, { "order": 1184, - "name": "jesus2421", + "name": "luism95", "count": 1, "languages": 1 }, { "order": 1185, - "name": "euu92", + "name": "giovannipeirone", "count": 1, "languages": 1 }, { "order": 1186, - "name": "santyjl44", + "name": "lesclaz", "count": 1, "languages": 1 }, { "order": 1187, - "name": "luism95", + "name": "dfc201692", "count": 1, "languages": 1 }, { "order": 1188, - "name": "ouendinga", + "name": "angelramirez02", "count": 1, "languages": 1 }, { "order": 1189, - "name": "melonconyogurt", + "name": "euu92", + "count": 1, + "languages": 1 + }, + { + "order": 1190, + "name": "jesus2421", + "count": 1, + "languages": 1 + }, + { + "order": 1191, + "name": "adridiazz", + "count": 1, + "languages": 1 + }, + { + "order": 1192, + "name": "whiterbb", + "count": 1, + "languages": 1 + }, + { + "order": 1193, + "name": "jjaljuria", + "count": 1, + "languages": 1 + }, + { + "order": 1194, + "name": "ddaniel27", "count": 1, "languages": 1 } From ef7abc16bbe302b00d267e389a7f7bdfe0b888cd Mon Sep 17 00:00:00 2001 From: kenysdev Date: Wed, 18 Sep 2024 20:08:44 -0500 Subject: [PATCH 394/539] 38 - vb.net - winners in csv --- Roadmap/38 - MOUREDEV PRO/vb.net/kenysdev.vb | 99 ++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/vb.net/kenysdev.vb diff --git a/Roadmap/38 - MOUREDEV PRO/vb.net/kenysdev.vb b/Roadmap/38 - MOUREDEV PRO/vb.net/kenysdev.vb new file mode 100644 index 0000000000..25323e5223 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/vb.net/kenysdev.vb @@ -0,0 +1,99 @@ +' _____________________________________ +' https://github.com/kenysdev +' 2024 - vb.net +' _____________________________________ +' 38 MOUREDEV PRO +' ------------------------------------ +'* He presentado mi proyecto más importante del año: mouredev pro. +' * Un campus para la comunidad, que lanzaré en octubre, donde estudiar +' * programación de una manera diferente. +' * Cualquier persona suscrita a la newsletter de https://mouredev.pro +' * accederá a sorteos mensuales de suscripciones, regalos y descuentos. +' * +' * Desarrolla un programa que lea los registros de un fichero .csv y +' * seleccione de manera aleatoria diferentes ganadores. +' * Requisitos: +' * 1. Crea un .csv con 3 columnas id, email y status con valor "activo" +' * o "inactivo" (y datos ficticios). +' * Ejemplo: 1 | test@test.com | activo +' * 2 | test2@test.com | inactivo +' * (El .csv no debe subirse como parte de la corrección) +' * 2. Recupera los datos desde el programa y selecciona email aleatorios. +' * Acciones: +' * 1. Accede al fichero .csv y selecciona de manera aleatoria un email +' * ganador de una suscripción, otro ganador de un descuento y un último +' * ganador de un libro (sólo si tiene status "activo" y no está repetido). +' * 2. Muestra los emails ganadores y su id. +' * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) +' * no debe tenerse en cuenta. + + +Imports Microsoft.VisualBasic.FileIO + +Module Program + Sub Main() + Console.WriteLine("Usuarios ganadores de 'MOUREDEV PRO:'") + Dim csvFile As String = "users.csv" + Dim prizes As List(Of String) = New List(Of String) From {"Suscripción", "Descuento", "Libro"} + + Dim entries = ReadCsv(csvFile) + If entries IsNot Nothing Then + Dim activeEntries = GetActiveEntries(entries) + Dim winners = SelectWinners(activeEntries, 3) + DistributePrizes(winners, prizes) + Else + Console.WriteLine("No se encontraron entradas activas.") + End If + End Sub + + Private Function ReadCsv(filePath As String) As List(Of Dictionary(Of String, String)) + Try + Using parser As New TextFieldParser(filePath) + parser.TextFieldType = FieldType.Delimited + parser.SetDelimiters(",") + + Dim headers = parser.ReadFields() + Dim entries As New List(Of Dictionary(Of String, String)) + + While Not parser.EndOfData + Dim fields = parser.ReadFields() + Dim entry As New Dictionary(Of String, String) + For i As Integer = 0 To headers.Length - 1 + entry.Add(headers(i), fields(i)) + Next + entries.Add(entry) + End While + + Return entries + End Using + Catch ex As Exception + Console.WriteLine($"Error reading '{filePath}': {ex.Message}") + Return Nothing + End Try + End Function + + Private Function GetActiveEntries(entries As List(Of Dictionary(Of String, String))) As List(Of Dictionary(Of String, String)) + Return entries.Where(Function(entry) entry("status").ToLower() = "active"). + Select(Function(entry) New Dictionary(Of String, String) From { + {"id", entry("id")}, + {"email", entry("email")}, + {"status", entry("status")} + }).ToList() + End Function + + Private Function SelectWinners(activeEntries As List(Of Dictionary(Of String, String)), numWinners As Integer) As List(Of Dictionary(Of String, String)) + Dim rnd As New Random() + Return activeEntries.OrderBy(Function(x) rnd.Next()). + Take(Math.Min(numWinners, activeEntries.Count)). + ToList() + End Function + + Private Sub DistributePrizes(winners As List(Of Dictionary(Of String, String)), prizes As List(Of String)) + Dim rnd As New Random() + prizes = prizes.OrderBy(Function(x) rnd.Next()).ToList() + + For i As Integer = 0 To Math.Min(winners.Count, prizes.Count) - 1 + Console.WriteLine($"{prizes(i),-11} -> Id({winners(i)("id")}): {winners(i)("email")}") + Next + End Sub +End Module From 809cea20ac6cdc104006c3ea727bdd477ba4d541 Mon Sep 17 00:00:00 2001 From: kenysdev Date: Wed, 18 Sep 2024 20:42:06 -0500 Subject: [PATCH 395/539] 38 - rust - winners in csv --- Roadmap/38 - MOUREDEV PRO/rust/kenysdev.rs | 110 +++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/rust/kenysdev.rs diff --git a/Roadmap/38 - MOUREDEV PRO/rust/kenysdev.rs b/Roadmap/38 - MOUREDEV PRO/rust/kenysdev.rs new file mode 100644 index 0000000000..d9ab779df1 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/rust/kenysdev.rs @@ -0,0 +1,110 @@ +/* +_____________________________________ +https://github.com/kenysdev +2024 - Rust +_____________________________________ +38 MOUREDEV PRO +------------------------------------ +* He presentado mi proyecto más importante del año: mouredev pro. + * Un campus para la comunidad, que lanzaré en octubre, donde estudiar + * programación de una manera diferente. + * Cualquier persona suscrita a la newsletter de https://mouredev.pro + * accederá a sorteos mensuales de suscripciones, regalos y descuentos. + * + * Desarrolla un programa que lea los registros de un fichero .csv y + * seleccione de manera aleatoria diferentes ganadores. + * Requisitos: + * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + * o "inactivo" (y datos ficticios). + * Ejemplo: 1 | test@test.com | activo + * 2 | test2@test.com | inactivo + * (El .csv no debe subirse como parte de la corrección) + * 2. Recupera los datos desde el programa y selecciona email aleatorios. + * Acciones: + * 1. Accede al fichero .csv y selecciona de manera aleatoria un email + * ganador de una suscripción, otro ganador de un descuento y un último + * ganador de un libro (sólo si tiene status "activo" y no está repetido). + * 2. Muestra los emails ganadores y su id. + * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + * no debe tenerse en cuenta. + +[dependencies] +csv = "1.3.0" +rand = "0.8.5" +*/ + +use std::collections::HashMap; +use std::error::Error; +use std::fs::File; +use csv::Reader; +use rand::seq::SliceRandom; +use rand::thread_rng; + +#[derive(Debug, Clone)] +struct Entry { + id: String, + email: String, + status: String, +} + +fn read_csv(file_path: &str) -> Result, Box> { + let file = File::open(file_path)?; + let mut reader = Reader::from_reader(file); + let mut entries = Vec::new(); + + for result in reader.deserialize() { + let record: HashMap = result?; + entries.push(Entry { + id: record.get("id").unwrap_or(&String::new()).to_string(), + email: record.get("email").unwrap_or(&String::new()).to_string(), + status: record.get("status").unwrap_or(&String::new()).to_string(), + }); + } + + Ok(entries) +} + +fn get_active_entries(entries: &[Entry]) -> Vec { + entries + .iter() + .filter(|entry| entry.status.to_lowercase() == "active") + .cloned() + .collect() +} + +fn select_winners(active_entries: &[Entry], num_winners: usize) -> Vec { + let mut rng = thread_rng(); + let mut indices: Vec = (0..active_entries.len()).collect(); + indices.shuffle(&mut rng); + indices.into_iter() + .take(num_winners.min(active_entries.len())) + .map(|i| active_entries[i].clone()) + .collect() +} + +fn distribute_prizes(winners: &[Entry], prizes: &[&str]) { + let mut rng = thread_rng(); + let mut shuffled_prizes = prizes.to_vec(); + shuffled_prizes.shuffle(&mut rng); + + for (winner, prize) in winners.iter().zip(shuffled_prizes.iter()) { + println!("{:<11} -> Id({}): {}", prize, winner.id, winner.email); + } +} + +fn main() -> Result<(), Box> { + println!("Usuarios ganadores de 'MOUREDEV PRO:'"); + let csv_file = "users.csv"; + let prizes = vec!["Suscripción", "Descuento", "Libro"]; + + match read_csv(csv_file) { + Ok(entries) => { + let active_entries = get_active_entries(&entries); + let winners = select_winners(&active_entries, 3); + distribute_prizes(&winners, &prizes); + } + Err(e) => println!("No se encontraron entradas activas: {}", e), + } + + Ok(()) +} From ee49226909f62e3c2fd4a99739ddef33fc7d08d5 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Wed, 18 Sep 2024 21:32:05 -0500 Subject: [PATCH 396/539] #15 - Java --- .../java/martinbohorquez.java" | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 "Roadmap/15 - ASINCRON\303\215A/java/martinbohorquez.java" diff --git "a/Roadmap/15 - ASINCRON\303\215A/java/martinbohorquez.java" "b/Roadmap/15 - ASINCRON\303\215A/java/martinbohorquez.java" new file mode 100644 index 0000000000..b33adf1e6f --- /dev/null +++ "b/Roadmap/15 - ASINCRON\303\215A/java/martinbohorquez.java" @@ -0,0 +1,66 @@ +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.concurrent.CountDownLatch; + +import static java.util.concurrent.TimeUnit.SECONDS; + +/** + * #15 ASINCRONÍA + * + * @author martinbohorquez + */ +public class martinbohorquez { + + private static final DateTimeFormatter f = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss"); + + public static void main(String[] args) throws InterruptedException { + CountDownLatch latch = new CountDownLatch(2); + getTask("tarea 1", 3, latch); + getTask("tarea 2", 2, latch); + latch.await(); + + /* + * DIFICULTAD EXTRA + */ + latch = new CountDownLatch(3); + System.out.println("[======== DIFICULTAD EXTRA =========]"); + getTask("C", 3, latch); + getTask("B", 2, latch); + getTask("A", 1, latch); + latch.await(); + getTask("D", 1, latch); + + } + + private static void getTask(String tarea, int duration, CountDownLatch latch) throws InterruptedException { + Task task = new Task(tarea, duration, latch); + task.start(); +// if (join) task.join(); + } + + public static class Task extends Thread { + private final int duration; + private final CountDownLatch latch; + + public Task(String name, int duration, CountDownLatch latch) { + super(name); + this.duration = duration; + this.latch = latch; + } + + @Override + public void run() { + System.out.printf("Tarea: %s | Duración: %d segundos | Inicio: %s%n", + getName(), duration, LocalDateTime.now().format(f)); + try { + SECONDS.sleep(duration); +// sleep(Duration.ofSeconds(duration)); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + System.out.printf("Tarea: %s | Fin: %s%n", getName(), LocalDateTime.now().format(f)); + latch.countDown(); + System.out.printf("El contador de %s es: %s%n", getName(), latch.getCount()); + } + } +} From e14b87159c3d04c67baa9a52a3c4660d33770550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Heguaburu=20S=C3=A1nchez?= Date: Thu, 19 Sep 2024 00:07:55 -0300 Subject: [PATCH 397/539] 07-python --- .../python/NicoHeguaburu.py | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 Roadmap/07 - PILAS Y COLAS/python/NicoHeguaburu.py diff --git a/Roadmap/07 - PILAS Y COLAS/python/NicoHeguaburu.py b/Roadmap/07 - PILAS Y COLAS/python/NicoHeguaburu.py new file mode 100644 index 0000000000..6e60bedae1 --- /dev/null +++ b/Roadmap/07 - PILAS Y COLAS/python/NicoHeguaburu.py @@ -0,0 +1,124 @@ +# #Pila/Stack (LIFO) Last In First Out + +# stack = [] +# stack.append("1") +# stack.append("2") +# stack.append("3") + + +# print(stack) + +# stack_last = stack[len(stack) - 1] +# del stack[len(stack) - 1] + + +# print(stack.pop()) + +# print(stack_last) +# print(stack) + + + +# #Cola/Queue (FIFO) Firs In First Out + +# queue = [] +# queue.append("1") +# queue.append("2") +# queue.append("3") + + +# queue_first = queue[0] +# del queue[0] + + +# print(queue.pop(0)) + +# print(queue) + + + +#Dificultad Extra + +#Web +# stack = [] + + + +# def navegar(url): +# print(f"Usted esta visualizando la pagina {url}") +# stack.append(url) +# menu() + + +# def ir_atras(): +# stack.pop() +# print(f"Usted esta visualizando la pagina {stack[len(stack) - 1]}") +# menu() + +# # def ir_adelante(): No es posible deberia usar listas XD + +# def menu(): +# print("NAVEGADOR DE NICOLAS HEGUABURU") +# print("1----------Navegar en la web") +# print("2----------Ir hacia atras") +# print("3----------Ir hacia adelante") +# print("4----------Salir") +# i = input("Selecciona una opccion...") + +# if i == "1": +# pag = input("a que pagina quieres ir...") +# navegar(pag) +# elif i == "2": +# ir_atras() +# elif i == "3": +# print("No es posible ir adelante con pilas XD") +# elif i == "4": +# exit() +# else: +# print("seleccione una opcion valida") +# menu() + +# menu() + + + + + + + +#Impresora compartida +cola = [] +def menu_impresora(): + print ("1------------Ingresar Documento") + print ("2------------Imprimir un documento de la cola") + print ("3------------Salir") + i = input("ingrese una opcion...") + + if i == "1": + agregar_documento() + elif i == "2": + imprimir_documento() + elif i == "3": + exit() + else: + print("ingrese una opcion valida!!!") + + +def agregar_documento(): + doc = input("Ingrese el nombre del documento...") + cola.append(doc) + print(f"El documento {doc} se a ingresado con exito.") + menu_impresora() + + +def imprimir_documento(): + if len(cola) > 0: + print(f"el documento {cola[0]} se imprimio correctamente") + cola.pop(0) + menu_impresora() + else: + print("La cola de impresion esta vacia. Porfavor ingrese un documento") + menu_impresora() + + +menu_impresora() \ No newline at end of file From 688c3258e286ce70dce1a8030ebe01651a5aae4c Mon Sep 17 00:00:00 2001 From: MMarioB Date: Thu, 19 Sep 2024 09:12:02 +0200 Subject: [PATCH 398/539] #38 - python - read csv --- Roadmap/38 - MOUREDEV PRO/python/mmariob.py | 50 +++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/mmariob.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/mmariob.py b/Roadmap/38 - MOUREDEV PRO/python/mmariob.py new file mode 100644 index 0000000000..f3f98f8d45 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/mmariob.py @@ -0,0 +1,50 @@ +import csv +import random + +# Creo lista para guardar los datos del csv +results = [] + +# Leo el csv +with open('data.csv', 'r', newline='') as File: + reader = csv.DictReader(File) + for row in reader: + results.append(row) + +# Función para seleccionar un ganador aleatorio y eliminarlo de la lista +def seleccionar_ganador(lista): + if not lista: + return None + indice = random.randint(0, len(lista) - 1) + return lista.pop(indice) + +# Ganador de suscripción +ganador_sub = seleccionar_ganador(results) +if ganador_sub: + print(f"El ganador de la suscripción es: {ganador_sub['email']}") +else: + print("No hay participantes para la suscripción") + +# Ganador de descuento +ganador_des = seleccionar_ganador(results) +if ganador_des: + print(f"El ganador del descuento es: {ganador_des['email']}") +else: + print("No hay participantes para el descuento") + +# Ganador del libro (solo si es activo) +ganador_libro = None +while results and not ganador_libro: + posible_ganador = seleccionar_ganador(results) + if posible_ganador['status'] == 'activo': + ganador_libro = posible_ganador + print(f"El ganador del libro es: {ganador_libro['email']}") + else: + print(f"El participante {posible_ganador['email']} no es elegible para el libro (inactivo)") + +if not ganador_libro: + print("No se encontró un ganador activo para el libro") + +# Imprimir participantes restantes +print(f"\nParticipantes restantes: {len(results)}") +for participante in results: + print(f"ID: {participante['id']}, Email: {participante['email']}, Status: {participante['status']}") \ No newline at end of file From 115c058e3a974ba0ac75b6514bcd10ddd6a997e7 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Thu, 19 Sep 2024 10:41:26 +0200 Subject: [PATCH 399/539] #07 java --- .../07 - PILAS Y COLAS/java/eulogioep.java | 180 ++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 Roadmap/07 - PILAS Y COLAS/java/eulogioep.java diff --git a/Roadmap/07 - PILAS Y COLAS/java/eulogioep.java b/Roadmap/07 - PILAS Y COLAS/java/eulogioep.java new file mode 100644 index 0000000000..c29801ead2 --- /dev/null +++ b/Roadmap/07 - PILAS Y COLAS/java/eulogioep.java @@ -0,0 +1,180 @@ +import java.util.Scanner; + +// Implementación de la Pila (Stack - LIFO) +class Stack { + private String[] array; + private int top; + private int capacity; + + // Constructor + public Stack(int size) { + array = new String[size]; + capacity = size; + top = -1; + } + + // Método para añadir un elemento a la pila + public void push(String x) { + if (isFull()) { + System.out.println("Error: Pila llena"); + return; + } + array[++top] = x; + } + + // Método para quitar un elemento de la pila + public String pop() { + if (isEmpty()) { + System.out.println("Error: Pila vacía"); + return null; + } + return array[top--]; + } + + // Método para verificar si la pila está vacía + public boolean isEmpty() { + return top == -1; + } + + // Método para verificar si la pila está llena + public boolean isFull() { + return top == capacity - 1; + } + + // Método para obtener el elemento en la cima de la pila sin quitarlo + public String peek() { + if (isEmpty()) { + System.out.println("Error: Pila vacía"); + return null; + } + return array[top]; + } +} + +// Implementación de la Cola (Queue - FIFO) +class Queue { + private String[] array; + private int front; + private int rear; + private int capacity; + private int count; + + // Constructor + public Queue(int size) { + array = new String[size]; + capacity = size; + front = 0; + rear = -1; + count = 0; + } + + // Método para añadir un elemento a la cola + public void enqueue(String x) { + if (isFull()) { + System.out.println("Error: Cola llena"); + return; + } + rear = (rear + 1) % capacity; + array[rear] = x; + count++; + } + + // Método para quitar un elemento de la cola + public String dequeue() { + if (isEmpty()) { + System.out.println("Error: Cola vacía"); + return null; + } + String x = array[front]; + front = (front + 1) % capacity; + count--; + return x; + } + + // Método para verificar si la cola está vacía + public boolean isEmpty() { + return count == 0; + } + + // Método para verificar si la cola está llena + public boolean isFull() { + return count == capacity; + } + + // Método para obtener el primer elemento de la cola sin quitarlo + public String peek() { + if (isEmpty()) { + System.out.println("Error: Cola vacía"); + return null; + } + return array[front]; + } +} + +// Clase principal que contiene los programas de navegador web e impresora +public class eulogioep { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + // Programa de navegador web + Stack backStack = new Stack(100); + Stack forwardStack = new Stack(100); + String currentPage = ""; + + System.out.println("Simulador de navegador web (escribe 'salir' para terminar):"); + while (true) { + System.out.print("Ingresa una acción o nombre de página web: "); + String input = scanner.nextLine().trim().toLowerCase(); + + if (input.equals("salir")) { + break; + } else if (input.equals("atrás")) { + if (!backStack.isEmpty()) { + forwardStack.push(currentPage); + currentPage = backStack.pop(); + System.out.println("Página actual: " + currentPage); + } else { + System.out.println("No hay páginas anteriores"); + } + } else if (input.equals("adelante")) { + if (!forwardStack.isEmpty()) { + backStack.push(currentPage); + currentPage = forwardStack.pop(); + System.out.println("Página actual: " + currentPage); + } else { + System.out.println("No hay páginas siguientes"); + } + } else { + if (!currentPage.isEmpty()) { + backStack.push(currentPage); + } + forwardStack = new Stack(100); // Limpia la pila de adelante + currentPage = input; + System.out.println("Página actual: " + currentPage); + } + } + + // Programa de impresora compartida + Queue printQueue = new Queue(100); + + System.out.println("\nSimulador de impresora compartida (escribe 'salir' para terminar):"); + while (true) { + System.out.print("Ingresa un nombre de documento o 'imprimir': "); + String input = scanner.nextLine().trim().toLowerCase(); + + if (input.equals("salir")) { + break; + } else if (input.equals("imprimir")) { + String document = printQueue.dequeue(); + if (document != null) { + System.out.println("Imprimiendo: " + document); + } + } else { + printQueue.enqueue(input); + System.out.println("Documento añadido a la cola: " + input); + } + } + + scanner.close(); + } +} \ No newline at end of file From fe57eb6fd6295d8e4327122b3410c28864cbf619 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Thu, 19 Sep 2024 10:42:46 +0200 Subject: [PATCH 400/539] #07 javascript --- .../javascript/eulogioep.js | 161 ++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 Roadmap/07 - PILAS Y COLAS/javascript/eulogioep.js diff --git a/Roadmap/07 - PILAS Y COLAS/javascript/eulogioep.js b/Roadmap/07 - PILAS Y COLAS/javascript/eulogioep.js new file mode 100644 index 0000000000..42f24b3cd9 --- /dev/null +++ b/Roadmap/07 - PILAS Y COLAS/javascript/eulogioep.js @@ -0,0 +1,161 @@ +const readline = require('readline'); + +// Implementación de la Pila (Stack - LIFO) +class Stack { + constructor() { + this.items = []; + } + + // Método para añadir un elemento a la pila + push(element) { + this.items.push(element); + } + + // Método para quitar un elemento de la pila + pop() { + if (this.isEmpty()) { + console.log("Error: Pila vacía"); + return null; + } + return this.items.pop(); + } + + // Método para verificar si la pila está vacía + isEmpty() { + return this.items.length === 0; + } + + // Método para obtener el elemento en la cima de la pila sin quitarlo + peek() { + if (this.isEmpty()) { + console.log("Error: Pila vacía"); + return null; + } + return this.items[this.items.length - 1]; + } +} + +// Implementación de la Cola (Queue - FIFO) +class Queue { + constructor() { + this.items = []; + } + + // Método para añadir un elemento a la cola + enqueue(element) { + this.items.push(element); + } + + // Método para quitar un elemento de la cola + dequeue() { + if (this.isEmpty()) { + console.log("Error: Cola vacía"); + return null; + } + return this.items.shift(); + } + + // Método para verificar si la cola está vacía + isEmpty() { + return this.items.length === 0; + } + + // Método para obtener el primer elemento de la cola sin quitarlo + peek() { + if (this.isEmpty()) { + console.log("Error: Cola vacía"); + return null; + } + return this.items[0]; + } +} + +// Función para el simulador de navegador web +function webBrowserSimulator() { + const backStack = new Stack(); + const forwardStack = new Stack(); + let currentPage = ""; + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + console.log("Simulador de navegador web (escribe 'salir' para terminar):"); + + function askForAction() { + rl.question("Ingresa una acción o nombre de página web: ", (input) => { + input = input.trim().toLowerCase(); + + if (input === 'salir') { + rl.close(); + printerSimulator(); + } else if (input === 'atrás') { + if (!backStack.isEmpty()) { + forwardStack.push(currentPage); + currentPage = backStack.pop(); + console.log("Página actual:", currentPage); + } else { + console.log("No hay páginas anteriores"); + } + } else if (input === 'adelante') { + if (!forwardStack.isEmpty()) { + backStack.push(currentPage); + currentPage = forwardStack.pop(); + console.log("Página actual:", currentPage); + } else { + console.log("No hay páginas siguientes"); + } + } else { + if (currentPage) { + backStack.push(currentPage); + } + forwardStack = new Stack(); // Limpia la pila de adelante + currentPage = input; + console.log("Página actual:", currentPage); + } + + askForAction(); + }); + } + + askForAction(); +} + +// Función para el simulador de impresora compartida +function printerSimulator() { + const printQueue = new Queue(); + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + console.log("\nSimulador de impresora compartida (escribe 'salir' para terminar):"); + + function askForDocument() { + rl.question("Ingresa un nombre de documento o 'imprimir': ", (input) => { + input = input.trim().toLowerCase(); + + if (input === 'salir') { + rl.close(); + return; + } else if (input === 'imprimir') { + const document = printQueue.dequeue(); + if (document) { + console.log("Imprimiendo:", document); + } + } else { + printQueue.enqueue(input); + console.log("Documento añadido a la cola:", input); + } + + askForDocument(); + }); + } + + askForDocument(); +} + +// Iniciar el simulador de navegador web +webBrowserSimulator(); \ No newline at end of file From 44a62ee546933576e76c6b60910e1c515dd51d3f Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Thu, 19 Sep 2024 10:43:33 +0200 Subject: [PATCH 401/539] #07 php --- Roadmap/07 - PILAS Y COLAS/php/eulogioep.php | 136 +++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 Roadmap/07 - PILAS Y COLAS/php/eulogioep.php diff --git a/Roadmap/07 - PILAS Y COLAS/php/eulogioep.php b/Roadmap/07 - PILAS Y COLAS/php/eulogioep.php new file mode 100644 index 0000000000..7f52242d50 --- /dev/null +++ b/Roadmap/07 - PILAS Y COLAS/php/eulogioep.php @@ -0,0 +1,136 @@ +items, $element); + } + + // Método para quitar un elemento de la pila + public function pop() { + if ($this->isEmpty()) { + echo "Error: Pila vacía\n"; + return null; + } + return array_pop($this->items); + } + + // Método para verificar si la pila está vacía + public function isEmpty() { + return empty($this->items); + } + + // Método para obtener el elemento en la cima de la pila sin quitarlo + public function peek() { + if ($this->isEmpty()) { + echo "Error: Pila vacía\n"; + return null; + } + return end($this->items); + } +} + +// Implementación de la Cola (Queue - FIFO) +class Queue { + private $items = []; + + // Método para añadir un elemento a la cola + public function enqueue($element) { + array_push($this->items, $element); + } + + // Método para quitar un elemento de la cola + public function dequeue() { + if ($this->isEmpty()) { + echo "Error: Cola vacía\n"; + return null; + } + return array_shift($this->items); + } + + // Método para verificar si la cola está vacía + public function isEmpty() { + return empty($this->items); + } + + // Método para obtener el primer elemento de la cola sin quitarlo + public function peek() { + if ($this->isEmpty()) { + echo "Error: Cola vacía\n"; + return null; + } + return $this->items[0]; + } +} + +// Función para el simulador de navegador web +function webBrowserSimulator() { + $backStack = new Stack(); + $forwardStack = new Stack(); + $currentPage = ""; + + echo "Simulador de navegador web (escribe 'salir' para terminar):\n"; + + while (true) { + $input = strtolower(trim(readline("Ingresa una acción o nombre de página web: "))); + + if ($input === 'salir') { + break; + } elseif ($input === 'atrás') { + if (!$backStack->isEmpty()) { + $forwardStack->push($currentPage); + $currentPage = $backStack->pop(); + echo "Página actual: $currentPage\n"; + } else { + echo "No hay páginas anteriores\n"; + } + } elseif ($input === 'adelante') { + if (!$forwardStack->isEmpty()) { + $backStack->push($currentPage); + $currentPage = $forwardStack->pop(); + echo "Página actual: $currentPage\n"; + } else { + echo "No hay páginas siguientes\n"; + } + } else { + if ($currentPage !== "") { + $backStack->push($currentPage); + } + $forwardStack = new Stack(); // Limpia la pila de adelante + $currentPage = $input; + echo "Página actual: $currentPage\n"; + } + } +} + +// Función para el simulador de impresora compartida +function printerSimulator() { + $printQueue = new Queue(); + + echo "\nSimulador de impresora compartida (escribe 'salir' para terminar):\n"; + + while (true) { + $input = strtolower(trim(readline("Ingresa un nombre de documento o 'imprimir': "))); + + if ($input === 'salir') { + break; + } elseif ($input === 'imprimir') { + $document = $printQueue->dequeue(); + if ($document !== null) { + echo "Imprimiendo: $document\n"; + } + } else { + $printQueue->enqueue($input); + echo "Documento añadido a la cola: $input\n"; + } + } +} + +// Ejecutar los simuladores +webBrowserSimulator(); +printerSimulator(); + +?> \ No newline at end of file From 7460e0a748a7058d923f6c0da7f1eb2a16e06676 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Thu, 19 Sep 2024 10:44:44 +0200 Subject: [PATCH 402/539] #07 typescript --- .../typescript/eulogioep.ts | 167 ++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 Roadmap/07 - PILAS Y COLAS/typescript/eulogioep.ts diff --git a/Roadmap/07 - PILAS Y COLAS/typescript/eulogioep.ts b/Roadmap/07 - PILAS Y COLAS/typescript/eulogioep.ts new file mode 100644 index 0000000000..d89edca0b8 --- /dev/null +++ b/Roadmap/07 - PILAS Y COLAS/typescript/eulogioep.ts @@ -0,0 +1,167 @@ +import * as readline from 'readline'; + +// Implementación de la Pila (Stack - LIFO) +class Stack { + private items: T[] = []; + + // Método para añadir un elemento a la pila + push(element: T): void { + this.items.push(element); + } + + // Método para quitar un elemento de la pila + pop(): T | undefined { + if (this.isEmpty()) { + console.log("Error: Pila vacía"); + return undefined; + } + return this.items.pop(); + } + + // Método para verificar si la pila está vacía + isEmpty(): boolean { + return this.items.length === 0; + } + + // Método para obtener el elemento en la cima de la pila sin quitarlo + peek(): T | undefined { + if (this.isEmpty()) { + console.log("Error: Pila vacía"); + return undefined; + } + return this.items[this.items.length - 1]; + } +} + +// Implementación de la Cola (Queue - FIFO) +class Queue { + private items: T[] = []; + + // Método para añadir un elemento a la cola + enqueue(element: T): void { + this.items.push(element); + } + + // Método para quitar un elemento de la cola + dequeue(): T | undefined { + if (this.isEmpty()) { + console.log("Error: Cola vacía"); + return undefined; + } + return this.items.shift(); + } + + // Método para verificar si la cola está vacía + isEmpty(): boolean { + return this.items.length === 0; + } + + // Método para obtener el primer elemento de la cola sin quitarlo + peek(): T | undefined { + if (this.isEmpty()) { + console.log("Error: Cola vacía"); + return undefined; + } + return this.items[0]; + } +} + +// Función para el simulador de navegador web +function webBrowserSimulator(): Promise { + const backStack = new Stack(); + const forwardStack = new Stack(); + let currentPage = ""; + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + console.log("Simulador de navegador web (escribe 'salir' para terminar):"); + + function askForAction(): Promise { + return new Promise((resolve) => { + rl.question("Ingresa una acción o nombre de página web: ", (input: string) => { + input = input.trim().toLowerCase(); + + if (input === 'salir') { + rl.close(); + resolve(); + } else if (input === 'atrás') { + if (!backStack.isEmpty()) { + forwardStack.push(currentPage); + currentPage = backStack.pop() || ""; + console.log("Página actual:", currentPage); + } else { + console.log("No hay páginas anteriores"); + } + } else if (input === 'adelante') { + if (!forwardStack.isEmpty()) { + backStack.push(currentPage); + currentPage = forwardStack.pop() || ""; + console.log("Página actual:", currentPage); + } else { + console.log("No hay páginas siguientes"); + } + } else { + if (currentPage) { + backStack.push(currentPage); + } + forwardStack = new Stack(); // Limpia la pila de adelante + currentPage = input; + console.log("Página actual:", currentPage); + } + + askForAction().then(resolve); + }); + }); + } + + return askForAction(); +} + +// Función para el simulador de impresora compartida +function printerSimulator(): Promise { + const printQueue = new Queue(); + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + console.log("\nSimulador de impresora compartida (escribe 'salir' para terminar):"); + + function askForDocument(): Promise { + return new Promise((resolve) => { + rl.question("Ingresa un nombre de documento o 'imprimir': ", (input: string) => { + input = input.trim().toLowerCase(); + + if (input === 'salir') { + rl.close(); + resolve(); + } else if (input === 'imprimir') { + const document = printQueue.dequeue(); + if (document) { + console.log("Imprimiendo:", document); + } + } else { + printQueue.enqueue(input); + console.log("Documento añadido a la cola:", input); + } + + askForDocument().then(resolve); + }); + }); + } + + return askForDocument(); +} + +// Función principal asíncrona para ejecutar los simuladores +async function main() { + await webBrowserSimulator(); + await printerSimulator(); +} + +// Ejecutar la función principal +main(); \ No newline at end of file From 699eb2bdd2761bd9107b9066d21fdbb228db0b08 Mon Sep 17 00:00:00 2001 From: Jesus Antonio Escamilla Date: Thu, 19 Sep 2024 03:41:55 -0600 Subject: [PATCH 403/539] #37 - JavaScript --- .../javascript/JesusAntonioEEscamilla.js | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/javascript/JesusAntonioEEscamilla.js diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/JesusAntonioEEscamilla.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/JesusAntonioEEscamilla.js new file mode 100644 index 0000000000..a272263d12 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/JesusAntonioEEscamilla.js @@ -0,0 +1,126 @@ +/** #37 - JavaScript -> Jesus Antonio Escamilla */ + +/** + * OASIS VS LINKIN PARK. + * Utilizando la Terminal para pedir datos y agregarlos. + */ + +const clientId = SPOTIFY_CLIENT_ID_MY; +const clientSecret = SPOTIFY_CLIENT_SECRET_MY; +// Para el contador +let artist_1_counter = 0; +let artist_2_counter = 0; + +// Obtener token de acceso +async function getAccessToken() { + const response = await fetch('https://accounts.spotify.com/api/token', { + method: 'POST', + headers: { + 'Authorization': 'Basic ' + btoa(clientId + ':' + clientSecret), + 'Content-Type': 'application/x-www-form-urlencoded' + }, + body: 'grant_type=client_credentials' + }); + + if (response.status != 200) { + console.error(`Error obteniendo el token de Spotify: ${response.json()}`) + } + const data = await response.json(); + return data.access_token; +} + +// Obtener los Id de las bandas +async function getSearchArtist(artistName, accessToken) { + const response = await fetch(`https://api.spotify.com/v1/search?q=${artistName}&type=artist&limit=1`, { + headers: { + 'Authorization': `Bearer ${accessToken}` + } + }); + + if (response.status != 200) { + console.error('Error obteniendo el artista') + } + const data = await response.json(); + return data.artists.items[0].id; +} + +// Obtener los Datos de las bandas +async function getArtistData(artistId, accessToken) { + const response = await fetch(`https://api.spotify.com/v1/artists/${artistId}`, { + method: 'GET', + headers: { + 'Authorization': `Bearer ${accessToken}` + } + }); + + if (response.status != 200) { + console.error('Error obteniendo los datos del artista') + } + const data = await response.json(); + return { + "name": data.name, + "followers": data.followers.total, + "popularity": data.popularity, + } +} + +// Obtener la música mas sonada de las bandas +async function getArtistTopTrack(artistId, accessToken) { + const response = await fetch(`https://api.spotify.com/v1/artists/${artistId}/top-tracks`, { + method: 'GET', + headers: { + 'Authorization': `Bearer ${accessToken}` + } + }); + + if (response.status != 200) { + console.error('Error obteniendo las canciones del artista') + } + const data = await response.json(); + const result = data.tracks[0] + return { + "name": result.name, + "popularity": result.popularity, + } +} + +// Comparar datos de Oasis y Linkin Park +async function compareBands() { + // Acceso al Token + const accessToken = await getAccessToken(clientId, clientSecret); + + // El Id de las bandas + const artist_1_id = await getSearchArtist('Oasis', accessToken); + const artist_2_id = await getSearchArtist('Linkin Park', accessToken); + + const artist_1_data = await getArtistData(artist_1_id, accessToken); + const artist_2_data = await getArtistData(artist_2_id, accessToken); + + const artist_1_topTrack = await getArtistTopTrack(artist_1_id, accessToken); + const artist_2_topTrack = await getArtistTopTrack(artist_2_id, accessToken); + + console.group('Los artistas:'); + console.group(artist_1_data.name); + console.log(`Seguidores es de ${artist_1_data.followers}`); + console.log(`Popularidad al mundo es ${artist_1_data.popularity}`); + console.log(`Canción mas popular es ${artist_1_topTrack.popularity}`); + console.groupEnd(); + + console.group(artist_2_data.name); + console.log(`Seguidores es de ${artist_2_data.followers}`); + console.log(`Popularidad al mundo es ${artist_2_data.popularity}`); + console.log(`Canción mas popular es ${artist_2_topTrack.popularity}`); + console.groupEnd(); + console.groupEnd(); + + console.group('\nComparación de los artistas:'); + artist_1_data.followers > artist_2_data.followers ? (console.log(`${artist_1_data.name} es más popular en número de seguidores.`), artist_1_counter++) : (console.log(`${artist_2_data.name} es más popular en número de seguidores.`), artist_2_counter++); + artist_1_data.popularity > artist_2_data.popularity ? (console.log(`${artist_1_data.name} es más popular a nivel general.`), artist_1_counter++) : (console.log(`${artist_2_data.name} es más popular a nivel general.`), artist_2_counter++); + artist_1_topTrack.popularity > artist_2_topTrack.popularity ? (console.log(`La canción ${artist_1_topTrack.name} de ${artist_1_data.name} es más popular.`), artist_1_counter++) : (console.log(`La canción ${artist_2_topTrack.name} de ${artist_2_data.name} es más popular.`), artist_2_counter++); + console.groupEnd(); + + console.log(`\nGanador es ${artist_1_counter > artist_2_counter ? artist_1_data.name : artist_2_data.name}`) +} + +// Uso del programa +compareBands(); \ No newline at end of file From 5ac6fdabb6e2407bb02b5027e12c329ff42e1b9a Mon Sep 17 00:00:00 2001 From: TizoG Date: Thu, 19 Sep 2024 12:52:52 +0200 Subject: [PATCH 404/539] # 01 - Javascript --- .../javascript/TizoG.js | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/TizoG.js diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/TizoG.js b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/TizoG.js new file mode 100644 index 0000000000..5dd28ab294 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/TizoG.js @@ -0,0 +1,72 @@ +// Ejemplos de Operadores + +console.log(1 + 1) // Suma +console.log(1 - 1) // Resta +console.log(2 * 2) // Multiplicacion +console.log(2 / 2) // Division +console.log(5 % 2) // Modulo +console.log(2 ** 2) // Potenciacion + +// Operaciones con enteros + +console.log(3 < 2) +console.log(3 <= 2) +console.log(3 > 2) +console.log(3 >= 2) +console.log(3 == 2) +console.log(3 === 2) +console.log(3 != 2) + +// Operadores logicos +console.log(3 < 2 && "hola" < "mundo") +console.log(3 < 2 || "hola" < "mundo") +console.log(!false) + +// Operadores de asignacion +let myNumber = 1 +console.log(myNumber) +myNumber += 1 +console.log(myNumber) +myNumber -= 1 +console.log(myNumber) +myNumber *= 1 +console.log(myNumber) +myNumber /= 1 +console.log(myNumber) +myNumber %= 1 +console.log(myNumber) +myNumber **= 1 +console.log(myNumber) + + +// Incremento +myNumber++ +// Decremento +myNumber-- + +/* +Estructuras de control +*/ +// Condicionales +let myName = "TizoG" +if (myName == "TizoG") { + console.log("myName es 'TizoG'") +} else if(myName == "tizog"){ + console.log("myName es 'tizog'") +} else{ + console.log("miName no es 'TizoG' ni 'tizog'") +} + +// Iteracion +for (let i = 0; i < 10; i++){ + console.log(`El valor actual de i es ${i}`) +} + +// Manejo de excepciones +try{ + console.log("Primero se ejecutara este bloque") +}catch{ + console.log("Este bloque se ejecutara si en el bloque primero ocurre un error") +}finally{ + console.log("Finalmente se ejecutara este bloque de codigo") +} \ No newline at end of file From 84831238d4413f767e612aa0971fa6a685944587 Mon Sep 17 00:00:00 2001 From: TizoG Date: Thu, 19 Sep 2024 12:53:48 +0200 Subject: [PATCH 405/539] # 01 - Python --- .../python/TizoG.py | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/TizoG.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/TizoG.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/TizoG.py new file mode 100644 index 0000000000..aad610ab4f --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/TizoG.py @@ -0,0 +1,101 @@ +# Ejemplos de Operadores + +print(1 + 1) # Suma +print(1 - 1) # Resta +print(2 * 2) # Multiplicacion +print(2 / 2) # Division +print(5 % 2) # Modulo +print(10 // 3) # Division con resultado entero forzado +print(2 ** 2) # Potenciacion + +# Operaciones con enteros +print(3 < 2) # Menor +print(3 > 2) # Mayor +print(3 <= 2) # Menor o Igual +print(3 >= 2) # Mayor o Igual +print(3 == 2) # Igualdad +print(3 != 2) # Desigualdad + +# Operadores Logicos +print(3 < 2 and "hola" < "mundo") # Retorna verdadero si ambos son verdadero +print(3 < 2 or "hola" < "mundo") # Retorna verdad si uno de los dos es verdadero +print(3 > 2 and "hola" > "mundo") +print(3 > 2 or "hola" > "mundo") +print(not(3 > 4)) # Da el valor contrario + +# Operadores de asignación +my_number = 1 +print(my_number) +my_number += 1 # suma y asignación +print(my_number) +my_number -= 1 +print(my_number) +my_number *= 2 +print(my_number) +my_number /= 2 +print(my_number) +my_number %= 2 +print(my_number) +my_number **= 2 +print(my_number) +my_number //= 1 +print(my_number) + + + +# Operadores de identidad +my_nuevo_numero = my_number +print(f"my_number is my_nuevo_numero es {my_number is my_nuevo_numero}") +print(f"my_numer is not my_nuevo_numero {my_number is not my_nuevo_numero}") + +# Operadores de pertenencia +print(f"'i' in 'TizoG' = {'i' in 'TizoG'}") +print(f"'a' in 'TizoG' = {'a' in 'TizoG'}") + +# Operadores de bit +a = 5 +b = 2 +print(f"AND : 5 & 2 = {5 & 2}") +print(f"OR: 5 | 2 = {5| 2}") +print(f"XOR: 5 ^ 2 = {5 ^ 2}") +print(f"Desplazamiento a la derecha: 5 >> 2 = {5 >> 2}") +print(f"Desplazamiento a la izquierda: 5 << 2 = {5 << 2}") + +""" +Estructuras de control +""" + +# Condicionales +my_name = "TizoG" +if my_name == "TizoG": + print("my_name is 'TizoG'") +elif my_name == "tizog": + print("my_name is 'tizog'") +else: + print("my_name no es 'TizoG' ni 'tizog'") + +# Iterativas +for i in range(11): + print(i) + +i = 0 +while i <= 10: + print(i) + i += 1 + +# Manejo de excepciones +try: + print(10 /0) +except: + print("Se ha produicido un error") +finally: + print("ha finalizado el manejo de excepciones") + + +""" +Extra +""" + +for number in range(10, 56): + if number % 2 == 0 and number != 16 and number % 3 != 0: + print(number) \ No newline at end of file From a23419a1b5e48794208fdd37f27b3dc8570bec51 Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Thu, 19 Sep 2024 09:51:55 -0400 Subject: [PATCH 406/539] 38 - JavaScript --- .../javascript/RicJDev.js | 6 ++ .../38 - MOUREDEV PRO/javascript/RicJDev.js | 78 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/javascript/RicJDev.js diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js index 12d76546a8..019601e8b8 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js +++ b/Roadmap/37 - OASIS VS LINKIN PARK/javascript/RicJDev.js @@ -1,3 +1,9 @@ +/* + EJERCICIO: + + @RicJDev +*/ + import { CLIENT_ID, CLIENT_SECRET } from './client.js' /* diff --git a/Roadmap/38 - MOUREDEV PRO/javascript/RicJDev.js b/Roadmap/38 - MOUREDEV PRO/javascript/RicJDev.js new file mode 100644 index 0000000000..3641f793dc --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/javascript/RicJDev.js @@ -0,0 +1,78 @@ +/* + EJERCICIO: + + @RicJDev +*/ + +import fs from 'fs/promises' + +// Creamos una función para convertir los datos del .csv en un array de objetos, usando las cabeceras como las claves de los valores de cada usuario. + +async function getUsersData() { + const usersArray = [] + + try { + const filePath = new URL('./data.csv', import.meta.url) + const data = await fs.readFile(filePath, 'utf8') + + const lines = data.trim().split('\n') + const headers = lines[0].split(',') + + for (let i = 1; i < lines.length; i++) { + const user = {} + const values = lines[i].split(',') + + headers.forEach((header, index) => { + user[header.trim()] = values[index].trim() + }) + + usersArray.push(user) + } + } catch (error) { + console.error('Error al leer el archivo CSV:', error) + } + + return usersArray +} + +// Una vez obtenidos los datos, creamos una función que nos retornará un usuario al azar. + +const usersData = await getUsersData() +const getRandomUser = () => usersData[Math.floor(Math.random() * usersData.length)] + +// Haremos las comprobaciones para el ganador de cada premio y lo almacenaremos en un objeto. + +const winners = { + suscription: null, + discount: null, + book: null, +} + +let winner = getRandomUser() + +winners.suscription = winner + +while (Object.values(winners).includes(winner)) { + winner = getRandomUser() +} + +winners.discount = winner + +while (Object.values(winners).includes(winner) || winner.status !== 'activo') { + winner = getRandomUser() +} + +winners.book = winner + +// Finalmente mostramos los resultados en consola. + +console.log('\nEstos son los resultados:') + +console.log(`\nEl ganador de una suscripción es: + ${winners.suscription.id}. ${winners.suscription.email}`) + +console.log(`\nEl ganador de un descuento es: + ${winners.discount.id}. ${winners.discount.email}`) + +console.log(`\nEl ganador de un libro es: + ${winners.book.id}. ${winners.book.email}`) From 6cf2c7def84a574f42de6cd718b7d70fd04e8ccb Mon Sep 17 00:00:00 2001 From: RicMonster1 <147381654+RicMonster1@users.noreply.github.com> Date: Thu, 19 Sep 2024 09:55:58 -0400 Subject: [PATCH 407/539] 38 - JavaScript --- Roadmap/38 - MOUREDEV PRO/javascript/RicJDev.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Roadmap/38 - MOUREDEV PRO/javascript/RicJDev.js b/Roadmap/38 - MOUREDEV PRO/javascript/RicJDev.js index 3641f793dc..3248d81dd6 100644 --- a/Roadmap/38 - MOUREDEV PRO/javascript/RicJDev.js +++ b/Roadmap/38 - MOUREDEV PRO/javascript/RicJDev.js @@ -4,10 +4,10 @@ @RicJDev */ -import fs from 'fs/promises' - // Creamos una función para convertir los datos del .csv en un array de objetos, usando las cabeceras como las claves de los valores de cada usuario. +import fs from 'fs/promises' + async function getUsersData() { const usersArray = [] From 4e236491e4a0a21c8cc9e458bc94bcccc34e16d3 Mon Sep 17 00:00:00 2001 From: LuisCalleGomez <141080256+LuisCalle17@users.noreply.github.com> Date: Thu, 19 Sep 2024 10:46:17 -0500 Subject: [PATCH 408/539] Create LuisCalle17.py --- .../python/LuisCalle17.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/LuisCalle17.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/LuisCalle17.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/LuisCalle17.py new file mode 100644 index 0000000000..2621ea2e76 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/LuisCalle17.py @@ -0,0 +1,28 @@ +""" +===================================================================================== + * EJERCICIO: + * - Crea un comentario en el código y coloca la URL del sitio web oficial del + * lenguaje de programación que has seleccionado. + * - Representa las diferentes sintaxis que existen de crear comentarios + * en el lenguaje (en una línea, varias...). + * - Crea una variable (y una constante si el lenguaje lo soporta). + * - Crea variables representando todos los tipos de datos primitivos + * del lenguaje (cadenas de texto, enteros, booleanos...). + * - Imprime por terminal el texto: "¡Hola, [y el nombre de tu lenguaje]!" +===================================================================================== +""" + +# https://www.python.org/ + +# comentario una sola linea = # +# comentario en multiples lineas = """ """ + +mi_variable = "Esto es una variable" +MI_CONSTANTE = "Esto es una constante" + +cadena_texto = "Mi cadena de texto" +entero = 1 +flotante = 10.5 +booleano = True or False + +print("Hola Python") From 5ab596930e48e315173f50295b8de6c4e1b5ec0c Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 19 Sep 2024 11:04:18 -0500 Subject: [PATCH 409/539] #16 - Python --- .../python/juanchernandezdev.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Roadmap/16 - EXPRESIONES REGULARES/python/juanchernandezdev.py diff --git a/Roadmap/16 - EXPRESIONES REGULARES/python/juanchernandezdev.py b/Roadmap/16 - EXPRESIONES REGULARES/python/juanchernandezdev.py new file mode 100644 index 0000000000..dd3599e361 --- /dev/null +++ b/Roadmap/16 - EXPRESIONES REGULARES/python/juanchernandezdev.py @@ -0,0 +1,36 @@ +### Python Regex ### +import re + +pattern = r'\d+' +string = 'this is my test with numbers 1 2 12 45 48' +result = re.findall(pattern, string, re.IGNORECASE) +print(result) + +#! Optional Challenge +#* Email + +email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$' +email = 'johndoe@gmail.com' + +if re.match(email_pattern, email): + print('Your email is correct') +else: + print('Wrong email format') + +#* Phone number US format +phone_pattern = r'^\+?1?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$' +phone_number = '123 456 7890' + +if re.match(phone_pattern, phone_number): + print('Your phone is correct') +else: + print('Wrong phone format') + +#* URL +url_pattern = r'^(https?:\/\/)?([a-zA-Z0-9_-]+\.)+[a-zA-Z]{2,6}(:\d+)?(\/[a-zA-Z0-9@:%._\+~#?&\/=-]*)?$' +url_number = "https://www.mytesturl.com" + +if re.match(url_pattern, url_number): + print('Your url is correct') +else: + print('Wrong url format') From c77b380343df85bfd6a88aac1e167f7a8f346540 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Heguaburu=20S=C3=A1nchez?= Date: Thu, 19 Sep 2024 13:47:29 -0300 Subject: [PATCH 410/539] 08-python --- Roadmap/08 - CLASES/python/NicoHeguaburu.py | 104 ++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 Roadmap/08 - CLASES/python/NicoHeguaburu.py diff --git a/Roadmap/08 - CLASES/python/NicoHeguaburu.py b/Roadmap/08 - CLASES/python/NicoHeguaburu.py new file mode 100644 index 0000000000..ed26c32d8e --- /dev/null +++ b/Roadmap/08 - CLASES/python/NicoHeguaburu.py @@ -0,0 +1,104 @@ +# Clases + +class Programador: + + apellido = None + + def __init__(self, nombre: str, edad: int, lenguajes: list) -> None: + self.nombre = nombre + self.edad = edad + self.lenguajes = lenguajes + + def print(self): + print(f"Nombre: {self.nombre} | Apellido: {self.apellido} | Edad: {self.edad} | Lenguajes: {self.lenguajes}") + + +mi_programador = Programador("Nicolás", 22, ["Python", "Javascript", "Typescript"]) +mi_programador.print() + +mi_programador.apellido = "Heguaburu" +mi_programador.print() + + + +#Dificultad extra + +class Stack: + + def __init__(self): + self.stack = [] + + def push(self, item): + self.stack.append(item) + + def count(self): + return(len(self.stack)) + + def pop(self): + if self.count() == 0: + return None + else: + self.stack.pop() + + + + def printer(self): + for i in self.stack: + print(i) + + + +my_stack = Stack() + +my_stack.push("nico") +my_stack.push("fede") +my_stack.push("uli") +my_stack.push("marcos") + +print(my_stack.count()) + +my_stack.pop() + + +print(my_stack.count()) + +my_stack.printer() + + +class Queue: + def __init__(self): + self.queue = [] + + def push(self, item): + self.queue.append(item) + + def count(self): + return(len(self.queue)) + + def pop(self): + if self.count() > 0: + self.queue.pop(0) + else: + print("No hay mas valores en la lista para eliminar") + + def printer(self): + for i in self.queue: + print(i) + + + +my_queue = Queue() + +my_queue.push("danet") +my_queue.push("serenito") +my_queue.push("conamigos") +my_queue.push("danonino") + +my_queue.printer() +my_queue.pop() +my_queue.printer() + +print(my_queue.count()) + + + From eebac88eb24a962fd248488b2f7595e5f110c2de Mon Sep 17 00:00:00 2001 From: cdryampi Date: Thu, 19 Sep 2024 18:55:21 +0200 Subject: [PATCH 411/539] #38 python --- Roadmap/38 - MOUREDEV PRO/python/cdryampi.py | 190 +++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/cdryampi.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/cdryampi.py b/Roadmap/38 - MOUREDEV PRO/python/cdryampi.py new file mode 100644 index 0000000000..2af9ade9ca --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/cdryampi.py @@ -0,0 +1,190 @@ +# /* +# * EJERCICIO: +# * He presentado mi proyecto más importante del año: mouredev pro. +# * Un campus para la comunidad, que lanzaré en octubre, donde estudiar +# * programación de una manera diferente. +# * Cualquier persona suscrita a la newsletter de https://mouredev.pro +# * accederá a sorteos mensuales de suscripciones, regalos y descuentos. +# * +# * Desarrolla un programa que lea los registros de un fichero .csv y +# * seleccione de manera aleatoria diferentes ganadores. +# * Requisitos: +# * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" +# * o "inactivo" (y datos ficticios). +# * Ejemplo: 1 | test@test.com | activo +# * 2 | test2@test.com | inactivo +# * (El .csv no debe subirse como parte de la corrección) +# * 2. Recupera los datos desde el programa y selecciona email aleatorios. +# * Acciones: +# * 1. Accede al fichero .csv y selecciona de manera aleatoria un email +# * ganador de una suscripción, otro ganador de un descuento y un último +# * ganador de un libro (sólo si tiene status "activo" y no está repetido). +# * 2. Muestra los emails ganadores y su id. +# * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) +# * no debe tenerse en cuenta. +# */ +import os.path +import csv +import uuid +import random + + +class Subscriptor(): + """ + Clase que representa a un subscriptor. + """ + __headers = ['email', 'status','id'] + + def __init__(self,email: str, status: bool, id = uuid.uuid1()) -> None: + self.id = id + self.email = email + self.status = status + + def __str__(self) -> str: + + estado = "activo" if self.status else "inactivo" + + return f"El subscritor {self.id} - {self.email} - {estado} " + + @classmethod + def get_headers(cls): + return cls.__headers + +class CSVFile(): + """ + Clase que representa a un CSV. + """ + + __path_file = "subscriptores.csv" + __subscriptores = [] + + def __init__(self)-> None: + + if self.check_file(): + self.cargar_datos() + else: + self.crear_fichero() + + def check_file(self)-> bool: + return True if os.path.isfile(self.__path_file) else False + + def add_subscriptor(self, subscriptor: Subscriptor)-> bool: + if any([value for value in self.__subscriptores if value.email == subscriptor.email]): + print(f'el subscriptor {subscriptor.email} ya existe por lo tanto no se añadirá.') + return False + self.__subscriptores.append(subscriptor) + return True + + def cargar_datos(self)-> bool: + print(f"Cargando fichero {self.__path_file}....") + try: + self.__subscriptores = [] + with open(self.__path_file, 'r', encoding='utf-8') as file: + reader = csv.DictReader(file) + for line in reader: + status = True if line[Subscriptor.get_headers()[1]] == "True" else False + subscriptor = Subscriptor(line[Subscriptor.get_headers()[0]], status , line[Subscriptor.get_headers()[2]]) + self.__subscriptores.append(subscriptor) + + except Exception as e: + print(f"No se ha podido cargar los datos {e}") + print("Creando nuevo fichero....") + self.crear_fichero() + + def crear_fichero(self)-> bool: + try: + with open(self.__path_file, 'w', newline='', encoding='utf-8') as file: + writer = csv.DictWriter(file, fieldnames=Subscriptor.get_headers()) + writer.writeheader() + except Exception as e: + print(f"Ha habido un error al crear el fichero {e}") + return False + return True + + def guardar_datos(self)-> bool: + + if len(self.__subscriptores) !=0: + try: + with open(self.__path_file, 'w', newline='', encoding='utf-8') as file: + writer = csv.DictWriter(file, fieldnames=Subscriptor.get_headers()) + + writer.writeheader() + + for subscriptor in self.__subscriptores: + writer.writerow({ + 'email': subscriptor.email, + 'status': subscriptor.status, + 'id': subscriptor.id + }) + except Exception as e: + print(f"No se ha podido guardar los datos {e}") + return False + else: + return False + + return True + + def leer_datos(self)-> None: + if len(self.__subscriptores) !=0: + + for subscriptor in self.__subscriptores: + + print(subscriptor) + + def generar_ganador(self) -> Subscriptor: + + return random.choice(self.__subscriptores) + + def sorteo(self) -> None: + ganadores = [] + def backtracking(ganadores_provicionales: list, indice: int): + if len(ganadores_provicionales) == 3: + ganadores.extend(ganadores_provicionales) + return + if indice >= len(self.__subscriptores): + return + + for i in range(indice, len(self.__subscriptores)): + subscriptor_random = random.choice(self.__subscriptores) + if subscriptor_random not in ganadores_provicionales and subscriptor_random.status: + ganadores_provicionales.append(subscriptor_random) + backtracking(ganadores_provicionales, i+1) + if len(ganadores) == 3: + return + ganadores_provicionales.pop() + + if len([subs for subs in self.__subscriptores if subs.status]) > 3: + backtracking([],0) + + if len(ganadores) == 3: + print(f"El ganador de la subscripción es: {ganadores[0]}") + print(f"El ganador del descuento es: {ganadores[1]}") + print(f"El ganador del libro es: {ganadores[2]}") + else: + print("No se ha podido encontrar una combinación ganadora, intentalo otra vez.") + else: + print("No tenemos suficientes subscriptores activos para hacer el sorteo.") + + +csv_gestion = CSVFile() + +subscriptor_1 = Subscriptor('sub10@gmail.com',True) +subscriptor_2 = Subscriptor('sub0@gmail.com',True) +subscriptor_3 = Subscriptor('sub2@gmail.com',False) +subscriptor_4 = Subscriptor('sub1@gmail.com',True) +subscriptor_5 = Subscriptor('sub3@gmail.com',False) + + + +csv_gestion.add_subscriptor(subscriptor_1) +csv_gestion.add_subscriptor(subscriptor_2) +csv_gestion.add_subscriptor(subscriptor_3) +csv_gestion.add_subscriptor(subscriptor_4) +csv_gestion.add_subscriptor(subscriptor_5) + + + +# csv_gestion.guardar_datos() + +#csv_gestion.leer_datos() +csv_gestion.sorteo() \ No newline at end of file From 575b180a38173e9652586de46dabe96396d53ed8 Mon Sep 17 00:00:00 2001 From: adra-dev Date: Thu, 19 Sep 2024 12:44:11 -0600 Subject: [PATCH 412/539] #33 - Python --- .../python/adra-dev.py | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Roadmap/33 - RESCATANDO A MICKEY/python/adra-dev.py diff --git a/Roadmap/33 - RESCATANDO A MICKEY/python/adra-dev.py b/Roadmap/33 - RESCATANDO A MICKEY/python/adra-dev.py new file mode 100644 index 0000000000..daafcfecf8 --- /dev/null +++ b/Roadmap/33 - RESCATANDO A MICKEY/python/adra-dev.py @@ -0,0 +1,91 @@ +""" +EJERCICIO: +¡Disney ha presentado un montón de novedades en su D23! +Pero... ¿Dónde está Mickey? +Mickey Mouse ha quedado atrapado en un laberinto mágico +creado por Maléfica. +Desarrolla un programa para ayudarlo a escapar. +Requisitos: +1. El laberinto está formado por un cuadrado de 6x6 celdas. +2. Los valores de las celdas serán: + - ⬜️ Vacío + - ⬛️ Obstáculo + - 🐭 Mickey + - 🚪 Salida +Acciones: +1. Crea una matriz que represente el laberinto (no hace falta +que se genere de manera automática). +2. Interactúa con el usuario por consola para preguntarle hacia +donde se tiene que desplazar (arriba, abajo, izquierda o derecha). +3. Muestra la actualización del laberinto tras cada desplazamiento. +4. Valida todos los movimientos, teniendo en cuenta los límites +del laberinto y los obtáculos. Notifica al usuario. +5. Finaliza el programa cuando Mickey llegue a la salida. + +by adra-dev +""" + + +labyrinth = [ + [ "⬜️", "⬜️", "⬛️", "⬛️", "⬛️", "⬛️"], + [ "⬜️", "⬜️", "⬜️", "⬛️", "⬛️", "⬛️"], + [ "🐭", "⬜️", "⬜️", "⬜️", "⬜️", "⬜️"], + [ "⬛️", "⬛️", "⬛️", "⬛️", "⬛️", "⬜️"], + [ "⬛️", "⬛️", "⬛️", "⬛️", "⬛️", "⬜️"], + [ "⬛️", "⬛️", "⬛️", "⬛️", "⬛️", "🚪" ] +] + + +def print_labyrinth(): + for row in labyrinth: + print("".join(row)) + print() + +mickey = [2, 0] + + + +while True: + + print_labyrinth() + + print("Hacia donde se mueve mickey?") + print("[w] arriba") + print("[s] abajo") + print("[a] izquierda") + print("[d] dereca") + direction = input("Direccion: ") + + current_row, current_column = mickey + new_row, new_column = current_row, current_column + + match direction: + case "w": + new_row = current_row - 1 + case "s": + new_row = current_row + 1 + case "a": + new_column = current_column - 1 + case "d": + new_column = current_column + 1 + case _: + print("Direccion no valida.\n") + continue + + if new_row < 0 or new_row > 5 or new_column < 0 or new_row > 5: + print("No puedes desplazarte fuera del laberinto.\n") + continue + else: + if labyrinth[new_row][new_column] == "⬛️": + print("En esa direccion hay un obstaculo.\n") + continue + elif labyrinth[new_row][new_column] == "🚪": + print("Has encontrado la salida!") + labyrinth[current_row][current_column] = "⬜️" + labyrinth[new_row][new_column] = "🐭" + print_labyrinth() + break + else: + labyrinth[current_row][current_column] = "⬜️" + labyrinth[new_row][new_column] = "🐭" + mickey = [new_row, new_column] \ No newline at end of file From 42546b533a9495d0a7dceaa00dfb54aa6a95421b Mon Sep 17 00:00:00 2001 From: Johanna Palo Date: Thu, 19 Sep 2024 16:34:53 -0300 Subject: [PATCH 413/539] #03 - Javascript --- .../javascript/joapalobael.js | 155 ++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/joapalobael.js diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/joapalobael.js b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/joapalobael.js new file mode 100644 index 0000000000..da7ab79261 --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/javascript/joapalobael.js @@ -0,0 +1,155 @@ +//--------------------------------> Estructuras de datos de JS +//Array +console.log('Estructura de dato: Array'); +let lista = ["Mani", "Nuez", "Castaña de Cajú", "Avellana"] +console.log(lista); +console.log('---------------------------------'); + +//Agregar elemento al final del array +console.log('Agregar al final → push()'); +lista.push("Almendra", "Girasol"); +console.log(lista); +console.log('---------------------------------'); + +//Eliminar del array +console.log('Eliminar primer item → pop()'); +lista.pop(); +console.log(lista); +console.log('---------------------------------'); + +//Agregar elemento al comienzo del array +console.log('Agregar al comienzo → unshift()'); +lista.unshift("Girasol"); +console.log(lista); +console.log('---------------------------------'); +//Eliminar primer elemento de la lista +console.log('Eliminar al comienzo → shift()'); +lista.shift(); +console.log(lista); +console.log('---------------------------------'); + +//Encontrar el índice de un elemento del array +console.log('Indice → idexOf("x")'); +let posicion = lista.indexOf("Nuez"); +console.log(`La posición en la lista de la Nuez es: ${posicion}`); +console.log('---------------------------------'); + +//Eliminar un elemento con posición del array → Quitar, reemplazar o agregar nuevos elementos del medio del array +//Splice (index, borrar, agregar) +console.log('Eliminar/agregar un elemento en el medio → splice()'); +console.log(lista); +lista.splice(4, 0, 'Girasol'); +console.log(lista); +console.log('---------------------------------'); + +// Array de objetos +console.log('Estructura de dato: Array de objetos'); +const verduleria = [ + { nombre: "papa", costo: 1200, unidad: "kg" }, + { nombre: "cebolla", costo: 800, unidad: "kg" }, + { nombre: "zanahoria", costo: 400, unidad: "kg" }, + { nombre: "palta", costo: 1500, unidad: "unidad" },] + +verduleria.push({ nombre: "lechuga", costo: 2800, unidad: "kg" }); // agregar un dato +verduleria.splice(1, 1); //Elimina 1 dato +verduleria[3].nombre = "Lechuga Francesa" //Actualiza dato +verduleria.sort((a, b) => a.costo - b.costo); //Ordena datos +//Busqueda +let buscaVerdura = "Zanahoria"; +let verdura = verduleria.find(verdura => verdura.nombre.toLocaleLowerCase().includes(buscaVerdura.toLocaleLowerCase())); +if (verdura) { + console.log(`La ${verdura.nombre} sale $${verdura.costo} por ${verdura.unidad}`); +} +else { console.log(`No tenemos stock de ${buscaVerdura}. Vuelva prontos`) }; +console.log('---------------------------------'); + +//--------------------------------> Ejercicio extra +/* + * DIFICULTAD EXTRA (opcional): + * Crea una agenda de contactos por terminal. + * - Debes implementar funcionalidades de búsqueda, inserción, actualización y eliminación de contactos. + * - Cada contacto debe tener un nombre y un número de teléfono. + * - El programa solicita en primer lugar cuál es la operación que se quiere realizar, y a continuación + * los datos necesarios para llevarla a cabo. + * - El programa no puede dejar introducir números de teléfono no númericos y con más de 11 dígitos. + * (o el número de dígitos que quieras) + * - También se debe proponer una operación de finalización del programa. + */ + +//También instale npm install prompt-sync +// Y se debe colocar const prompt = require("prompt-sync")({sigint:true}); al comienzo del código +const prompt = require("prompt-sync")({ sigint: true }); + +let agendaContactos = [ + { nombre: "Sara Garrett", tel: 4958572 }, + { nombre: "Gilbert Robinson", tel: 8259704 }, + { nombre: "Pedro Byrd", tel: 4714090 }, + { nombre: "Hannah Ryan", tel: 9847358 }, + { nombre: "Lisa Spencer", tel: 8577432 }, + { nombre: "Ivan Shaw", tel: 3872149 }, +] + +function mi_agenda() { + let is_on = true; + while (is_on) { + console.log("1. Buscar contacto"); + console.log("2. Insertar contacto"); + console.log("3. Actualizar contacto"); + console.log("4. Eliminar contacto"); + console.log("5. salir"); + let usuarioResponde = prompt('Seleccione una opción: '); + + switch (usuarioResponde) { + // 1. Buscar + case "1": + let buscaNombre = prompt('Introduce el nombre del contacto a buscar: '); + let contactoEncontrado = agendaContactos.find(contacto => contacto.nombre.toLocaleLowerCase().includes(buscaNombre.toLocaleLowerCase())); + + if (contactoEncontrado) { + console.log(`El teléfono de ${contactoEncontrado.nombre} es: ${contactoEncontrado.tel}`); + } else { + console.log(`El contacto ${buscaNombre} no existe`); + } + break; + // 2. Agregar + case "2": + let nombreNuevo = prompt('Inserte el nombre: '); + let telNuevo = prompt('Inserte el tel nuevo: '); + while (!(!isNaN(telNuevo) && telNuevo.length > 0 && telNuevo.length <= 11)) { + tel = prompt('Inserte un número válido de no más de 11 caracteres'); + } + telNuevo = parseInt(telNuevo); + agendaContactos.push({ nombre: nombreNuevo, tel: telNuevo }); + console.log(agendaContactos) + break; + // 3. Modificar + case "3": + let modificaNombre = prompt('Introduce el nombre del contacto a modificar: '); + let encuentraContacto = agendaContactos.find(contacto => contacto.nombre.toLocaleLowerCase().includes(modificaNombre.toLocaleLowerCase())); + if(encuentraContacto){ + encuentraContacto.tel = prompt('Introduce el nuevo número: '); + console.log(`El nuevo número de ${encuentraContacto.nombre} es ${encuentraContacto.tel}`); + } else {console.log(`El contacto ${modificaNombre} no existe`); + } + break; + // 4. Eliminar + case "4": + let eliminaNombre = prompt('Introduce el nombre del contacto a eliminar: '); + let contactoEliminado = agendaContactos.find(contacto => contacto.nombre.toLocaleLowerCase().includes(eliminaNombre.toLocaleLowerCase())); + let indexContacto = agendaContactos.indexOf(contactoEliminado) + agendaContactos.splice(indexContacto, 1); + console.log(`Se elimino a ${contactoEliminado.nombre} de la agenda.`) + break; + // 5. Salir + case "5": + console.log("Gracias, vuelva pronto."); + is_on = false; + break; + default: + console.log("Opción inválida\n Elija un numero del 1 al 5"); + break; + } +} +} + +mi_agenda(); \ No newline at end of file From e1ba6c805883934cb5b3debda058ce5f6c848eeb Mon Sep 17 00:00:00 2001 From: Jordi Ayala Date: Thu, 19 Sep 2024 14:01:41 -0600 Subject: [PATCH 414/539] #37 - Java --- .../java/asjordi.java | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/java/asjordi.java diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/java/asjordi.java b/Roadmap/37 - OASIS VS LINKIN PARK/java/asjordi.java new file mode 100644 index 0000000000..956e845802 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/java/asjordi.java @@ -0,0 +1,72 @@ +import org.apache.hc.core5.http.ParseException; +import se.michaelthelin.spotify.SpotifyApi; +import se.michaelthelin.spotify.exceptions.SpotifyWebApiException; +import se.michaelthelin.spotify.model_objects.credentials.ClientCredentials; +import se.michaelthelin.spotify.model_objects.specification.Artist; +import se.michaelthelin.spotify.requests.authorization.client_credentials.ClientCredentialsRequest; +import se.michaelthelin.spotify.requests.data.artists.GetArtistRequest; + +import java.io.IOException; +import java.util.Arrays; + +public class Main { + + private final String clientId = System.getenv("SPOTIFY_CLIENT_ID"); + private final String clientSecret = System.getenv("SPOTIFY_CLIENT_SECRET"); + private String clientToken; + private SpotifyApi spotifyApi = new SpotifyApi.Builder() + .setClientId(clientId) + .setClientSecret(clientSecret) + .build(); + private final ClientCredentialsRequest clientCredentialsRequest = spotifyApi.clientCredentials() + .build(); + + public static void main(String[] args) { + Main m = new Main(); + m.getClientToken(); + ArtistInfo oasis = m.getArtistInfo("2DaxqgrOhkeH0fpeiQq2f4"); + ArtistInfo lp = m.getArtistInfo("6XyY86QOPPrYVGvF9ch6wz"); + + System.out.println(oasis); + System.out.println(lp); + + System.out.println("Who is more popular?"); + System.out.println(oasis.popularity() > lp.popularity() ? "Oasis" : "Linkin Park"); + } + + public ArtistInfo getArtistInfo(String id) { + GetArtistRequest getArtistRequest = spotifyApi.getArtist(id).build(); + try { + Artist artist = getArtistRequest.execute(); + return new ArtistInfo(artist.getName(), artist.getPopularity(), artist.getFollowers().getTotal(), artist.getGenres()); + } catch (IOException | SpotifyWebApiException | ParseException e) { + System.out.println("Error: " + e.getMessage()); + } + return null; + } + + private void getClientToken() { + try { + final ClientCredentials clientCredentials = clientCredentialsRequest.execute(); + this.clientToken = clientCredentials.getAccessToken(); + spotifyApi.setAccessToken(clientCredentials.getAccessToken()); + } catch (IOException | SpotifyWebApiException | ParseException e) { + System.out.println("Error: " + e.getMessage()); + } + } + + record ArtistInfo(String name, int popularity, int followers, String[] genres) { + @Override + public String toString() { + return "ArtistInfo{" + + "name='" + name + '\'' + + ", popularity=" + popularity + + ", followers=" + followers + + ", genres=" + Arrays.toString(genres) + + '}'; + } + } + +} + +// https://github.com/spotify-web-api-java/spotify-web-api-java From 8a56d39dfcc6214ba46402f7459bcb182f325adb Mon Sep 17 00:00:00 2001 From: Jesus Estrada Date: Thu, 19 Sep 2024 14:04:42 -0600 Subject: [PATCH 415/539] #32 - JavaScript --- .../javascript/JesusEs1312.js | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/javascript/JesusEs1312.js diff --git a/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/javascript/JesusEs1312.js b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/javascript/JesusEs1312.js new file mode 100644 index 0000000000..db938bb59d --- /dev/null +++ b/Roadmap/32 - BATALLA DEADPOOL Y WOLVERINE/javascript/JesusEs1312.js @@ -0,0 +1,91 @@ +class Character { + constructor(name, hp, regeneration, evasion){ + this.name = name; + this.hp = hp; + this.regeneration = regeneration; + this.evasion = evasion; + this.damage = 0; + } +} + +class Battle { + + constructor(){} + + regenaration(character){ + let probability = Math.random() * 100 + 1; + if(probability <= character.regenaration){ + console.log(`${character.name} esquivo el golpe xD`); + console.log(`${character.name} se esta regenerando...`); + character.hp =+ character.regenaration; + console.log(`${character.name} se regeneró ${character.regenaration}%, su nueva vida: ${character.hp}`); + return true; + } + + return false; + } + + fight(){ + console.log("Entreeeee a la batalla"); + let deadpool = new Character("Deadpool", 1000, 25, 25); + let wolverine = new Character("Wolverine", 1200, 15, 20); + while(deadpool.hp > 0 && wolverine.hp > 0){ + let random1 = Math.random() * (100 - 10) + 10; + let random2 = Math.random() * (120 - 10) + 10; + deadpool.damage = parseInt(random1); + wolverine.damage = parseInt(random2); + let min = 0; + let max = 2; + let turn = parseInt(Math.random() * (max - min) + min); + let regenaration = false; + if(turn == 0){ + console.log(`Golpea Deadpool con ${deadpool.damage} de daño`); + regenaration = this.regenaration(deadpool); + if(regenaration){ + min = 1; + max = 2; + } else { + wolverine.hp -= deadpool.damage; + console.log(`Vida restante de ${wolverine.name}: ${wolverine.hp}`); + if(deadpool.damage == 100){ + console.log(`${deadpool.name} dio un critico`); + min = 0; + max = 1; + } else { + min = 1; + max = 2; + } + } + } else { + console.log(`Golpea Wolverine con ${deadpool.damage} de daño`); + regenaration = this.regenaration(wolverine); + if(regenaration){ + min = 0; + max = 1; + } else { + deadpool.hp -= wolverine.damage; + console.log(`Vida restante de ${deadpool.name}: ${deadpool.hp}`); + if(wolverine.damage == 120){ + console.log(`${wolverine.name} dio un critico`); + min = 1; + max = 2; + } else { + min = 0; + max = 1; + } + } + } + } + + if(deadpool.hp > 0){ + console.log("----- Deadpool gana -----"); + } else { + console.log("----- Wolverine gana -----"); + } + } + +} + +let battle = new Battle(); +battle.fight(); + From 9fe2095d78951b14e014f9e0b4b2fb1cde23414e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Heguaburu=20S=C3=A1nchez?= Date: Thu, 19 Sep 2024 17:08:30 -0300 Subject: [PATCH 416/539] 09-python --- Roadmap/09 - HERENCIA/python/NicoHeguaburu.py | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 Roadmap/09 - HERENCIA/python/NicoHeguaburu.py diff --git a/Roadmap/09 - HERENCIA/python/NicoHeguaburu.py b/Roadmap/09 - HERENCIA/python/NicoHeguaburu.py new file mode 100644 index 0000000000..ad73da0acc --- /dev/null +++ b/Roadmap/09 - HERENCIA/python/NicoHeguaburu.py @@ -0,0 +1,114 @@ +# Herencia + + +class Animal: + + def __init__(self, name: str): + self.name = name + + def sound(self): + pass + + + +class Dog(Animal): + + def sound(self): + print("Guau!") + +class Cat(Animal): + + def sound(self): + print("Miau!") + + +def print_sound(animal: Animal): + animal.sound() + + +my_animal = Animal("Animal") +my_animal.sound() + +my_dog = Dog("Dog") +my_dog.sound() + +my_cat = Cat("Cat") +my_cat.sound() + + +print_sound(my_cat) + + + + +#Dificultad Extra +planilla = [] + +class Empleado: + def __init__(self, nombre: str): + self.nombre = nombre + self.id = len(planilla) + 1 + self.puesto = self.definir_puesto() + perfil_empleado = {} + perfil_empleado["Nombre"] = nombre + perfil_empleado["ID"] = self.id + perfil_empleado["Puesto"] = self.puesto + planilla.append(perfil_empleado) + +class Gerente(Empleado): + def definir_puesto(self): + return "Gerente" + + def desarolladores_a_cargo(self): + desarolladores = [] + for i in planilla: + if i["Puesto"] == "Desarollador": + desarolladores.append(i["Nombre"]) + print(desarolladores) + + + def pms_a_cargo(self): + pms = [] + for i in planilla: + if i["Puesto"] == "PM": + pms.append(i["Nombre"]) + print(pms) + + + +class Pm(Empleado): + def definir_puesto(self): + return "PM" + + def desarolladores_a_cargo(self): + desarolladores = [] + for i in planilla: + if i["Puesto"] == "Desarollador": + desarolladores.append(i["Nombre"]) + print(desarolladores) + + +class Desarollador(Empleado): + def definir_puesto(self): + return "Desarollador" + + +empleado1 = Gerente("Jorge") +empleado2 = Pm("Nicolás") +empleado3 = Desarollador("Sofia") +empleado4 = Gerente("Matias") +empleado5 = Pm("Lorenzo") +empleado6 = Desarollador("Julio") +empleado7 = Gerente("Marcos") +empleado8 = Pm("Maria") +empleado9 = Desarollador("Sebastian") + + + + + +print(planilla) + +empleado1.desarolladores_a_cargo() +empleado1.pms_a_cargo() +empleado2.desarolladores_a_cargo() \ No newline at end of file From 7373ff0f71ec7278d3ac37602b4cf22d645ad696 Mon Sep 17 00:00:00 2001 From: zakkdrte Date: Thu, 19 Sep 2024 14:47:16 -0600 Subject: [PATCH 417/539] Roadmap/04 --- .../python/ZAKKDRTE.py | 144 ++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 Roadmap/04 - CADENAS DE CARACTERES/python/ZAKKDRTE.py diff --git a/Roadmap/04 - CADENAS DE CARACTERES/python/ZAKKDRTE.py b/Roadmap/04 - CADENAS DE CARACTERES/python/ZAKKDRTE.py new file mode 100644 index 0000000000..1bc7e97bad --- /dev/null +++ b/Roadmap/04 - CADENAS DE CARACTERES/python/ZAKKDRTE.py @@ -0,0 +1,144 @@ +''' + * EJERCICIO: + * Muestra ejemplos de todas las operaciones que puedes realizar con cadenas de caracteres + * en tu lenguaje. Algunas de esas operaciones podrían ser (busca todas las que puedas): + * - Acceso a caracteres específicos, subcadenas, longitud, concatenación, repetición, + * recorrido, conversión a mayúsculas y minúsculas, reemplazo, división, unión, + * interpolación, verificación... + * + * DIFICULTAD EXTRA (opcional): + * Crea un programa que analice dos palabras diferentes y realice comprobaciones + * para descubrir si son: + * - Palíndromos + * - Anagramas + * - Isogramas +''' + +## CONCATENATION ## + +string:str = "[+] Hello" + " " + "World!" # Use the + operator to join two or morw strings + +print (string) + + +## REPETITION ## + +string = "Hello World\t" * 3 # Use the * operator to repeat a string a specified number of times + +print (string) + + +## INDEXES AND SLICES ## + +string = "Hello Python" + +print(string[0], string[-1]) # Indexes: You can access a character using its index +print(string[0:3]) # Slicing: To extract parts of a string + + +## LENGTH ## + +len_str = len(string) # Get the length of the strings: With the len() function + +print(len_str) + +## TRANSFORMATIONS METHODS ## + +upper_str = string.upper() # HELLO PYTHON +print(upper_str) + +lower_str = string.lower() # hello python +print(lower_str) + +cap_str = string.capitalize() # Hello python +print(cap_str) + +title_str = string.title() # Hello Python +print(title_str) + +title_swap = string.swapcase() # hELLO pYTHON +print(title_swap) + +## SEARCH AND REPLACE ## + +print(string.find('Python')) # 6 Returns the index of the first occurrence of a substring, or -1 if not found. + +print(string.index('Python')) # 6 the same that find but raises an error if the substring is not found. + +print(string.replace("Python","Hello")) # replace all the ocurrences of a substring with another. + +print(string.count("Hello")) # 2 Counts how many times a substring appears in the string. + +## COMPARISON ## + + +print("a" < "b") # Strings can be compared using comparison operators. + +print("HELLO" == "HELLO") + +## VALIDATION METHODS ## + +print(string.startswith("Hello")) # Checks if the string starts with a substring. + +print(string.endswith("Python")) # Checks if the string ends with a substring. + +print(string.isalpha()) # Checks if all characters are letters. + +print(string.isdigit()) # Checks if all characters are digits. + +print(string.isspace()) # Checks if the string contains only whitespace. + +print(string.isalnum()) # Checks if the string is alphanumeric ( contains letters and/or digits ). + +## SPLIT AND JOIN ## + +print(string.split()) # Splits the string into a list of substrings based on a delimeter ( by default, spaces ). + +print(string.join(" !!!!")) # Joins the elements of a list into a string, using a separator. + +## TRIM WHITESPACE ## + +print(' string '.strip()) # Removes leading and trailing whitespace. + +print(' string'.lstrip()) # Removes leading whitespace. + +print('string '.rstrip()) # Removes trailing whitespace. + +## STRING FORMATTING ## + +print("[+] {}".format(string)) # Used to format a string with values. + +print(f"[+] {string}") # f-strigns: A simplified syntax for string formatting. + +## REVERSING ## + +print(string[::-1]) # There isn't a direct method to reverse a string, but you can use slicing. + + + +## EXTRA ## + + +text1 = input("\n[+] Write the first word without accents, character specials:\t") +text2 = input("\n[+] Write the second word without accents, character specials:\t") + +def get_text(text1, text2) -> str: + + + if (sorted(set(text1)) == sorted(set(text2))): + print("\n[+] Son anagramas\n") + elif (text1.strip() == (text1.strip()[::-1]) and text2.strip() == (text2.strip()[::-1])): + print("\n[+] Son Palindromos\n") + elif (sorted(set(text1)) == sorted(text1) and sorted(set(text2)) == sorted(text2)): + + for i in text1: + if i in text2: + break + else: + print("\n[+] Son Isogramas\n") + break + else: + print("\n[!] Hubo algun error\n") + + +get_text(text1, text2) From e97440af6efbeff87925b4976c6892572c35cd9a Mon Sep 17 00:00:00 2001 From: zakkdrte Date: Thu, 19 Sep 2024 14:50:55 -0600 Subject: [PATCH 418/539] #04 - Python --- Roadmap/04 - CADENAS DE CARACTERES/python/ZAKKDRTE.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Roadmap/04 - CADENAS DE CARACTERES/python/ZAKKDRTE.py b/Roadmap/04 - CADENAS DE CARACTERES/python/ZAKKDRTE.py index 1bc7e97bad..497a45fa08 100644 --- a/Roadmap/04 - CADENAS DE CARACTERES/python/ZAKKDRTE.py +++ b/Roadmap/04 - CADENAS DE CARACTERES/python/ZAKKDRTE.py @@ -142,3 +142,4 @@ def get_text(text1, text2) -> str: get_text(text1, text2) + From 0cd911798d000874c2f5d135344baefecc1d5dbc Mon Sep 17 00:00:00 2001 From: maxiRica Date: Thu, 19 Sep 2024 20:57:25 +0000 Subject: [PATCH 419/539] =?UTF-8?q?#01=20-=20Python=20##=20Describe=20tus?= =?UTF-8?q?=20cambios=20***(Opcional)***=20*Sobre=20todo=20aconsejable=20s?= =?UTF-8?q?i=20la=20"Pull=20Request"=20se=20corresponde=20con=20una=20corr?= =?UTF-8?q?ecci=C3=B3n=20adicional=20y=20no=20con=20la=20presentaci=C3=B3n?= =?UTF-8?q?=20de=20un=20ejercicio.*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Comprobaciones Asegúrate de cumplir los siguientes puntos antes de realizar la "Pull Request": - [ ] El título de mi Pull Request sigue este formato: "#[número] - [lenguaje_utilizado]". *(Ej: #00 - Python")* - [ ] El nombre el fichero que se corresponde con el de mi usuario en GitHub más la extensión del lenguaje. *(Ej: mouredev.py)* - [ ] El fichero de corrección se encuentra dentro del directorio del ejercicio y en una carpeta con el nombre del lenguaje de programación utilizado en minúsculas. *(Ej: 00/python/mouredev.py)* - [ ] He revisado que el nombre del directorio del lenguaje no es conflictivo: - c#, no csharp - c++, no cplusplus - go, no golang - javascript, no js - [ ] Únicamente he incluido los ficheros de ejercicios. No se aceptarán Pull Requests que contengan archivos adicionales asociados a editores de código o semejantes. ## Información * Tienes toda la información sobre los retos semanales en [retosdeprogramacion.com/roadmap](https://retosdeprogramacion.com/roadmap). * Cada semana se realizará la corrección en directo y publicación de un nuevo reto en [twitch.tv/mouredev](https://twitch.tv/mouredev). * Recuerda que tienes un grupo de apoyo llamado "reto-semanal" en [Discord](https://discord.gg/mouredev). --- .../python/maxiRica.py | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/maxiRica.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/maxiRica.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/maxiRica.py new file mode 100644 index 0000000000..08ce992bbc --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/maxiRica.py @@ -0,0 +1,121 @@ +""" +Vamos a crear operadores aritméticos en python +""" + +suma=2+3 +resta=6-3 +division=10/2 +modulo=10%3 +div_entera=10//3 +exponencial=2**3 + + +print(suma) +print(resta) +print(division) +print(modulo) +print(div_entera) +print(exponencial) + +""" +operadores de asignación +""" +print(" ") +suma += 1 +print(f"le sumo 1 = {suma}") +resta -=1 +print(f"le resto 2 = {resta}") +division /= 2 +print(f"divido por 2 = {division}") +modulo %= 2 +print(f"divido por 2 y le asigno el resto = {modulo}") +div_entera //= 2 +print(f"realizo división entera por 2 y la asigno = {div_entera}") +exponencial **= 2 +print(f"realizo exponencial por 2 y la asigna = {exponencial}") + +""" +operadores de comparación +""" +print(" ") +igual = 1 == 2 +print(f"1 es igual a 2? Eso es {igual}") +desigual = 1!=2 +print("1 es desigual a 2? eso es {desigual}") +superior = 2>1 +print(f"2 es superior a 1? eso es {superior}") +inferior = 1<2 +print(f"1 es inferior a 2? eso es {inferior}") +sup_igual= 2 >= 3 +print(f"2 es superior o igual a 3? Eso es {sup_igual}") +inf_igual=2<3 +print(f"2 es inferior o igual a 3? Eso es {inf_igual}") + +""" +operadores lógicos que se usan habitualmente en las estructuras de control +""" +print(" ") +primero = True +segundo = True +if (primero and segundo): # operador AND. Se usa para concatenar dos valores iguales para operar + print("cierto") + +if (primero or segundo): + print("cierto también") # operador OR. Se usa para operar si uno u otro es cierto. + +contrario = False +if not contrario: + print("es cierto si es falsa la variable") # operador NOT. Se usa para generar el valor contrario de la variable booleana + +""" +Estructuras de control +if +elif +else +""" +print(" ") +control = True # usamos solo if +if (control): + print("control es cierto") + +print(" ") +control = False # usamos elif si la funcion if no concuerda su condición +if (control): + print("control es cierto") +elif control == False: + print("control es falso") + +print(" ") +control = False # usamos else cuando ni if ni elif actuan +a = 0 +if (control): + print("control es cierto") +elif control == False and a == 1: + print("control es falso") +else: + print("nada es correcto") + +""" +funciones de iteración +while +for +""" +print(" ") +while a<=5: # while realiza la iteración mientras se da la condición + print(f"bucle while {a}") + a+=1 + +print(" ") +for a in range(5): # for realiza una iteración que estableces en la función range() o en los valores de una tupla, lista, cadena + print(f"bucle for {a}") + +""" +EJERCICIO +""" +print(" ") +for i in range(10,56,2): + if (i==16) or i%3 == 0: + continue + + print(f"iteración {i} no es 16 ni múltiplo de 3") + From 2eafbb54d50c4c81b1c30c672286b9b634be467d Mon Sep 17 00:00:00 2001 From: mouredev Date: Fri, 20 Sep 2024 00:15:30 +0000 Subject: [PATCH 420/539] Update stats --- Roadmap/stats.json | 2136 ++++++++++++++++++++++---------------------- 1 file changed, 1083 insertions(+), 1053 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index c6c66301d8..78da978856 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,38 +1,38 @@ { "challenges_total": 39, "languages_total": 48, - "files_total": 7135, - "users_total": 1194, + "files_total": 7165, + "users_total": 1199, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1294 + "count": 1297 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 788 + "count": 789 }, { "order": 3, "name": "02 - FUNCIONES Y ALCANCE", - "count": 599 + "count": 601 }, { "order": 4, "name": "03 - ESTRUCTURAS DE DATOS", - "count": 409 + "count": 411 }, { "order": 5, "name": "04 - CADENAS DE CARACTERES", - "count": 340 + "count": 341 }, { "order": 6, "name": "06 - RECURSIVIDAD", - "count": 317 + "count": 321 }, { "order": 7, @@ -52,7 +52,7 @@ { "order": 10, "name": "09 - HERENCIA", - "count": 222 + "count": 223 }, { "order": 11, @@ -62,22 +62,22 @@ { "order": 12, "name": "11 - MANEJO DE FICHEROS", - "count": 157 + "count": 158 }, { "order": 13, "name": "14 - FECHAS", - "count": 132 + "count": 133 }, { "order": 14, "name": "13 - PRUEBAS UNITARIAS", - "count": 131 + "count": 132 }, { "order": 15, "name": "12 - JSON Y XML", - "count": 130 + "count": 131 }, { "order": 16, @@ -147,7 +147,7 @@ { "order": 29, "name": "28 - SOLID LSP", - "count": 57 + "count": 58 }, { "order": 30, @@ -192,80 +192,80 @@ { "order": 38, "name": "37 - OASIS VS LINKIN PARK", - "count": 27 + "count": 31 }, { "order": 39, "name": "38 - MOUREDEV PRO", - "count": 13 + "count": 20 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 3077, - "percentage": 43.13 + "count": 3084, + "percentage": 43.04 }, { "order": 2, "name": "javascript", - "count": 1402, - "percentage": 19.65 + "count": 1410, + "percentage": 19.68 }, { "order": 3, "name": "java", - "count": 656, - "percentage": 9.19 + "count": 663, + "percentage": 9.25 }, { "order": 4, "name": "typescript", - "count": 321, - "percentage": 4.5 + "count": 322, + "percentage": 4.49 }, { "order": 5, "name": "c#", - "count": 259, + "count": 260, "percentage": 3.63 }, { "order": 6, "name": "kotlin", - "count": 220, - "percentage": 3.08 + "count": 222, + "percentage": 3.1 }, { "order": 7, "name": "go", "count": 217, - "percentage": 3.04 + "percentage": 3.03 }, { "order": 8, "name": "swift", "count": 167, - "percentage": 2.34 + "percentage": 2.33 }, { "order": 9, "name": "php", - "count": 161, + "count": 162, "percentage": 2.26 }, { "order": 10, "name": "c++", "count": 117, - "percentage": 1.64 + "percentage": 1.63 }, { "order": 11, "name": "rust", - "count": 114, - "percentage": 1.6 + "count": 115, + "percentage": 1.61 }, { "order": 12, @@ -277,31 +277,31 @@ "order": 13, "name": "dart", "count": 49, - "percentage": 0.69 + "percentage": 0.68 }, { "order": 14, "name": "bash", "count": 44, - "percentage": 0.62 + "percentage": 0.61 }, { "order": 15, "name": "vb.net", - "count": 38, - "percentage": 0.53 + "count": 39, + "percentage": 0.54 }, { "order": 16, "name": "ocaml", "count": 34, - "percentage": 0.48 + "percentage": 0.47 }, { "order": 17, "name": "ruby", - "count": 33, - "percentage": 0.46 + "count": 34, + "percentage": 0.47 }, { "order": 18, @@ -500,7 +500,7 @@ { "order": 2, "name": "kenysdev", - "count": 154, + "count": 156, "languages": 4 }, { @@ -542,13 +542,13 @@ { "order": 9, "name": "blackriper", - "count": 68, + "count": 70, "languages": 2 }, { "order": 10, "name": "eulogioep", - "count": 63, + "count": 67, "languages": 6 }, { @@ -578,7 +578,7 @@ { "order": 15, "name": "jesusantonioeescamilla", - "count": 57, + "count": 58, "languages": 3 }, { @@ -607,21 +607,21 @@ }, { "order": 20, - "name": "amadorquispe", + "name": "ricjdev", "count": 49, "languages": 2 }, { "order": 21, - "name": "juanppdev", - "count": 48, - "languages": 3 + "name": "amadorquispe", + "count": 49, + "languages": 2 }, { "order": 22, - "name": "ricjdev", - "count": 47, - "languages": 2 + "name": "juanppdev", + "count": 48, + "languages": 3 }, { "order": 23, @@ -685,45 +685,45 @@ }, { "order": 33, - "name": "raynerpv2022", + "name": "qv1ko", "count": 37, - "languages": 2 + "languages": 4 }, { "order": 34, - "name": "luishendrix92", + "name": "raynerpv2022", "count": 37, "languages": 2 }, { "order": 35, - "name": "soohav", + "name": "luishendrix92", "count": 37, - "languages": 1 + "languages": 2 }, { "order": 36, - "name": "emmanuelmmontesinos", + "name": "soohav", "count": 37, "languages": 1 }, { "order": 37, - "name": "rauldoezon", + "name": "emmanuelmmontesinos", "count": 37, "languages": 1 }, { "order": 38, - "name": "asjordi", + "name": "rauldoezon", "count": 37, "languages": 1 }, { "order": 39, - "name": "qv1ko", - "count": 36, - "languages": 4 + "name": "asjordi", + "count": 37, + "languages": 1 }, { "order": 40, @@ -817,19 +817,19 @@ }, { "order": 55, - "name": "bernatcs", - "count": 28, - "languages": 2 + "name": "simonguzman", + "count": 29, + "languages": 1 }, { "order": 56, - "name": "parababire", + "name": "bernatcs", "count": 28, - "languages": 1 + "languages": 2 }, { "order": 57, - "name": "simonguzman", + "name": "parababire", "count": 28, "languages": 1 }, @@ -1099,237 +1099,237 @@ }, { "order": 102, + "name": "martinbohorquez", + "count": 16, + "languages": 2 + }, + { + "order": 103, "name": "oniricoh", "count": 16, "languages": 1 }, { - "order": 103, + "order": 104, "name": "danielhdzr", "count": 16, "languages": 1 }, { - "order": 104, + "order": 105, "name": "mvidalb", "count": 16, "languages": 1 }, { - "order": 105, + "order": 106, "name": "artickun", "count": 16, "languages": 1 }, { - "order": 106, + "order": 107, "name": "kontroldev", "count": 16, "languages": 1 }, { - "order": 107, + "order": 108, "name": "kuroz00", "count": 15, "languages": 3 }, { - "order": 108, + "order": 109, "name": "eugeniasoria", "count": 15, "languages": 2 }, { - "order": 109, + "order": 110, "name": "alvaro-neyra", "count": 15, "languages": 2 }, { - "order": 110, + "order": 111, "name": "juanchernandezdev", "count": 15, "languages": 1 }, { - "order": 111, + "order": 112, "name": "seandsun", "count": 15, "languages": 1 }, { - "order": 112, + "order": 113, "name": "jafeito", "count": 15, "languages": 1 }, { - "order": 113, + "order": 114, "name": "sniker1223", "count": 14, "languages": 4 }, { - "order": 114, + "order": 115, "name": "redom69", "count": 14, "languages": 4 }, { - "order": 115, + "order": 116, "name": "jesuses1312", "count": 14, "languages": 3 }, { - "order": 116, + "order": 117, "name": "gonzadev28", "count": 14, "languages": 2 }, { - "order": 117, + "order": 118, "name": "andresgcastillo", "count": 14, "languages": 2 }, { - "order": 118, + "order": 119, "name": "ygriegasb", "count": 14, "languages": 2 }, { - "order": 119, + "order": 120, "name": "deathwing696", "count": 14, "languages": 2 }, { - "order": 120, + "order": 121, "name": "mikelm2020", "count": 14, "languages": 1 }, { - "order": 121, + "order": 122, "name": "paula2409", "count": 14, "languages": 1 }, { - "order": 122, + "order": 123, "name": "vincentrodriguezr", "count": 14, "languages": 1 }, { - "order": 123, + "order": 124, "name": "elmer125", "count": 14, "languages": 1 }, { - "order": 124, + "order": 125, "name": "diegoibb", "count": 13, "languages": 3 }, { - "order": 125, + "order": 126, "name": "volumidev", "count": 13, "languages": 3 }, { - "order": 126, + "order": 127, "name": "manjaitan", "count": 13, "languages": 2 }, - { - "order": 127, - "name": "neosv", - "count": 13, - "languages": 1 - }, { "order": 128, - "name": "c-gabs", + "name": "javierfiestasbotella", "count": 13, "languages": 1 }, { "order": 129, - "name": "tomu98", + "name": "neosv", "count": 13, "languages": 1 }, { "order": 130, - "name": "7r0n1x", + "name": "c-gabs", "count": 13, "languages": 1 }, { "order": 131, - "name": "ocram1304", + "name": "tomu98", "count": 13, "languages": 1 }, { "order": 132, - "name": "dan-corbo", + "name": "7r0n1x", "count": 13, "languages": 1 }, { "order": 133, - "name": "julian98789", + "name": "ocram1304", "count": 13, "languages": 1 }, { "order": 134, - "name": "jav-mol", + "name": "dan-corbo", "count": 13, "languages": 1 }, { "order": 135, - "name": "andresmcardenas", - "count": 12, - "languages": 2 + "name": "julian98789", + "count": 13, + "languages": 1 }, { "order": 136, - "name": "juanrcoder", - "count": 12, - "languages": 2 + "name": "jav-mol", + "count": 13, + "languages": 1 }, { "order": 137, - "name": "a-mayans", + "name": "andresmcardenas", "count": 12, "languages": 2 }, { "order": 138, - "name": "martinbohorquez", + "name": "juanrcoder", "count": 12, "languages": 2 }, { "order": 139, - "name": "keltoi-dev", + "name": "a-mayans", "count": 12, "languages": 2 }, { "order": 140, - "name": "javierfiestasbotella", + "name": "keltoi-dev", "count": 12, - "languages": 1 + "languages": 2 }, { "order": 141, @@ -2155,5502 +2155,5532 @@ }, { "order": 278, - "name": "nomellamodante", + "name": "nicoheguaburu", "count": 5, "languages": 1 }, { "order": 279, - "name": "sarismejiasanchez", + "name": "nomellamodante", "count": 5, "languages": 1 }, { "order": 280, - "name": "franz-arzapalo", + "name": "sarismejiasanchez", "count": 5, "languages": 1 }, { "order": 281, - "name": "drvito1977", + "name": "franz-arzapalo", "count": 5, "languages": 1 }, { "order": 282, - "name": "joanfv-git", + "name": "drvito1977", "count": 5, "languages": 1 }, { "order": 283, - "name": "eloychavezdev", + "name": "joanfv-git", "count": 5, "languages": 1 }, { "order": 284, - "name": "n1sek", + "name": "eloychavezdev", "count": 5, "languages": 1 }, { "order": 285, - "name": "vixito", + "name": "n1sek", "count": 5, "languages": 1 }, { "order": 286, - "name": "d4-n1", + "name": "vixito", "count": 5, "languages": 1 }, { "order": 287, - "name": "lauracastrillonmp", + "name": "d4-n1", "count": 5, "languages": 1 }, { "order": 288, - "name": "danielbustos342", + "name": "lauracastrillonmp", "count": 5, "languages": 1 }, { "order": 289, - "name": "robmxz", + "name": "danielbustos342", "count": 5, "languages": 1 }, { "order": 290, - "name": "douglasdiazr", + "name": "robmxz", "count": 5, "languages": 1 }, { "order": 291, - "name": "vasilealexandru02", + "name": "douglasdiazr", "count": 5, "languages": 1 }, { "order": 292, - "name": "victormugo", + "name": "vasilealexandru02", "count": 5, "languages": 1 }, { "order": 293, - "name": "esaens12", + "name": "victormugo", "count": 5, "languages": 1 }, { "order": 294, - "name": "adridoce", + "name": "esaens12", "count": 5, "languages": 1 }, { "order": 295, - "name": "lucasag01", + "name": "adridoce", "count": 5, "languages": 1 }, { "order": 296, - "name": "karolle", + "name": "lucasag01", "count": 5, "languages": 1 }, { "order": 297, - "name": "jcrodmir", + "name": "karolle", "count": 5, "languages": 1 }, { "order": 298, - "name": "alvarofernandezavalos", + "name": "jcrodmir", "count": 5, "languages": 1 }, { "order": 299, - "name": "thaishdz", + "name": "alvarofernandezavalos", "count": 5, "languages": 1 }, { "order": 300, - "name": "boterop", + "name": "thaishdz", "count": 5, "languages": 1 }, { "order": 301, - "name": "bastianalq", + "name": "boterop", "count": 5, "languages": 1 }, { "order": 302, - "name": "rafacv23", + "name": "bastianalq", "count": 5, "languages": 1 }, { "order": 303, - "name": "mohamedelderkaoui", + "name": "rafacv23", "count": 5, "languages": 1 }, { "order": 304, - "name": "w00k", + "name": "mohamedelderkaoui", "count": 5, "languages": 1 }, { "order": 305, + "name": "w00k", + "count": 5, + "languages": 1 + }, + { + "order": 306, "name": "zarakilancelot", "count": 4, "languages": 3 }, { - "order": 306, + "order": 307, "name": "ruthmp", "count": 4, "languages": 2 }, { - "order": 307, + "order": 308, "name": "mendozalz", "count": 4, "languages": 2 }, { - "order": 308, + "order": 309, "name": "salkalero", "count": 4, "languages": 2 }, { - "order": 309, + "order": 310, "name": "willr30", "count": 4, "languages": 2 }, { - "order": 310, + "order": 311, "name": "eonozux", "count": 4, "languages": 2 }, { - "order": 311, + "order": 312, "name": "josefuentes-dev", "count": 4, "languages": 2 }, { - "order": 312, + "order": 313, "name": "k3nvd", "count": 4, "languages": 2 }, { - "order": 313, + "order": 314, "name": "daeduol", "count": 4, "languages": 2 }, { - "order": 314, + "order": 315, "name": "fullovellas", "count": 4, "languages": 2 }, { - "order": 315, + "order": 316, "name": "yablik", "count": 4, "languages": 2 }, { - "order": 316, + "order": 317, "name": "nox456", "count": 4, "languages": 1 }, { - "order": 317, + "order": 318, "name": "mplatab", "count": 4, "languages": 1 }, { - "order": 318, + "order": 319, "name": "davstudy", "count": 4, "languages": 1 }, { - "order": 319, + "order": 320, "name": "rodrigoghr", "count": 4, "languages": 1 }, { - "order": 320, + "order": 321, "name": "ramxv", "count": 4, "languages": 1 }, { - "order": 321, + "order": 322, "name": "inkhemi", "count": 4, "languages": 1 }, { - "order": 322, + "order": 323, "name": "tobibordino", "count": 4, "languages": 1 }, { - "order": 323, + "order": 324, "name": "mallcca", "count": 4, "languages": 1 }, { - "order": 324, + "order": 325, "name": "guillermo-k", "count": 4, "languages": 1 }, { - "order": 325, + "order": 326, "name": "angell4s", "count": 4, "languages": 1 }, { - "order": 326, + "order": 327, "name": "axelprz", "count": 4, "languages": 1 }, { - "order": 327, + "order": 328, "name": "luissssoto", "count": 4, "languages": 1 }, { - "order": 328, + "order": 329, "name": "zakkdrte", "count": 4, "languages": 1 }, { - "order": 329, + "order": 330, "name": "dlgai12", "count": 4, "languages": 1 }, { - "order": 330, + "order": 331, "name": "carrenoalexander", "count": 4, "languages": 1 }, { - "order": 331, + "order": 332, "name": "txuky", "count": 4, "languages": 1 }, { - "order": 332, + "order": 333, "name": "zerek247", "count": 4, "languages": 1 }, { - "order": 333, + "order": 334, "name": "buriticasara", "count": 4, "languages": 1 }, { - "order": 334, + "order": 335, "name": "jadraz", "count": 4, "languages": 1 }, { - "order": 335, + "order": 336, "name": "cdbiancotti", "count": 4, "languages": 1 }, { - "order": 336, + "order": 337, "name": "albertorevel", "count": 4, "languages": 1 }, { - "order": 337, + "order": 338, "name": "anvildestroyer", "count": 4, "languages": 1 }, { - "order": 338, + "order": 339, "name": "vicman-182", "count": 4, "languages": 1 }, { - "order": 339, + "order": 340, "name": "sunjamer", "count": 4, "languages": 1 }, { - "order": 340, + "order": 341, "name": "javirub", "count": 4, "languages": 1 }, { - "order": 341, + "order": 342, "name": "lrpeset", "count": 4, "languages": 1 }, { - "order": 342, + "order": 343, "name": "joshbaez", "count": 4, "languages": 1 }, { - "order": 343, + "order": 344, "name": "joaquinlopez14", "count": 4, "languages": 1 }, { - "order": 344, + "order": 345, "name": "juperdev", "count": 4, "languages": 1 }, { - "order": 345, + "order": 346, "name": "angelurrutdev", "count": 4, "languages": 1 }, { - "order": 346, + "order": 347, + "name": "duendeintemporal", + "count": 4, + "languages": 1 + }, + { + "order": 348, "name": "omegatroy", "count": 4, "languages": 1 }, { - "order": 347, + "order": 349, "name": "socramwd", "count": 4, "languages": 1 }, { - "order": 348, + "order": 350, "name": "mateo423", "count": 4, "languages": 1 }, { - "order": 349, + "order": 351, "name": "dieswae", "count": 4, "languages": 1 }, { - "order": 350, + "order": 352, "name": "elianisdev", "count": 4, "languages": 1 }, { - "order": 351, + "order": 353, "name": "marcoslombardo", "count": 4, "languages": 1 }, { - "order": 352, + "order": 354, "name": "andeveling", "count": 4, "languages": 1 }, { - "order": 353, + "order": 355, "name": "sbs24", "count": 4, "languages": 1 }, { - "order": 354, + "order": 356, "name": "carzep09", "count": 4, "languages": 1 }, { - "order": 355, + "order": 357, "name": "traver79", "count": 4, "languages": 1 }, { - "order": 356, + "order": 358, "name": "santiago-munoz-garcia", "count": 4, "languages": 1 }, { - "order": 357, + "order": 359, "name": "blasbarragan", "count": 4, "languages": 1 }, { - "order": 358, + "order": 360, "name": "jerrysantana", "count": 4, "languages": 1 }, { - "order": 359, + "order": 361, "name": "password1989", "count": 4, "languages": 1 }, { - "order": 360, + "order": 362, "name": "bladi23", "count": 4, "languages": 1 }, { - "order": 361, + "order": 363, "name": "juanca2805", "count": 4, "languages": 1 }, { - "order": 362, + "order": 364, "name": "elhacedordecosas", "count": 4, "languages": 1 }, { - "order": 363, + "order": 365, "name": "hugovrc", "count": 4, "languages": 1 }, { - "order": 364, + "order": 366, "name": "mayerga", "count": 4, "languages": 1 }, { - "order": 365, + "order": 367, "name": "deivitdev", "count": 4, "languages": 1 }, { - "order": 366, + "order": 368, "name": "jairo-alejandro", "count": 4, "languages": 1 }, { - "order": 367, + "order": 369, "name": "quejuan52", "count": 4, "languages": 1 }, { - "order": 368, + "order": 370, "name": "abel-ade", "count": 4, "languages": 1 }, { - "order": 369, + "order": 371, "name": "angelo-eyama", "count": 3, "languages": 3 }, { - "order": 370, + "order": 372, "name": "owen-ian", "count": 3, "languages": 3 }, { - "order": 371, + "order": 373, "name": "akaisombra", "count": 3, "languages": 3 }, { - "order": 372, + "order": 374, "name": "abelsrzz", "count": 3, "languages": 3 }, { - "order": 373, + "order": 375, "name": "jehiselruth", "count": 3, "languages": 3 }, { - "order": 374, + "order": 376, "name": "oskarcali", "count": 3, "languages": 3 }, { - "order": 375, + "order": 377, "name": "eloitr", "count": 3, "languages": 2 }, { - "order": 376, + "order": 378, "name": "diegopc-dev", "count": 3, "languages": 2 }, { - "order": 377, + "order": 379, "name": "dimasb69", "count": 3, "languages": 2 }, { - "order": 378, + "order": 380, "name": "seba9906", "count": 3, "languages": 2 }, { - "order": 379, + "order": 381, "name": "arliumdev", "count": 3, "languages": 2 }, { - "order": 380, + "order": 382, "name": "robindev1812", "count": 3, "languages": 2 }, { - "order": 381, + "order": 383, "name": "alfarog507", "count": 3, "languages": 2 }, { - "order": 382, + "order": 384, "name": "skala2301", "count": 3, "languages": 2 }, { - "order": 383, + "order": 385, "name": "augustosdev", "count": 3, "languages": 2 }, { - "order": 384, + "order": 386, "name": "clotrack", "count": 3, "languages": 2 }, { - "order": 385, + "order": 387, "name": "pablotaber", "count": 3, "languages": 2 }, { - "order": 386, + "order": 388, "name": "allanoscoding", "count": 3, "languages": 2 }, { - "order": 387, + "order": 389, "name": "n-skot", "count": 3, "languages": 2 }, - { - "order": 388, - "name": "bryanalzate007", - "count": 3, - "languages": 1 - }, - { - "order": 389, - "name": "tonywarcode", - "count": 3, - "languages": 1 - }, { "order": 390, - "name": "exanderguitar", + "name": "bryanalzate007", "count": 3, "languages": 1 }, { "order": 391, - "name": "elkin-dev", + "name": "tonywarcode", "count": 3, "languages": 1 }, { "order": 392, - "name": "carlosalberto05", + "name": "exanderguitar", "count": 3, "languages": 1 }, { "order": 393, - "name": "minn09", + "name": "elkin-dev", "count": 3, "languages": 1 }, { "order": 394, - "name": "jorgegarcia-dev", + "name": "carlosalberto05", "count": 3, "languages": 1 }, { "order": 395, - "name": "guillesese", + "name": "minn09", "count": 3, "languages": 1 }, { "order": 396, - "name": "tekatoki", + "name": "jorgegarcia-dev", "count": 3, "languages": 1 }, { "order": 397, - "name": "dandrusco", + "name": "guillesese", "count": 3, "languages": 1 }, { "order": 398, - "name": "estelacode", + "name": "tekatoki", "count": 3, "languages": 1 }, { "order": 399, - "name": "strooplab", + "name": "dandrusco", "count": 3, "languages": 1 }, { "order": 400, - "name": "monikgbar", + "name": "estelacode", "count": 3, "languages": 1 }, { "order": 401, - "name": "mstaz4", + "name": "strooplab", "count": 3, "languages": 1 }, { "order": 402, - "name": "ramon-almeida", + "name": "monikgbar", "count": 3, "languages": 1 }, { "order": 403, - "name": "oscarhub90", + "name": "mstaz4", "count": 3, "languages": 1 }, { "order": 404, - "name": "artdugarte", + "name": "ramon-almeida", "count": 3, "languages": 1 }, { "order": 405, - "name": "elder202", + "name": "oscarhub90", "count": 3, "languages": 1 }, { "order": 406, - "name": "bertolini-victor", + "name": "artdugarte", "count": 3, "languages": 1 }, { "order": 407, - "name": "oscargeovannyrincon", + "name": "elder202", "count": 3, "languages": 1 }, { "order": 408, - "name": "rgeditv1", + "name": "bertolini-victor", "count": 3, "languages": 1 }, { "order": 409, - "name": "frostbitepy", + "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { "order": 410, - "name": "antii16", + "name": "rgeditv1", "count": 3, "languages": 1 }, { "order": 411, - "name": "mmacalli", + "name": "frostbitepy", "count": 3, "languages": 1 }, { "order": 412, - "name": "eliskopun", + "name": "antii16", "count": 3, "languages": 1 }, { "order": 413, - "name": "jofedev", + "name": "mmacalli", "count": 3, "languages": 1 }, { "order": 414, - "name": "suescun845", + "name": "eliskopun", "count": 3, "languages": 1 }, { "order": 415, - "name": "yeam-10", + "name": "jofedev", "count": 3, "languages": 1 }, { "order": 416, - "name": "joandevpy", + "name": "suescun845", "count": 3, "languages": 1 }, { "order": 417, - "name": "macova96", + "name": "yeam-10", "count": 3, "languages": 1 }, { "order": 418, - "name": "beonzj", + "name": "joandevpy", "count": 3, "languages": 1 }, { "order": 419, - "name": "betzadev", + "name": "macova96", "count": 3, "languages": 1 }, { "order": 420, - "name": "nicoheguaburu", + "name": "beonzj", "count": 3, "languages": 1 }, { "order": 421, - "name": "mizadlogcia", + "name": "betzadev", "count": 3, "languages": 1 }, { "order": 422, - "name": "emilianohoyos", + "name": "javitron100", "count": 3, "languages": 1 }, { "order": 423, - "name": "camilo-zuluaga", + "name": "mizadlogcia", "count": 3, "languages": 1 }, { "order": 424, - "name": "zzepu", + "name": "emilianohoyos", "count": 3, "languages": 1 }, { "order": 425, - "name": "danielperezrubio", + "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { "order": 426, - "name": "marcoh2325", + "name": "zzepu", "count": 3, "languages": 1 }, { "order": 427, - "name": "nathaliamf", + "name": "danielperezrubio", "count": 3, "languages": 1 }, { "order": 428, - "name": "jacarrillob", + "name": "marcoh2325", "count": 3, "languages": 1 }, { "order": 429, - "name": "fdcorreadev", + "name": "nathaliamf", "count": 3, "languages": 1 }, { "order": 430, - "name": "matiascba27", + "name": "jacarrillob", "count": 3, "languages": 1 }, { "order": 431, - "name": "andresargote", + "name": "fdcorreadev", "count": 3, "languages": 1 }, { "order": 432, - "name": "victorsschz", + "name": "matiascba27", "count": 3, "languages": 1 }, { "order": 433, - "name": "faga01", + "name": "andresargote", "count": 3, "languages": 1 }, { "order": 434, - "name": "dariorfm", + "name": "victorsschz", "count": 3, "languages": 1 }, { "order": 435, - "name": "hectoriglesias", + "name": "faga01", "count": 3, "languages": 1 }, { "order": 436, - "name": "josueeeee", + "name": "dariorfm", "count": 3, "languages": 1 }, { "order": 437, - "name": "fernandog25", + "name": "hectoriglesias", "count": 3, "languages": 1 }, { "order": 438, - "name": "migueltfangche", + "name": "joapalobael", "count": 3, "languages": 1 }, { "order": 439, - "name": "emaenriquez", + "name": "josueeeee", "count": 3, "languages": 1 }, { "order": 440, - "name": "matrix-miguel", + "name": "fernandog25", "count": 3, "languages": 1 }, { "order": 441, - "name": "r4kso", + "name": "migueltfangche", "count": 3, "languages": 1 }, { "order": 442, - "name": "davidb313", + "name": "emaenriquez", "count": 3, "languages": 1 }, { "order": 443, - "name": "arbenisacosta", + "name": "matrix-miguel", "count": 3, "languages": 1 }, { "order": 444, - "name": "sebascmb", + "name": "r4kso", "count": 3, "languages": 1 }, { "order": 445, - "name": "jelozanov", + "name": "davidb313", "count": 3, "languages": 1 }, { "order": 446, - "name": "singularpigeon", + "name": "arbenisacosta", "count": 3, "languages": 1 }, { "order": 447, - "name": "duendeintemporal", + "name": "sebascmb", "count": 3, "languages": 1 }, { "order": 448, - "name": "asaelz", + "name": "jelozanov", "count": 3, "languages": 1 }, { "order": 449, - "name": "gpinedaoviedo", + "name": "singularpigeon", "count": 3, "languages": 1 }, { "order": 450, - "name": "orlas135", + "name": "asaelz", "count": 3, "languages": 1 }, { "order": 451, - "name": "zuluangel", + "name": "gpinedaoviedo", "count": 3, "languages": 1 }, { "order": 452, - "name": "uyarra73", + "name": "orlas135", "count": 3, "languages": 1 }, { "order": 453, - "name": "sandracalatayud", + "name": "zuluangel", "count": 3, "languages": 1 }, { "order": 454, - "name": "agusbelp", + "name": "uyarra73", "count": 3, "languages": 1 }, { "order": 455, - "name": "ahinar", + "name": "sandracalatayud", "count": 3, "languages": 1 }, { "order": 456, - "name": "magupe09", + "name": "agusbelp", "count": 3, "languages": 1 }, { "order": 457, - "name": "daniback95", + "name": "ahinar", "count": 3, "languages": 1 }, { "order": 458, - "name": "hatorob", + "name": "magupe09", "count": 3, "languages": 1 }, { "order": 459, - "name": "erysnell", + "name": "daniback95", "count": 3, "languages": 1 }, { "order": 460, - "name": "legs30011", + "name": "hatorob", "count": 3, "languages": 1 }, { "order": 461, - "name": "andyfg0289", + "name": "erysnell", "count": 3, "languages": 1 }, { "order": 462, - "name": "14davidnkt", + "name": "legs30011", "count": 3, "languages": 1 }, { "order": 463, - "name": "samuelarandia", + "name": "andyfg0289", "count": 3, "languages": 1 }, { "order": 464, - "name": "jaimerocel96", + "name": "14davidnkt", "count": 3, "languages": 1 }, { "order": 465, - "name": "gitperalta", + "name": "samuelarandia", "count": 3, "languages": 1 }, { "order": 466, - "name": "dannyvera1234", + "name": "jaimerocel96", "count": 3, "languages": 1 }, { "order": 467, - "name": "axelsparta", + "name": "gitperalta", "count": 3, "languages": 1 }, { "order": 468, - "name": "tebaah", + "name": "dannyvera1234", "count": 3, "languages": 1 }, { "order": 469, - "name": "matteozhao98", + "name": "axelsparta", "count": 3, "languages": 1 }, { "order": 470, - "name": "crisvigas", + "name": "tebaah", "count": 3, "languages": 1 }, { "order": 471, - "name": "tomytsa", + "name": "matteozhao98", "count": 3, "languages": 1 }, { "order": 472, - "name": "blfuentes", + "name": "crisvigas", "count": 3, "languages": 1 }, { "order": 473, - "name": "sebasgrdev", + "name": "tomytsa", "count": 3, "languages": 1 }, { "order": 474, - "name": "sitnestic", + "name": "blfuentes", "count": 3, "languages": 1 }, { "order": 475, - "name": "confley", + "name": "sebasgrdev", "count": 3, "languages": 1 }, { "order": 476, - "name": "francofmv", + "name": "sitnestic", "count": 3, "languages": 1 }, { "order": 477, - "name": "david-quinones", + "name": "confley", "count": 3, "languages": 1 }, { "order": 478, - "name": "marce1084", + "name": "francofmv", "count": 3, "languages": 1 }, { "order": 479, - "name": "freedainew", + "name": "david-quinones", "count": 3, "languages": 1 }, { "order": 480, - "name": "rubioj17", + "name": "marce1084", "count": 3, "languages": 1 }, { "order": 481, - "name": "kine-jdf", + "name": "freedainew", "count": 3, "languages": 1 }, { "order": 482, - "name": "kingsaul22", + "name": "rubioj17", "count": 3, "languages": 1 }, { "order": 483, - "name": "ainoaran", + "name": "kine-jdf", "count": 3, "languages": 1 }, { "order": 484, - "name": "fluna29", + "name": "kingsaul22", "count": 3, "languages": 1 }, { "order": 485, - "name": "xurxogz", + "name": "ainoaran", "count": 3, "languages": 1 }, { "order": 486, - "name": "davidsorroche", + "name": "fluna29", "count": 3, "languages": 1 }, { "order": 487, - "name": "natalinacn", + "name": "xurxogz", "count": 3, "languages": 1 }, { "order": 488, - "name": "yaretzyrb", + "name": "davidsorroche", "count": 3, "languages": 1 }, { "order": 489, - "name": "swifty0705", + "name": "natalinacn", "count": 3, "languages": 1 }, { "order": 490, - "name": "marianoemir", + "name": "yaretzyrb", "count": 3, "languages": 1 }, { "order": 491, - "name": "guido2288", + "name": "swifty0705", "count": 3, "languages": 1 }, { "order": 492, - "name": "githjuan", + "name": "marianoemir", "count": 3, "languages": 1 }, { "order": 493, - "name": "rocallejas", + "name": "guido2288", "count": 3, "languages": 1 }, { "order": 494, - "name": "jeyker-dev", + "name": "githjuan", "count": 3, "languages": 1 }, { "order": 495, - "name": "barbafebles", + "name": "rocallejas", "count": 3, "languages": 1 }, { "order": 496, - "name": "aggranadoss", + "name": "jeyker-dev", "count": 3, "languages": 1 }, { "order": 497, - "name": "heliercamejo", + "name": "barbafebles", "count": 3, "languages": 1 }, { "order": 498, - "name": "coshiloco", + "name": "aggranadoss", "count": 3, "languages": 1 }, { "order": 499, - "name": "atienzar", + "name": "heliercamejo", "count": 3, "languages": 1 }, { "order": 500, - "name": "javiearth", + "name": "coshiloco", "count": 3, "languages": 1 }, { "order": 501, - "name": "marlonleon2023", + "name": "atienzar", "count": 3, "languages": 1 }, { "order": 502, - "name": "vandresca", + "name": "javiearth", "count": 3, "languages": 1 }, { "order": 503, - "name": "ggtorca", + "name": "marlonleon2023", "count": 3, "languages": 1 }, { "order": 504, - "name": "ivanpelu7", + "name": "vandresca", "count": 3, "languages": 1 }, { "order": 505, - "name": "alejomazov", + "name": "ggtorca", "count": 3, "languages": 1 }, { "order": 506, - "name": "oscar503sv", + "name": "ivanpelu7", "count": 3, "languages": 1 }, { "order": 507, - "name": "dmauricio4", + "name": "alejomazov", "count": 3, "languages": 1 }, { "order": 508, - "name": "davidr1594", + "name": "oscar503sv", "count": 3, "languages": 1 }, { "order": 509, - "name": "mellamoomar", + "name": "dmauricio4", "count": 3, "languages": 1 }, { "order": 510, - "name": "ikeragi05", + "name": "davidr1594", "count": 3, "languages": 1 }, { "order": 511, - "name": "nikorasu-d", + "name": "mellamoomar", "count": 3, "languages": 1 }, { "order": 512, - "name": "johnalexguerrero", + "name": "ikeragi05", "count": 3, "languages": 1 }, { "order": 513, - "name": "mantaras96", + "name": "nikorasu-d", "count": 3, "languages": 1 }, { "order": 514, - "name": "davidvilem", + "name": "johnalexguerrero", "count": 3, "languages": 1 }, { "order": 515, - "name": "elbarbero", + "name": "mantaras96", "count": 3, "languages": 1 }, { "order": 516, - "name": "frangarmez21", + "name": "davidvilem", "count": 3, "languages": 1 }, { "order": 517, - "name": "dylanb55", + "name": "elbarbero", "count": 3, "languages": 1 }, { "order": 518, - "name": "juxxon23", + "name": "frangarmez21", "count": 3, "languages": 1 }, { "order": 519, - "name": "juan-wills", - "count": 2, - "languages": 2 + "name": "dylanb55", + "count": 3, + "languages": 1 }, { "order": 520, - "name": "lilberick", - "count": 2, - "languages": 2 + "name": "juxxon23", + "count": 3, + "languages": 1 }, { "order": 521, - "name": "tecfer", + "name": "juan-wills", "count": 2, "languages": 2 }, { "order": 522, - "name": "chuanmi", + "name": "lilberick", "count": 2, "languages": 2 }, { "order": 523, - "name": "carresoft", + "name": "tecfer", "count": 2, "languages": 2 }, { "order": 524, - "name": "raul-progr", + "name": "chuanmi", "count": 2, "languages": 2 }, { "order": 525, - "name": "felipedev303", + "name": "carresoft", "count": 2, "languages": 2 }, { "order": 526, - "name": "alejosor", + "name": "tizog", "count": 2, "languages": 2 }, { "order": 527, - "name": "lemito66", + "name": "raul-progr", "count": 2, "languages": 2 }, { "order": 528, - "name": "jmofuture", + "name": "felipedev303", "count": 2, "languages": 2 }, { "order": 529, - "name": "angel-alvarez-dev", + "name": "alejosor", "count": 2, "languages": 2 }, { "order": 530, - "name": "berentolkien", + "name": "lemito66", "count": 2, "languages": 2 }, { "order": 531, - "name": "camiloforero1997", + "name": "jmofuture", "count": 2, "languages": 2 }, { "order": 532, - "name": "jorgesilencio", + "name": "angel-alvarez-dev", "count": 2, "languages": 2 }, { "order": 533, - "name": "enrgarvic", + "name": "berentolkien", "count": 2, "languages": 2 }, { "order": 534, - "name": "jurgen-alfaro", + "name": "camiloforero1997", "count": 2, "languages": 2 }, { "order": 535, - "name": "alexsamboy", + "name": "jorgesilencio", "count": 2, "languages": 2 }, { "order": 536, - "name": "jovany-java", + "name": "enrgarvic", "count": 2, "languages": 2 }, { "order": 537, - "name": "jlcareglio", + "name": "jurgen-alfaro", "count": 2, "languages": 2 }, { "order": 538, - "name": "elsanty08", + "name": "alexsamboy", "count": 2, "languages": 2 }, { "order": 539, - "name": "lydaf", + "name": "jovany-java", "count": 2, "languages": 2 }, { "order": 540, - "name": "ismaelmatiz", + "name": "jlcareglio", "count": 2, "languages": 2 }, { "order": 541, - "name": "sgb004", + "name": "elsanty08", "count": 2, "languages": 2 }, { "order": 542, - "name": "devvdroid01", + "name": "lydaf", "count": 2, "languages": 2 }, { "order": 543, - "name": "jhonatanmustiolacas", + "name": "ismaelmatiz", "count": 2, "languages": 2 }, { "order": 544, - "name": "lurtur", + "name": "sgb004", "count": 2, "languages": 2 }, { "order": 545, - "name": "juanseevn", + "name": "devvdroid01", "count": 2, - "languages": 1 + "languages": 2 }, { "order": 546, - "name": "miguelberrio0810", + "name": "jhonatanmustiolacas", "count": 2, - "languages": 1 + "languages": 2 }, { "order": 547, - "name": "victore16", + "name": "lurtur", "count": 2, - "languages": 1 + "languages": 2 }, { "order": 548, - "name": "zalazarmartin", + "name": "juanseevn", "count": 2, "languages": 1 }, { "order": 549, - "name": "alejandrovelasquezr", + "name": "miguelberrio0810", "count": 2, "languages": 1 }, { "order": 550, - "name": "dokeys28", + "name": "victore16", "count": 2, "languages": 1 }, { "order": 551, - "name": "noaregui", + "name": "zalazarmartin", "count": 2, "languages": 1 }, { "order": 552, - "name": "sofia-d-p", + "name": "alejandrovelasquezr", "count": 2, "languages": 1 }, { "order": 553, - "name": "freyfonseca", + "name": "dokeys28", "count": 2, "languages": 1 }, { "order": 554, - "name": "anblackter", + "name": "noaregui", "count": 2, "languages": 1 }, { "order": 555, - "name": "fjsubero", + "name": "sofia-d-p", "count": 2, "languages": 1 }, { "order": 556, - "name": "gregfc95", + "name": "freyfonseca", "count": 2, "languages": 1 }, { "order": 557, - "name": "nach012", + "name": "anblackter", "count": 2, "languages": 1 }, { "order": 558, - "name": "pablosalme", + "name": "fjsubero", "count": 2, "languages": 1 }, { "order": 559, - "name": "kcx46", + "name": "gregfc95", "count": 2, "languages": 1 }, { "order": 560, - "name": "aboredllama", + "name": "nach012", "count": 2, "languages": 1 }, { "order": 561, - "name": "jmontoyac", + "name": "pablosalme", "count": 2, "languages": 1 }, { "order": 562, - "name": "josue-py", + "name": "kcx46", "count": 2, "languages": 1 }, { "order": 563, - "name": "dariangl", + "name": "aboredllama", "count": 2, "languages": 1 }, { "order": 564, - "name": "alejandro-mantilla", + "name": "jmontoyac", "count": 2, "languages": 1 }, { "order": 565, - "name": "inf015", + "name": "josue-py", "count": 2, "languages": 1 }, { "order": 566, - "name": "dota43ver", + "name": "dariangl", "count": 2, "languages": 1 }, { "order": 567, - "name": "culebropalido", + "name": "alejandro-mantilla", "count": 2, "languages": 1 }, { "order": 568, - "name": "rojasricoo", + "name": "inf015", "count": 2, "languages": 1 }, { "order": 569, - "name": "csaraugusto2", + "name": "dota43ver", "count": 2, "languages": 1 }, { "order": 570, - "name": "lauradiazm29", + "name": "culebropalido", "count": 2, "languages": 1 }, { "order": 571, - "name": "fernandoatello", + "name": "rojasricoo", "count": 2, "languages": 1 }, { "order": 572, - "name": "vesubius", + "name": "csaraugusto2", "count": 2, "languages": 1 }, { "order": 573, - "name": "s384", + "name": "lauradiazm29", "count": 2, "languages": 1 }, { "order": 574, - "name": "aegpgrafologo", + "name": "fernandoatello", "count": 2, "languages": 1 }, { "order": 575, - "name": "e-techgod", + "name": "vesubius", "count": 2, "languages": 1 }, { "order": 576, - "name": "baauus", + "name": "s384", "count": 2, "languages": 1 }, { "order": 577, - "name": "ziellucio01", + "name": "aegpgrafologo", "count": 2, "languages": 1 }, { "order": 578, - "name": "santiagodc8", + "name": "e-techgod", "count": 2, "languages": 1 }, { "order": 579, - "name": "eriickm", + "name": "baauus", "count": 2, "languages": 1 }, { "order": 580, - "name": "pakomor", + "name": "ziellucio01", "count": 2, "languages": 1 }, { "order": 581, - "name": "dkp-dev", + "name": "santiagodc8", "count": 2, "languages": 1 }, { "order": 582, - "name": "adogdev", + "name": "haroldalb", "count": 2, "languages": 1 }, { "order": 583, - "name": "ignaciogm1973", + "name": "eriickm", "count": 2, "languages": 1 }, { "order": 584, - "name": "josephfaster", + "name": "pakomor", "count": 2, "languages": 1 }, { "order": 585, - "name": "pedrojog", + "name": "dkp-dev", "count": 2, "languages": 1 }, { "order": 586, - "name": "carlosmarte23", + "name": "adogdev", "count": 2, "languages": 1 }, { "order": 587, - "name": "tic4", + "name": "ignaciogm1973", "count": 2, "languages": 1 }, { "order": 588, - "name": "julind0", + "name": "josephfaster", "count": 2, "languages": 1 }, { "order": 589, - "name": "christiancoc", + "name": "pedrojog", "count": 2, "languages": 1 }, { "order": 590, - "name": "javitron100", + "name": "carlosmarte23", "count": 2, "languages": 1 }, { "order": 591, - "name": "steven9708m", + "name": "tic4", "count": 2, "languages": 1 }, { "order": 592, - "name": "soydaviddev", + "name": "julind0", "count": 2, "languages": 1 }, { "order": 593, - "name": "nevaito", + "name": "christiancoc", "count": 2, "languages": 1 }, { "order": 594, - "name": "fabianpa505", + "name": "steven9708m", "count": 2, "languages": 1 }, { "order": 595, - "name": "nachodev7", + "name": "soydaviddev", "count": 2, "languages": 1 }, { "order": 596, - "name": "jsacristanbeltri", + "name": "nevaito", "count": 2, "languages": 1 }, { "order": 597, - "name": "cipollalucas", + "name": "fabianpa505", "count": 2, "languages": 1 }, { "order": 598, - "name": "devcherry1", + "name": "nachodev7", "count": 2, "languages": 1 }, { "order": 599, - "name": "zeti1231", + "name": "jsacristanbeltri", "count": 2, "languages": 1 }, { "order": 600, - "name": "josegago27", + "name": "cipollalucas", "count": 2, "languages": 1 }, { "order": 601, - "name": "gmigues", + "name": "devcherry1", "count": 2, "languages": 1 }, { "order": 602, - "name": "dans182", + "name": "zeti1231", "count": 2, "languages": 1 }, { "order": 603, - "name": "jheisonquiroga", + "name": "josegago27", "count": 2, "languages": 1 }, { "order": 604, - "name": "misterdan100", + "name": "gmigues", "count": 2, "languages": 1 }, { "order": 605, - "name": "mickel-arroz", + "name": "dans182", "count": 2, "languages": 1 }, { "order": 606, - "name": "jhonf1992", + "name": "jheisonquiroga", "count": 2, "languages": 1 }, { "order": 607, - "name": "farthaz", + "name": "misterdan100", "count": 2, "languages": 1 }, { "order": 608, - "name": "murquisdev", + "name": "mickel-arroz", "count": 2, "languages": 1 }, { "order": 609, - "name": "cpcarlosprieto", + "name": "jhonf1992", "count": 2, "languages": 1 }, { "order": 610, - "name": "valeriatorrealba", + "name": "farthaz", "count": 2, "languages": 1 }, { "order": 611, - "name": "jorge186414", + "name": "murquisdev", "count": 2, "languages": 1 }, { "order": 612, - "name": "davhage", + "name": "cpcarlosprieto", "count": 2, "languages": 1 }, { "order": 613, - "name": "lmedina96", + "name": "valeriatorrealba", "count": 2, "languages": 1 }, { "order": 614, - "name": "matiasfarfan89", + "name": "jorge186414", "count": 2, "languages": 1 }, { "order": 615, - "name": "joapalobael", + "name": "davhage", "count": 2, "languages": 1 }, { "order": 616, - "name": "alanox1", + "name": "lmedina96", "count": 2, "languages": 1 }, { "order": 617, - "name": "santiagocuevas2003", + "name": "matiasfarfan89", "count": 2, "languages": 1 }, { "order": 618, - "name": "franciscocuminilondero", + "name": "alanox1", "count": 2, "languages": 1 }, { "order": 619, - "name": "gianbordon", + "name": "santiagocuevas2003", "count": 2, "languages": 1 }, { "order": 620, - "name": "christianhernandezb", + "name": "franciscocuminilondero", "count": 2, "languages": 1 }, { "order": 621, - "name": "leonardo291024", + "name": "gianbordon", "count": 2, "languages": 1 }, { "order": 622, - "name": "haryblanco20", + "name": "christianhernandezb", "count": 2, "languages": 1 }, { "order": 623, - "name": "cesarocbu", + "name": "leonardo291024", "count": 2, "languages": 1 }, { "order": 624, - "name": "christianumb", + "name": "haryblanco20", "count": 2, "languages": 1 }, { "order": 625, - "name": "aleoe01", + "name": "cesarocbu", "count": 2, "languages": 1 }, { "order": 626, - "name": "andnikdev", + "name": "christianumb", "count": 2, "languages": 1 }, { "order": 627, - "name": "angelvelasco1", + "name": "aleoe01", "count": 2, "languages": 1 }, { "order": 628, - "name": "glaboryp", + "name": "andnikdev", "count": 2, "languages": 1 }, { "order": 629, - "name": "nxl22", + "name": "angelvelasco1", "count": 2, "languages": 1 }, { "order": 630, - "name": "erikayeah", + "name": "glaboryp", "count": 2, "languages": 1 }, { "order": 631, - "name": "jeisonredondo", + "name": "nxl22", "count": 2, "languages": 1 }, { "order": 632, - "name": "rikar2o", + "name": "erikayeah", "count": 2, "languages": 1 }, { "order": 633, - "name": "rolo27s", + "name": "jeisonredondo", "count": 2, "languages": 1 }, { "order": 634, - "name": "miguelrejon96", + "name": "rikar2o", "count": 2, "languages": 1 }, { "order": 635, - "name": "doblea74", + "name": "rolo27s", "count": 2, "languages": 1 }, { "order": 636, - "name": "jaimemunozdev", + "name": "miguelrejon96", "count": 2, "languages": 1 }, { "order": 637, - "name": "tomasmarquez81", + "name": "doblea74", "count": 2, "languages": 1 }, { "order": 638, - "name": "akzorla", + "name": "jaimemunozdev", "count": 2, "languages": 1 }, { "order": 639, - "name": "juangomezn", + "name": "tomasmarquez81", "count": 2, "languages": 1 }, { "order": 640, - "name": "soldochris", + "name": "akzorla", "count": 2, "languages": 1 }, { "order": 641, - "name": "k4rv3r", + "name": "juangomezn", "count": 2, "languages": 1 }, { "order": 642, - "name": "wesborland-github", + "name": "soldochris", "count": 2, "languages": 1 }, { "order": 643, - "name": "ovjohn", + "name": "k4rv3r", "count": 2, "languages": 1 }, { "order": 644, - "name": "memogv", + "name": "wesborland-github", "count": 2, "languages": 1 }, { "order": 645, - "name": "navarroemiliano", + "name": "ovjohn", "count": 2, "languages": 1 }, { "order": 646, - "name": "waldid32", + "name": "memogv", "count": 2, "languages": 1 }, { "order": 647, - "name": "mikelroset", + "name": "navarroemiliano", "count": 2, "languages": 1 }, { "order": 648, - "name": "dararod", + "name": "waldid32", "count": 2, "languages": 1 }, { "order": 649, - "name": "freddyasierraj", + "name": "mikelroset", "count": 2, "languages": 1 }, { "order": 650, - "name": "gomezcamilo9701", + "name": "dararod", "count": 2, "languages": 1 }, { "order": 651, - "name": "nicolastapiasanz", + "name": "freddyasierraj", "count": 2, "languages": 1 }, { "order": 652, - "name": "vicgallego", + "name": "gomezcamilo9701", "count": 2, "languages": 1 }, { "order": 653, - "name": "porto1090", + "name": "nicolastapiasanz", "count": 2, "languages": 1 }, { "order": 654, - "name": "0pio", + "name": "vicgallego", "count": 2, "languages": 1 }, { "order": 655, - "name": "whiterunjarl", + "name": "porto1090", "count": 2, "languages": 1 }, { "order": 656, - "name": "crisdev3", + "name": "0pio", "count": 2, "languages": 1 }, { "order": 657, - "name": "gamitocu", + "name": "whiterunjarl", "count": 2, "languages": 1 }, { "order": 658, - "name": "luis-vb", + "name": "crisdev3", "count": 2, "languages": 1 }, { "order": 659, - "name": "saracorraless", + "name": "gamitocu", "count": 2, "languages": 1 }, { "order": 660, - "name": "vikkanh", + "name": "luis-vb", "count": 2, "languages": 1 }, { "order": 661, - "name": "juaruibr", + "name": "saracorraless", "count": 2, "languages": 1 }, { "order": 662, - "name": "frealexandro", + "name": "vikkanh", "count": 2, "languages": 1 }, { "order": 663, - "name": "roilhi", + "name": "juaruibr", "count": 2, "languages": 1 }, { "order": 664, - "name": "evelynnobile", + "name": "frealexandro", "count": 2, "languages": 1 }, { "order": 665, - "name": "cristiansystem", + "name": "roilhi", "count": 2, "languages": 1 }, { "order": 666, - "name": "peibolstrike", + "name": "evelynnobile", "count": 2, "languages": 1 }, { "order": 667, - "name": "nahuelborromeo", + "name": "cristiansystem", "count": 2, "languages": 1 }, { "order": 668, - "name": "arhl2023", + "name": "peibolstrike", "count": 2, "languages": 1 }, { "order": 669, - "name": "yowcloud", + "name": "nahuelborromeo", "count": 2, "languages": 1 }, { "order": 670, - "name": "jcknot", + "name": "arhl2023", "count": 2, "languages": 1 }, { "order": 671, - "name": "coronelsam", + "name": "yowcloud", "count": 2, "languages": 1 }, { "order": 672, - "name": "peeanoot", + "name": "jcknot", "count": 2, "languages": 1 }, { "order": 673, - "name": "anaroncero", + "name": "coronelsam", "count": 2, "languages": 1 }, { "order": 674, - "name": "marioyellowy", + "name": "peeanoot", "count": 2, "languages": 1 }, { "order": 675, - "name": "hersac", + "name": "anaroncero", "count": 2, "languages": 1 }, { "order": 676, - "name": "isidrojng", + "name": "marioyellowy", "count": 2, "languages": 1 }, { "order": 677, - "name": "lorenamesa", + "name": "hersac", "count": 2, "languages": 1 }, { "order": 678, - "name": "jago86", + "name": "isidrojng", "count": 2, "languages": 1 }, { "order": 679, - "name": "johannhsdev", + "name": "lorenamesa", "count": 2, "languages": 1 }, { "order": 680, - "name": "diegokarabin", + "name": "jago86", "count": 2, "languages": 1 }, { "order": 681, - "name": "gugliio", + "name": "johannhsdev", "count": 2, "languages": 1 }, { "order": 682, - "name": "fefestuve", + "name": "diegokarabin", "count": 2, "languages": 1 }, { "order": 683, - "name": "fsfigueroa77", + "name": "gugliio", "count": 2, "languages": 1 }, { "order": 684, - "name": "reanthonyh", + "name": "fefestuve", "count": 2, "languages": 1 }, { "order": 685, - "name": "nandaalf", + "name": "fsfigueroa77", "count": 2, "languages": 1 }, { "order": 686, - "name": "vdroiid", + "name": "reanthonyh", "count": 2, "languages": 1 }, { "order": 687, - "name": "aserranot", + "name": "nandaalf", "count": 2, "languages": 1 }, { "order": 688, - "name": "raulallue", + "name": "vdroiid", "count": 2, "languages": 1 }, { "order": 689, - "name": "luciarf", + "name": "aserranot", "count": 2, "languages": 1 }, { "order": 690, - "name": "poetry0354", + "name": "raulallue", "count": 2, "languages": 1 }, { "order": 691, - "name": "rikar20", + "name": "luciarf", "count": 2, "languages": 1 }, { "order": 692, + "name": "poetry0354", + "count": 2, + "languages": 1 + }, + { + "order": 693, + "name": "rikar20", + "count": 2, + "languages": 1 + }, + { + "order": 694, "name": "reaien", "count": 2, "languages": 1 }, { - "order": 693, + "order": 695, "name": "elmarqueli", "count": 2, "languages": 1 }, { - "order": 694, + "order": 696, "name": "hawkbott", "count": 2, "languages": 1 }, { - "order": 695, + "order": 697, "name": "tiaguiito3", "count": 2, "languages": 1 }, { - "order": 696, + "order": 698, "name": "bereverte", "count": 2, "languages": 1 }, { - "order": 697, + "order": 699, "name": "sdm29gh", "count": 2, "languages": 1 }, { - "order": 698, + "order": 700, "name": "frannmv", "count": 2, "languages": 1 }, { - "order": 699, + "order": 701, "name": "diegosilval", "count": 2, "languages": 1 }, { - "order": 700, + "order": 702, "name": "ssanjua", "count": 2, "languages": 1 }, { - "order": 701, + "order": 703, "name": "zonnen69", "count": 2, "languages": 1 }, { - "order": 702, + "order": 704, "name": "angelargumedo", "count": 2, "languages": 1 }, { - "order": 703, + "order": 705, "name": "lordzzz777", "count": 2, "languages": 1 }, { - "order": 704, + "order": 706, "name": "rrcoder", "count": 2, "languages": 1 }, { - "order": 705, + "order": 707, "name": "jmichael39", "count": 2, "languages": 1 }, { - "order": 706, + "order": 708, "name": "juanmjimenezs", "count": 2, "languages": 1 }, { - "order": 707, + "order": 709, "name": "armentaangel", "count": 2, "languages": 1 }, { - "order": 708, + "order": 710, "name": "vecinacoo", "count": 2, "languages": 1 }, { - "order": 709, + "order": 711, "name": "wijimenezz", "count": 1, "languages": 1 }, { - "order": 710, + "order": 712, "name": "rafapg93", "count": 1, "languages": 1 }, { - "order": 711, + "order": 713, "name": "vickalc", "count": 1, "languages": 1 }, { - "order": 712, + "order": 714, "name": "riukac", "count": 1, "languages": 1 }, { - "order": 713, + "order": 715, "name": "rusian69", "count": 1, "languages": 1 }, { - "order": 714, + "order": 716, "name": "edgarmedranoa", "count": 1, "languages": 1 }, { - "order": 715, + "order": 717, "name": "sve-nnn", "count": 1, "languages": 1 }, { - "order": 716, + "order": 718, "name": "emiliordev", "count": 1, "languages": 1 }, { - "order": 717, + "order": 719, "name": "acirdeveloper", "count": 1, "languages": 1 }, { - "order": 718, + "order": 720, "name": "orzefox", "count": 1, "languages": 1 }, { - "order": 719, + "order": 721, "name": "nicoloboo02", "count": 1, "languages": 1 }, { - "order": 720, + "order": 722, "name": "jony-english22", "count": 1, "languages": 1 }, { - "order": 721, + "order": 723, "name": "deathbat00", "count": 1, "languages": 1 }, { - "order": 722, + "order": 724, "name": "rocha30", "count": 1, "languages": 1 }, { - "order": 723, + "order": 725, "name": "markayala13", "count": 1, "languages": 1 }, { - "order": 724, + "order": 726, "name": "angeloro", "count": 1, "languages": 1 }, { - "order": 725, + "order": 727, "name": "righelch", "count": 1, "languages": 1 }, { - "order": 726, + "order": 728, "name": "albertovf", "count": 1, "languages": 1 }, { - "order": 727, + "order": 729, "name": "sergiopq", "count": 1, "languages": 1 }, { - "order": 728, + "order": 730, "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { - "order": 729, + "order": 731, "name": "ouendinga", "count": 1, "languages": 1 }, { - "order": 730, + "order": 732, "name": "evilpodato04", "count": 1, "languages": 1 }, { - "order": 731, + "order": 733, "name": "agustinfccll", "count": 1, "languages": 1 }, { - "order": 732, + "order": 734, "name": "miguel2rar", "count": 1, "languages": 1 }, { - "order": 733, + "order": 735, "name": "anitandil", "count": 1, "languages": 1 }, { - "order": 734, + "order": 736, "name": "neicervb", "count": 1, "languages": 1 }, { - "order": 735, + "order": 737, "name": "eamartin", "count": 1, "languages": 1 }, { - "order": 736, + "order": 738, "name": "miquelrr", "count": 1, "languages": 1 }, { - "order": 737, + "order": 739, "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { - "order": 738, + "order": 740, "name": "francomyburg", "count": 1, "languages": 1 }, { - "order": 739, + "order": 741, "name": "josephinoo", "count": 1, "languages": 1 }, { - "order": 740, + "order": 742, + "name": "mmariob", + "count": 1, + "languages": 1 + }, + { + "order": 743, "name": "daichiko", "count": 1, "languages": 1 }, { - "order": 741, + "order": 744, + "name": "emanuelgauler", + "count": 1, + "languages": 1 + }, + { + "order": 745, "name": "willypaz243", "count": 1, "languages": 1 }, { - "order": 742, + "order": 746, "name": "rawc1nnamon", "count": 1, "languages": 1 }, { - "order": 743, + "order": 747, "name": "girngoma", "count": 1, "languages": 1 }, { - "order": 744, + "order": 748, "name": "juampaweb", "count": 1, "languages": 1 }, { - "order": 745, + "order": 749, "name": "marcos0803", "count": 1, "languages": 1 }, { - "order": 746, + "order": 750, "name": "anexo01", "count": 1, "languages": 1 }, { - "order": 747, + "order": 751, "name": "juli-m4", "count": 1, "languages": 1 }, { - "order": 748, + "order": 752, "name": "jchernandez87", "count": 1, "languages": 1 }, { - "order": 749, + "order": 753, "name": "juan-cruz01", "count": 1, "languages": 1 }, { - "order": 750, + "order": 754, "name": "kronoscba", "count": 1, "languages": 1 }, { - "order": 751, + "order": 755, "name": "claudios1980", "count": 1, "languages": 1 }, { - "order": 752, + "order": 756, "name": "natanaelzubiri", "count": 1, "languages": 1 }, { - "order": 753, + "order": 757, "name": "lizzymaken", "count": 1, "languages": 1 }, { - "order": 754, + "order": 758, "name": "jereaguilar", "count": 1, "languages": 1 }, { - "order": 755, + "order": 759, "name": "neshurtado", "count": 1, "languages": 1 }, { - "order": 756, + "order": 760, "name": "masenace", "count": 1, "languages": 1 }, { - "order": 757, + "order": 761, "name": "idiegorojas", "count": 1, "languages": 1 }, { - "order": 758, + "order": 762, "name": "chema-dw", "count": 1, "languages": 1 }, { - "order": 759, + "order": 763, "name": "latorredev", "count": 1, "languages": 1 }, { - "order": 760, + "order": 764, "name": "jandortiz", "count": 1, "languages": 1 }, { - "order": 761, + "order": 765, "name": "demegorash", "count": 1, "languages": 1 }, { - "order": 762, + "order": 766, "name": "deivimiller", "count": 1, "languages": 1 }, { - "order": 763, + "order": 767, "name": "snowcardenas", "count": 1, "languages": 1 }, { - "order": 764, + "order": 768, "name": "xalejandrow", "count": 1, "languages": 1 }, { - "order": 765, + "order": 769, "name": "wallsified", "count": 1, "languages": 1 }, { - "order": 766, + "order": 770, "name": "sherkla12e", "count": 1, "languages": 1 }, { - "order": 767, + "order": 771, "name": "turudev1979", "count": 1, "languages": 1 }, { - "order": 768, + "order": 772, "name": "miguelmancebo", "count": 1, "languages": 1 }, { - "order": 769, + "order": 773, "name": "alejandro000", "count": 1, "languages": 1 }, { - "order": 770, + "order": 774, "name": "miguelangel861", "count": 1, "languages": 1 }, { - "order": 771, + "order": 775, "name": "obed-tc", "count": 1, "languages": 1 }, { - "order": 772, + "order": 776, "name": "krisipo", "count": 1, "languages": 1 }, { - "order": 773, + "order": 777, "name": "davidgramiro", "count": 1, "languages": 1 }, { - "order": 774, + "order": 778, "name": "luceldasilva", "count": 1, "languages": 1 }, { - "order": 775, + "order": 779, "name": "m4xxdev", "count": 1, "languages": 1 }, { - "order": 776, + "order": 780, "name": "jrgranadosb", "count": 1, "languages": 1 }, { - "order": 777, + "order": 781, "name": "90dread", "count": 1, "languages": 1 }, { - "order": 778, + "order": 782, "name": "dimanu-py", "count": 1, "languages": 1 }, { - "order": 779, + "order": 783, "name": "marcelinoarias369", "count": 1, "languages": 1 }, { - "order": 780, + "order": 784, "name": "gmedinat911", "count": 1, "languages": 1 }, { - "order": 781, + "order": 785, "name": "alejarandro", "count": 1, "languages": 1 }, { - "order": 782, + "order": 786, "name": "e-xtian", "count": 1, "languages": 1 }, { - "order": 783, + "order": 787, "name": "tashidian", "count": 1, "languages": 1 }, { - "order": 784, + "order": 788, "name": "eljavi0", "count": 1, "languages": 1 }, { - "order": 785, + "order": 789, "name": "xtinarita", "count": 1, "languages": 1 }, { - "order": 786, + "order": 790, "name": "pr1de-23", "count": 1, "languages": 1 }, { - "order": 787, + "order": 791, "name": "diegogomezcor4", "count": 1, "languages": 1 }, { - "order": 788, + "order": 792, "name": "v0l0v", "count": 1, "languages": 1 }, { - "order": 789, + "order": 793, "name": "carlostoledoe", "count": 1, "languages": 1 }, { - "order": 790, + "order": 794, "name": "pablom-2015", "count": 1, "languages": 1 }, { - "order": 791, + "order": 795, "name": "jafuma0320", "count": 1, "languages": 1 }, { - "order": 792, + "order": 796, "name": "yamiyugi25", "count": 1, "languages": 1 }, { - "order": 793, + "order": 797, "name": "bassalex27", "count": 1, "languages": 1 }, { - "order": 794, + "order": 798, "name": "devkenn", "count": 1, "languages": 1 }, { - "order": 795, + "order": 799, "name": "vmarialuzm", "count": 1, "languages": 1 }, { - "order": 796, + "order": 800, "name": "francgci", "count": 1, "languages": 1 }, { - "order": 797, + "order": 801, "name": "yetlanezils", "count": 1, "languages": 1 }, { - "order": 798, + "order": 802, "name": "judithernandez", "count": 1, "languages": 1 }, { - "order": 799, + "order": 803, "name": "cris10026", "count": 1, "languages": 1 }, { - "order": 800, + "order": 804, "name": "dakkaj", "count": 1, "languages": 1 }, { - "order": 801, + "order": 805, "name": "ferngpv", "count": 1, "languages": 1 }, { - "order": 802, + "order": 806, "name": "mamartinez14", "count": 1, "languages": 1 }, { - "order": 803, + "order": 807, "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { - "order": 804, + "order": 808, "name": "experthacker444", "count": 1, "languages": 1 }, { - "order": 805, + "order": 809, "name": "pushodev", "count": 1, "languages": 1 }, { - "order": 806, + "order": 810, "name": "ignacioskm", "count": 1, "languages": 1 }, { - "order": 807, + "order": 811, "name": "luisangeles20", "count": 1, "languages": 1 }, { - "order": 808, + "order": 812, "name": "xcortes", "count": 1, "languages": 1 }, { - "order": 809, + "order": 813, "name": "isaacdci", "count": 1, "languages": 1 }, { - "order": 810, + "order": 814, "name": "yeisongil", "count": 1, "languages": 1 }, { - "order": 811, + "order": 815, "name": "jalonso76", "count": 1, "languages": 1 }, { - "order": 812, + "order": 816, "name": "maxirica", "count": 1, "languages": 1 }, { - "order": 813, + "order": 817, "name": "devjerez", "count": 1, "languages": 1 }, { - "order": 814, + "order": 818, "name": "betulioo", "count": 1, "languages": 1 }, { - "order": 815, + "order": 819, "name": "neftalyr", "count": 1, "languages": 1 }, { - "order": 816, + "order": 820, "name": "josuelopez5", "count": 1, "languages": 1 }, { - "order": 817, + "order": 821, "name": "vickalck", "count": 1, "languages": 1 }, { - "order": 818, + "order": 822, "name": "xhinto", "count": 1, "languages": 1 }, { - "order": 819, + "order": 823, "name": "jgregoris", "count": 1, "languages": 1 }, { - "order": 820, + "order": 824, "name": "sofiamfernandez", "count": 1, "languages": 1 }, { - "order": 821, - "name": "haroldalb", - "count": 1, - "languages": 1 - }, - { - "order": 822, + "order": 825, "name": "g4nd4lf", "count": 1, "languages": 1 }, { - "order": 823, + "order": 826, "name": "manueldenisdev", "count": 1, "languages": 1 }, { - "order": 824, + "order": 827, "name": "kshields51", "count": 1, "languages": 1 }, { - "order": 825, + "order": 828, "name": "omar8102", "count": 1, "languages": 1 }, { - "order": 826, + "order": 829, "name": "lluistech", "count": 1, "languages": 1 }, { - "order": 827, + "order": 830, "name": "vicvilla30", "count": 1, "languages": 1 }, { - "order": 828, + "order": 831, "name": "gilbertho502", "count": 1, "languages": 1 }, { - "order": 829, + "order": 832, "name": "13sauca13", "count": 1, "languages": 1 }, { - "order": 830, + "order": 833, "name": "cd1974", "count": 1, "languages": 1 }, { - "order": 831, + "order": 834, "name": "salas89", "count": 1, "languages": 1 }, { - "order": 832, + "order": 835, "name": "eatsangels", "count": 1, "languages": 1 }, { - "order": 833, + "order": 836, "name": "sergiomhernandez", "count": 1, "languages": 1 }, { - "order": 834, + "order": 837, "name": "carlosbb70", "count": 1, "languages": 1 }, { - "order": 835, + "order": 838, "name": "mjordanaam", "count": 1, "languages": 1 }, { - "order": 836, + "order": 839, "name": "howlett9999", "count": 1, "languages": 1 }, { - "order": 837, + "order": 840, "name": "copamire", "count": 1, "languages": 1 }, { - "order": 838, + "order": 841, "name": "erickcis", "count": 1, "languages": 1 }, { - "order": 839, + "order": 842, "name": "and-y21", "count": 1, "languages": 1 }, { - "order": 840, + "order": 843, "name": "leo18q", "count": 1, "languages": 1 }, { - "order": 841, + "order": 844, "name": "adcarret", "count": 1, "languages": 1 }, { - "order": 842, + "order": 845, "name": "arturodlapaz17", "count": 1, "languages": 1 }, { - "order": 843, + "order": 846, "name": "danidan1214", "count": 1, "languages": 1 }, { - "order": 844, + "order": 847, "name": "julioorozco05", "count": 1, "languages": 1 }, { - "order": 845, + "order": 848, "name": "juanalbornoz32", "count": 1, "languages": 1 }, { - "order": 846, + "order": 849, "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { - "order": 847, + "order": 850, "name": "manuu42", "count": 1, "languages": 1 }, { - "order": 848, + "order": 851, "name": "sergiovelayos", "count": 1, "languages": 1 }, { - "order": 849, + "order": 852, "name": "snowale", "count": 1, "languages": 1 }, { - "order": 850, + "order": 853, "name": "gl-informatica", "count": 1, "languages": 1 }, { - "order": 851, + "order": 854, "name": "dacaldev", "count": 1, "languages": 1 }, { - "order": 852, + "order": 855, "name": "javirr4", "count": 1, "languages": 1 }, { - "order": 853, + "order": 856, "name": "amitchellg", "count": 1, "languages": 1 }, { - "order": 854, + "order": 857, "name": "henrydavidprimera", "count": 1, "languages": 1 }, { - "order": 855, + "order": 858, "name": "cristianvergaraf", "count": 1, "languages": 1 }, { - "order": 856, + "order": 859, "name": "geridage", "count": 1, "languages": 1 }, { - "order": 857, + "order": 860, "name": "osneidert", "count": 1, "languages": 1 }, { - "order": 858, + "order": 861, "name": "perla-zg", "count": 1, "languages": 1 }, { - "order": 859, + "order": 862, "name": "zeraven09", "count": 1, "languages": 1 }, { - "order": 860, + "order": 863, "name": "acobo3", "count": 1, "languages": 1 }, { - "order": 861, + "order": 864, "name": "fergz1988", "count": 1, "languages": 1 }, { - "order": 862, + "order": 865, "name": "johao23", "count": 1, "languages": 1 }, { - "order": 863, + "order": 866, "name": "hnaranjog", "count": 1, "languages": 1 }, { - "order": 864, + "order": 867, "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { - "order": 865, + "order": 868, "name": "jgarteag", "count": 1, "languages": 1 }, { - "order": 866, + "order": 869, "name": "ndepaul82", "count": 1, "languages": 1 }, { - "order": 867, + "order": 870, "name": "neusier101", "count": 1, "languages": 1 }, { - "order": 868, + "order": 871, "name": "wilsonbarrera", "count": 1, "languages": 1 }, { - "order": 869, + "order": 872, "name": "mrf1989", "count": 1, "languages": 1 }, { - "order": 870, + "order": 873, "name": "charly024", "count": 1, "languages": 1 }, { - "order": 871, + "order": 874, "name": "nico70012", "count": 1, "languages": 1 }, { - "order": 872, + "order": 875, "name": "gersonoroz", "count": 1, "languages": 1 }, { - "order": 873, + "order": 876, "name": "johannmanrique", "count": 1, "languages": 1 }, { - "order": 874, + "order": 877, "name": "facundorsabia", "count": 1, "languages": 1 }, { - "order": 875, + "order": 878, "name": "cisneros2404", "count": 1, "languages": 1 }, { - "order": 876, + "order": 879, "name": "josem17-cyber", "count": 1, "languages": 1 }, { - "order": 877, + "order": 880, "name": "sbngl", "count": 1, "languages": 1 }, { - "order": 878, + "order": 881, "name": "x3mboy", "count": 1, "languages": 1 }, { - "order": 879, + "order": 882, "name": "van-02", "count": 1, "languages": 1 }, { - "order": 880, + "order": 883, "name": "franciscokarriere", "count": 1, "languages": 1 }, { - "order": 881, + "order": 884, "name": "jd-gm", "count": 1, "languages": 1 }, { - "order": 882, + "order": 885, "name": "fzcarlitos", "count": 1, "languages": 1 }, { - "order": 883, + "order": 886, "name": "dmhenaopa", "count": 1, "languages": 1 }, { - "order": 884, + "order": 887, "name": "gerespinosa", "count": 1, "languages": 1 }, { - "order": 885, + "order": 888, "name": "alexis0717", "count": 1, "languages": 1 }, { - "order": 886, + "order": 889, "name": "rojasvargas", "count": 1, "languages": 1 }, { - "order": 887, + "order": 890, "name": "alexxawada", "count": 1, "languages": 1 }, { - "order": 888, + "order": 891, + "name": "lopesteban", + "count": 1, + "languages": 1 + }, + { + "order": 892, "name": "lytsar", "count": 1, "languages": 1 }, { - "order": 889, + "order": 893, "name": "jsruedatorres", "count": 1, "languages": 1 }, { - "order": 890, + "order": 894, "name": "fullstackarlo", "count": 1, "languages": 1 }, { - "order": 891, + "order": 895, "name": "brayancordova1", "count": 1, "languages": 1 }, { - "order": 892, + "order": 896, "name": "francescoalterio", "count": 1, "languages": 1 }, { - "order": 893, + "order": 897, "name": "francomoreira", "count": 1, "languages": 1 }, { - "order": 894, + "order": 898, "name": "kenzambrano", "count": 1, "languages": 1 }, { - "order": 895, + "order": 899, "name": "edperez07", "count": 1, "languages": 1 }, { - "order": 896, + "order": 900, "name": "edgonzz", "count": 1, "languages": 1 }, { - "order": 897, + "order": 901, "name": "siuldev", "count": 1, "languages": 1 }, { - "order": 898, + "order": 902, "name": "vmga09", "count": 1, "languages": 1 }, { - "order": 899, + "order": 903, "name": "frcan89", "count": 1, "languages": 1 }, { - "order": 900, + "order": 904, "name": "jpiacaruso", "count": 1, "languages": 1 }, { - "order": 901, + "order": 905, "name": "m4xisil", "count": 1, "languages": 1 }, { - "order": 902, + "order": 906, "name": "leydimadrid", "count": 1, "languages": 1 }, { - "order": 903, + "order": 907, "name": "albabp", "count": 1, "languages": 1 }, { - "order": 904, + "order": 908, "name": "juanpablo-a", "count": 1, "languages": 1 }, { - "order": 905, + "order": 909, "name": "cgomezadolfo", "count": 1, "languages": 1 }, { - "order": 906, + "order": 910, "name": "lfam200", "count": 1, "languages": 1 }, { - "order": 907, + "order": 911, "name": "kocho03", "count": 1, "languages": 1 }, { - "order": 908, + "order": 912, "name": "yessikamichelle", "count": 1, "languages": 1 }, { - "order": 909, + "order": 913, "name": "fernandofl", "count": 1, "languages": 1 }, { - "order": 910, + "order": 914, "name": "peticas", "count": 1, "languages": 1 }, { - "order": 911, + "order": 915, "name": "royhuamanavila", "count": 1, "languages": 1 }, { - "order": 912, + "order": 916, "name": "afl0r3s", "count": 1, "languages": 1 }, { - "order": 913, + "order": 917, "name": "abengl", "count": 1, "languages": 1 }, { - "order": 914, + "order": 918, "name": "isnatthy", "count": 1, "languages": 1 }, { - "order": 915, + "order": 919, "name": "lfwzk", "count": 1, "languages": 1 }, { - "order": 916, + "order": 920, "name": "denisortega", "count": 1, "languages": 1 }, { - "order": 917, + "order": 921, "name": "johnniew81", "count": 1, "languages": 1 }, { - "order": 918, + "order": 922, "name": "sergioab7", "count": 1, "languages": 1 }, { - "order": 919, + "order": 923, "name": "joseperesini", "count": 1, "languages": 1 }, { - "order": 920, + "order": 924, "name": "aleclto7", "count": 1, "languages": 1 }, { - "order": 921, + "order": 925, "name": "pierre-ol", "count": 1, "languages": 1 }, { - "order": 922, + "order": 926, "name": "sixtodev", "count": 1, "languages": 1 }, { - "order": 923, + "order": 927, "name": "nnunezmedina", "count": 1, "languages": 1 }, { - "order": 924, + "order": 928, "name": "conrado85", "count": 1, "languages": 1 }, { - "order": 925, + "order": 929, "name": "patricioguerra30", "count": 1, "languages": 1 }, { - "order": 926, + "order": 930, "name": "walkerlyna", "count": 1, "languages": 1 }, { - "order": 927, + "order": 931, "name": "augustbs", "count": 1, "languages": 1 }, { - "order": 928, + "order": 932, "name": "gc796", "count": 1, "languages": 1 }, { - "order": 929, + "order": 933, "name": "diegoxxd", "count": 1, "languages": 1 }, { - "order": 930, + "order": 934, "name": "ronnieruuz", "count": 1, "languages": 1 }, { - "order": 931, + "order": 935, "name": "nozodev", "count": 1, "languages": 1 }, { - "order": 932, + "order": 936, "name": "pointfs", "count": 1, "languages": 1 }, { - "order": 933, + "order": 937, "name": "saintsluis", "count": 1, "languages": 1 }, { - "order": 934, + "order": 938, "name": "cliverjimny123", "count": 1, "languages": 1 }, { - "order": 935, + "order": 939, "name": "mekanicas", "count": 1, "languages": 1 }, { - "order": 936, + "order": 940, "name": "vainsito1", "count": 1, "languages": 1 }, { - "order": 937, + "order": 941, "name": "kouski", "count": 1, "languages": 1 }, { - "order": 938, + "order": 942, "name": "ricarsur", "count": 1, "languages": 1 }, { - "order": 939, + "order": 943, "name": "s9code", "count": 1, "languages": 1 }, { - "order": 940, + "order": 944, "name": "jacobrwx", "count": 1, "languages": 1 }, { - "order": 941, + "order": 945, "name": "dianelis1", "count": 1, "languages": 1 }, { - "order": 942, + "order": 946, "name": "oscarletelier", "count": 1, "languages": 1 }, { - "order": 943, + "order": 947, "name": "l3v1xx", "count": 1, "languages": 1 }, { - "order": 944, + "order": 948, "name": "codejoss", "count": 1, "languages": 1 }, { - "order": 945, + "order": 949, "name": "miguelsarm", "count": 1, "languages": 1 }, { - "order": 946, + "order": 950, "name": "romanocoder", "count": 1, "languages": 1 }, { - "order": 947, + "order": 951, "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { - "order": 948, + "order": 952, "name": "flarien", "count": 1, "languages": 1 }, { - "order": 949, + "order": 953, "name": "abraham9804", "count": 1, "languages": 1 }, { - "order": 950, + "order": 954, "name": "sejotaz", "count": 1, "languages": 1 }, { - "order": 951, + "order": 955, "name": "gustavoguerrero", "count": 1, "languages": 1 }, { - "order": 952, + "order": 956, "name": "javieradev", "count": 1, "languages": 1 }, { - "order": 953, + "order": 957, "name": "frannm29", "count": 1, "languages": 1 }, { - "order": 954, + "order": 958, "name": "mvillegas18", "count": 1, "languages": 1 }, { - "order": 955, + "order": 959, "name": "antonioverdugo", "count": 1, "languages": 1 }, { - "order": 956, + "order": 960, "name": "kronomio", "count": 1, "languages": 1 }, { - "order": 957, + "order": 961, "name": "quirogapau", "count": 1, "languages": 1 }, { - "order": 958, + "order": 962, "name": "ercky1980", "count": 1, "languages": 1 }, { - "order": 959, + "order": 963, "name": "madelefonb", "count": 1, "languages": 1 }, { - "order": 960, + "order": 964, "name": "imista", "count": 1, "languages": 1 }, { - "order": 961, + "order": 965, "name": "mhrosariom", "count": 1, "languages": 1 }, { - "order": 962, + "order": 966, "name": "mdemena", "count": 1, "languages": 1 }, { - "order": 963, + "order": 967, "name": "luchof5", "count": 1, "languages": 1 }, { - "order": 964, + "order": 968, "name": "nicorey89", "count": 1, "languages": 1 }, { - "order": 965, + "order": 969, "name": "santaravena", "count": 1, "languages": 1 }, { - "order": 966, + "order": 970, "name": "xnomada", "count": 1, "languages": 1 }, { - "order": 967, + "order": 971, "name": "yaojema", "count": 1, "languages": 1 }, { - "order": 968, + "order": 972, "name": "diego-santana23", "count": 1, "languages": 1 }, { - "order": 969, + "order": 973, "name": "aidicoop", "count": 1, "languages": 1 }, { - "order": 970, + "order": 974, "name": "agus-ig", "count": 1, "languages": 1 }, { - "order": 971, + "order": 975, "name": "dacronik", "count": 1, "languages": 1 }, { - "order": 972, + "order": 976, "name": "alemar16", "count": 1, "languages": 1 }, { - "order": 973, + "order": 977, "name": "alvarommedia", "count": 1, "languages": 1 }, { - "order": 974, + "order": 978, "name": "rodmiggithub", "count": 1, "languages": 1 }, { - "order": 975, + "order": 979, "name": "lucianogriffa", "count": 1, "languages": 1 }, { - "order": 976, + "order": 980, "name": "datrujillog", "count": 1, "languages": 1 }, { - "order": 977, + "order": 981, "name": "kevinramirez28", "count": 1, "languages": 1 }, { - "order": 978, + "order": 982, "name": "chriszaldana", "count": 1, "languages": 1 }, { - "order": 979, + "order": 983, "name": "1978acb", "count": 1, "languages": 1 }, { - "order": 980, + "order": 984, "name": "maximotoro", "count": 1, "languages": 1 }, { - "order": 981, + "order": 985, "name": "bjchavez", "count": 1, "languages": 1 }, { - "order": 982, + "order": 986, "name": "seigigim", "count": 1, "languages": 1 }, { - "order": 983, + "order": 987, "name": "gizelads", "count": 1, "languages": 1 }, { - "order": 984, + "order": 988, "name": "mauricioyair", "count": 1, "languages": 1 }, { - "order": 985, + "order": 989, "name": "is2095", "count": 1, "languages": 1 }, { - "order": 986, + "order": 990, "name": "axelwestman", "count": 1, "languages": 1 }, { - "order": 987, + "order": 991, "name": "manugonzalito", "count": 1, "languages": 1 }, { - "order": 988, + "order": 992, "name": "coletonosh", "count": 1, "languages": 1 }, { - "order": 989, + "order": 993, "name": "deaconst", "count": 1, "languages": 1 }, { - "order": 990, + "order": 994, "name": "cibacoa", "count": 1, "languages": 1 }, { - "order": 991, + "order": 995, "name": "feliaguirre7", "count": 1, "languages": 1 }, { - "order": 992, + "order": 996, "name": "rulo77", "count": 1, "languages": 1 }, { - "order": 993, + "order": 997, "name": "marcosapodaca", "count": 1, "languages": 1 }, { - "order": 994, + "order": 998, "name": "manuhssj", "count": 1, "languages": 1 }, { - "order": 995, + "order": 999, "name": "serg032", "count": 1, "languages": 1 }, { - "order": 996, + "order": 1000, "name": "lucc4sz", "count": 1, "languages": 1 }, { - "order": 997, + "order": 1001, "name": "jancalos", "count": 1, "languages": 1 }, { - "order": 998, + "order": 1002, "name": "javodevon", "count": 1, "languages": 1 }, { - "order": 999, + "order": 1003, "name": "astriebeck", "count": 1, "languages": 1 }, { - "order": 1000, + "order": 1004, "name": "ishimaku", "count": 1, "languages": 1 }, { - "order": 1001, + "order": 1005, "name": "afacorroloscos", "count": 1, "languages": 1 }, { - "order": 1002, + "order": 1006, "name": "ledyam", "count": 1, "languages": 1 }, { - "order": 1003, + "order": 1007, "name": "jatomas", "count": 1, "languages": 1 }, { - "order": 1004, + "order": 1008, "name": "marqitos", "count": 1, "languages": 1 }, { - "order": 1005, + "order": 1009, "name": "marvinagui", "count": 1, "languages": 1 }, { - "order": 1006, + "order": 1010, "name": "lobogeekmx", "count": 1, "languages": 1 }, { - "order": 1007, + "order": 1011, "name": "rocadev2714", "count": 1, "languages": 1 }, { - "order": 1008, + "order": 1012, "name": "rootqui", "count": 1, "languages": 1 }, { - "order": 1009, + "order": 1013, "name": "miguelgargallo", "count": 1, "languages": 1 }, { - "order": 1010, + "order": 1014, "name": "sandrarg85", "count": 1, "languages": 1 }, { - "order": 1011, + "order": 1015, "name": "protpus98", "count": 1, "languages": 1 }, { - "order": 1012, + "order": 1016, "name": "pkmaventura", "count": 1, "languages": 1 }, { - "order": 1013, + "order": 1017, "name": "jcrobles99", "count": 1, "languages": 1 }, { - "order": 1014, + "order": 1018, "name": "nunezlagos", "count": 1, "languages": 1 }, { - "order": 1015, + "order": 1019, "name": "chrisfelixgil", "count": 1, "languages": 1 }, { - "order": 1016, + "order": 1020, "name": "deimoshall", "count": 1, "languages": 1 }, { - "order": 1017, + "order": 1021, "name": "fede6299", "count": 1, "languages": 1 }, { - "order": 1018, + "order": 1022, "name": "darkohokage", "count": 1, "languages": 1 }, { - "order": 1019, + "order": 1023, "name": "pablo-lnx", "count": 1, "languages": 1 }, { - "order": 1020, + "order": 1024, "name": "kevin05m", "count": 1, "languages": 1 }, { - "order": 1021, + "order": 1025, "name": "diegomm27", "count": 1, "languages": 1 }, { - "order": 1022, + "order": 1026, "name": "joferpg", "count": 1, "languages": 1 }, { - "order": 1023, + "order": 1027, "name": "mbmaeso", "count": 1, "languages": 1 }, { - "order": 1024, + "order": 1028, "name": "braiso-22", "count": 1, "languages": 1 }, { - "order": 1025, + "order": 1029, "name": "deiiviitdev", "count": 1, "languages": 1 }, { - "order": 1026, + "order": 1030, "name": "alvarominarro", "count": 1, "languages": 1 }, { - "order": 1027, + "order": 1031, "name": "borjadelgadodev", "count": 1, "languages": 1 }, { - "order": 1028, + "order": 1032, "name": "elpeque29", "count": 1, "languages": 1 }, { - "order": 1029, + "order": 1033, "name": "jaennova", "count": 1, "languages": 1 }, { - "order": 1030, + "order": 1034, "name": "luisalberto22", "count": 1, "languages": 1 }, { - "order": 1031, + "order": 1035, "name": "daniel-cas", "count": 1, "languages": 1 }, { - "order": 1032, + "order": 1036, "name": "davidcv-dev", "count": 1, "languages": 1 }, { - "order": 1033, + "order": 1037, "name": "francisleble", "count": 1, "languages": 1 }, { - "order": 1034, + "order": 1038, "name": "jhordanluyo", "count": 1, "languages": 1 }, { - "order": 1035, + "order": 1039, "name": "acirdevelper", "count": 1, "languages": 1 }, { - "order": 1036, + "order": 1040, "name": "marcosjarrin", "count": 1, "languages": 1 }, { - "order": 1037, + "order": 1041, "name": "implevacui", "count": 1, "languages": 1 }, { - "order": 1038, + "order": 1042, "name": "jandresalvar", "count": 1, "languages": 1 }, { - "order": 1039, + "order": 1043, "name": "ca2puntosv", "count": 1, "languages": 1 }, { - "order": 1040, + "order": 1044, "name": "angelcruzg23", "count": 1, "languages": 1 }, { - "order": 1041, + "order": 1045, "name": "corvo-99", "count": 1, "languages": 1 }, { - "order": 1042, + "order": 1046, "name": "devm0nk3y", "count": 1, "languages": 1 }, { - "order": 1043, + "order": 1047, "name": "danielcastillo1112", "count": 1, "languages": 1 }, { - "order": 1044, + "order": 1048, "name": "sirvega83", "count": 1, "languages": 1 }, { - "order": 1045, + "order": 1049, "name": "franpua", "count": 1, "languages": 1 }, { - "order": 1046, + "order": 1050, "name": "malkarmah", "count": 1, "languages": 1 }, { - "order": 1047, + "order": 1051, "name": "palons29", "count": 1, "languages": 1 }, { - "order": 1048, + "order": 1052, "name": "diegopardomontero", "count": 1, "languages": 1 }, { - "order": 1049, + "order": 1053, "name": "robermejia", "count": 1, "languages": 1 }, { - "order": 1050, + "order": 1054, "name": "zyn7e", "count": 1, "languages": 1 }, { - "order": 1051, + "order": 1055, "name": "javiir", "count": 1, "languages": 1 }, { - "order": 1052, + "order": 1056, "name": "antoniojzp86", "count": 1, "languages": 1 }, { - "order": 1053, + "order": 1057, "name": "v1k770r", "count": 1, "languages": 1 }, { - "order": 1054, + "order": 1058, "name": "clespinosa2024", "count": 1, "languages": 1 }, { - "order": 1055, + "order": 1059, "name": "gianellannie", "count": 1, "languages": 1 }, { - "order": 1056, + "order": 1060, "name": "dany3gs", "count": 1, "languages": 1 }, { - "order": 1057, + "order": 1061, "name": "queralesdev", "count": 1, "languages": 1 }, { - "order": 1058, + "order": 1062, "name": "bycris13", "count": 1, "languages": 1 }, { - "order": 1059, + "order": 1063, "name": "reneguzman7", "count": 1, "languages": 1 }, { - "order": 1060, + "order": 1064, "name": "adriansaint07", "count": 1, "languages": 1 }, { - "order": 1061, + "order": 1065, "name": "dovinhoyos", "count": 1, "languages": 1 }, { - "order": 1062, + "order": 1066, "name": "fredylopez01", "count": 1, "languages": 1 }, { - "order": 1063, + "order": 1067, "name": "lautimorales", "count": 1, "languages": 1 }, { - "order": 1064, + "order": 1068, "name": "jlrojano", "count": 1, "languages": 1 }, { - "order": 1065, + "order": 1069, "name": "jrgim", "count": 1, "languages": 1 }, { - "order": 1066, + "order": 1070, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1067, + "order": 1071, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1068, + "order": 1072, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1069, + "order": 1073, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1070, + "order": 1074, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1075, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1076, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1077, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1078, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1079, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1080, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1081, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1082, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1083, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1084, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1085, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1086, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1087, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1088, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1089, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1090, "name": "ivanserran", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1091, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1092, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1093, "name": "nolemoon", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1094, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1095, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1096, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1097, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1098, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1095, + "order": 1099, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1096, + "order": 1100, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1101, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1102, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1103, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1104, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1105, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1106, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1107, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1108, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1109, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1110, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1111, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1112, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1113, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1114, "name": "trollface77", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1115, "name": "brunom-93", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1116, "name": "jhonnfl", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1117, "name": "alejandroruiz23", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1118, "name": "jaimesoftdev", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1119, "name": "jarzatedev", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1120, "name": "edm1ya", "count": 1, "languages": 1 }, { - "order": 1117, + "order": 1121, "name": "serg-pq", "count": 1, "languages": 1 }, { - "order": 1118, + "order": 1122, "name": "tartabullroberto", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1123, "name": "alexisbarradev", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1124, "name": "lara-vel-dev", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1125, "name": "kelvincb", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1126, "name": "armm77", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1127, "name": "paluzz", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1128, "name": "arathhh8", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1129, "name": "1cel4nc3", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1130, "name": "theposi", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1131, "name": "vinyoles", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1132, "name": "omarroman29", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1133, "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1134, "name": "tetotille", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1135, "name": "luisgarm", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1136, "name": "pipeyz21", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1137, "name": "santiagomac", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1138, "name": "vorosdev", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1139, "name": "mickysoft", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1140, "name": "melonconyogurt", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1141, "name": "cdryampi", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1142, "name": "bellodeveloper", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1143, + "name": "nachitoe", + "count": 1, + "languages": 1 + }, + { + "order": 1144, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1145, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1146, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1147, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1148, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1144, + "order": 1149, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1145, + "order": 1150, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1151, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1152, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1148, + "order": 1153, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1149, + "order": 1154, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1150, + "order": 1155, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1151, + "order": 1156, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1152, + "order": 1157, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1153, + "order": 1158, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1154, + "order": 1159, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1155, + "order": 1160, "name": "qwik-zghieb", "count": 1, "languages": 1 }, { - "order": 1156, + "order": 1161, "name": "gonzalinuz18", "count": 1, "languages": 1 }, { - "order": 1157, + "order": 1162, "name": "tilordqwerty", "count": 1, "languages": 1 }, { - "order": 1158, + "order": 1163, "name": "dgquintero", "count": 1, "languages": 1 }, { - "order": 1159, + "order": 1164, "name": "torvicv", "count": 1, "languages": 1 }, { - "order": 1160, + "order": 1165, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1161, + "order": 1166, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1162, + "order": 1167, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1163, + "order": 1168, "name": "mvidab", "count": 1, "languages": 1 }, { - "order": 1164, + "order": 1169, "name": "leonardo-henao", "count": 1, "languages": 1 }, { - "order": 1165, + "order": 1170, "name": "pwrxman", "count": 1, "languages": 1 }, { - "order": 1166, + "order": 1171, "name": "c-blskv", "count": 1, "languages": 1 }, { - "order": 1167, + "order": 1172, "name": "emaerniquez", "count": 1, "languages": 1 }, { - "order": 1168, + "order": 1173, "name": "carolhs92", "count": 1, "languages": 1 }, { - "order": 1169, + "order": 1174, "name": "juancamilofvx", "count": 1, "languages": 1 }, { - "order": 1170, + "order": 1175, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1171, + "order": 1176, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1172, + "order": 1177, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1173, + "order": 1178, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1174, + "order": 1179, "name": "matinbohorquez", "count": 1, "languages": 1 }, { - "order": 1175, + "order": 1180, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1176, + "order": 1181, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1177, + "order": 1182, "name": "alecraft8", "count": 1, "languages": 1 }, { - "order": 1178, + "order": 1183, "name": "arperezinf", "count": 1, "languages": 1 }, { - "order": 1179, + "order": 1184, "name": "nightmare79", "count": 1, "languages": 1 }, { - "order": 1180, + "order": 1185, "name": "vikernes27666", "count": 1, "languages": 1 }, { - "order": 1181, + "order": 1186, "name": "cub-tor", "count": 1, "languages": 1 }, { - "order": 1182, + "order": 1187, "name": "carlosmperezm", "count": 1, "languages": 1 }, { - "order": 1183, + "order": 1188, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1184, + "order": 1189, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1185, + "order": 1190, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1186, + "order": 1191, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1187, + "order": 1192, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1188, + "order": 1193, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1189, + "order": 1194, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1190, + "order": 1195, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1191, + "order": 1196, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1192, + "order": 1197, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1193, + "order": 1198, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1194, + "order": 1199, "name": "ddaniel27", "count": 1, "languages": 1 From bcf9520d5ff79854944bcc0e912ed4532cf7d7a4 Mon Sep 17 00:00:00 2001 From: eber-antonio Date: Thu, 19 Sep 2024 20:12:21 -0600 Subject: [PATCH 421/539] #00 - Python y C --- .../c++/D4rth.cpp | 36 +++++++++++++++++++ .../python/D4rth.py | 21 +++++++++++ 2 files changed, 57 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/D4rth.cpp create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/D4rth.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/D4rth.cpp b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/D4rth.cpp new file mode 100644 index 0000000000..171f4f3212 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/D4rth.cpp @@ -0,0 +1,36 @@ + +// url: isocpp.org (no hay sitio oficial) + +// Esto es un comentario + +/* Esto también es un comentario */ + +#include +using namespace std; + +#define constante 1 + +int main(){ + char variable = 'variable'; + const int constant2 = 2; + + int numero = 10; + short numeroCorto = 5; + long numeroLargo = 100000; + long long numeroMuyLargo = 1000000000; + unsigned int numeroPositivo = 100; + + char caracter = 'a'; + char string = 'string'; + wchar_t letraUnicode = L'Ω'; + + bool verdad = true; + bool falso = false; + + float flotante = 1.2f; + double float_largo = 1.22222222; // 15 decimales o menos + long double numeroLargoDoble = 3.14159265358979323846L; + + cout << "¡Hola, C++!"; + return 0; +} \ No newline at end of file diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/D4rth.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/D4rth.py new file mode 100644 index 0000000000..bd0036b175 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/D4rth.py @@ -0,0 +1,21 @@ +# url: https://www.python.org/ + +# comentario + +''' +También un comentario +''' + +""" +Otro comentario +""" + +variable = "Hola" +CONSTANTE = "Constante?" # Es por convención, no es una contante real + +var_int = 1 +var_str = "string" +var_bool = True +var_float = 1.0 + +print("¡Hola, Python!") From 0672974d59843f29b4e6b19ed8f807914072ab22 Mon Sep 17 00:00:00 2001 From: eber-antonio Date: Thu, 19 Sep 2024 21:04:30 -0600 Subject: [PATCH 422/539] Correccion nombres --- .../c++/{D4rth.cpp => Eberstr.cpp} | 0 .../python/{D4rth.py => Eberstr.py} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/{D4rth.cpp => Eberstr.cpp} (100%) rename Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/{D4rth.py => Eberstr.py} (100%) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/D4rth.cpp b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/Eberstr.cpp similarity index 100% rename from Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/D4rth.cpp rename to Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/Eberstr.cpp diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/D4rth.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Eberstr.py similarity index 100% rename from Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/D4rth.py rename to Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Eberstr.py From 0e94eaf7a61b0a9318ef9d226471086b67616882 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Heguaburu=20S=C3=A1nchez?= Date: Fri, 20 Sep 2024 03:04:24 -0300 Subject: [PATCH 423/539] 10-python --- .../10 - EXCEPCIONES/python/NicoHeguaburu.py | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Roadmap/10 - EXCEPCIONES/python/NicoHeguaburu.py diff --git a/Roadmap/10 - EXCEPCIONES/python/NicoHeguaburu.py b/Roadmap/10 - EXCEPCIONES/python/NicoHeguaburu.py new file mode 100644 index 0000000000..31d22ac15c --- /dev/null +++ b/Roadmap/10 - EXCEPCIONES/python/NicoHeguaburu.py @@ -0,0 +1,48 @@ +#EXCEPCIONES + + +try: + print(nico) +except Exception as e: + print(f"SE A PRODUCIDO UN ERROR {e}") + + + +#Ejercicio Extra + +class StrTypeError(Exception): + pass + +def procesar_parametros(parametros: list): + + if len(parametros) < 4: + raise IndexError() + elif parametros[1] == 0: + raise ZeroDivisionError() + elif type(parametros[2]) == str: + raise StrTypeError("El segundo elemento no puede ser una cadena de texto") + + + print(parametros[4]) + print(parametros[0]/parametros[1]) + print(parametros[2] * 10) + + + + + +try: + procesar_parametros([1,0,"nico"]) +except IndexError as e: + print("El numero de elementos de la lista tiene que ser mayor a tres.") +except ZeroDivisionError as e: + print("El segundo elemento de la lista no puede ser cero.") +except StrTypeError as e: + print(f"{e}") +except Exception as e: + print(f"Se a producido un error inesperado: {e}") +else: + print("No se han producido errores.") +finally: + print("Se termino el programa") + From c0eed5849cf95624422cc803c66afce2d05a80d4 Mon Sep 17 00:00:00 2001 From: mvidalb Date: Fri, 20 Sep 2024 08:19:23 +0200 Subject: [PATCH 424/539] #16 - Python --- .../python/mvidalb.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Roadmap/16 - EXPRESIONES REGULARES/python/mvidalb.py diff --git a/Roadmap/16 - EXPRESIONES REGULARES/python/mvidalb.py b/Roadmap/16 - EXPRESIONES REGULARES/python/mvidalb.py new file mode 100644 index 0000000000..ad17357a50 --- /dev/null +++ b/Roadmap/16 - EXPRESIONES REGULARES/python/mvidalb.py @@ -0,0 +1,36 @@ +import re + +""" +Ejercicio +""" + +def find_numbers(text: str) -> list: + return re.findall(r"\d+", text) + +text = "Este es el ejercicio 16 publicado el 15/04/2024." +print(find_numbers(text)) + + +""" +Ejercicio extra +""" +email = "mario.vidal@gmail.com" +number = "+34 654 32 13 21" +url = "https://www.retosdeprogramacion.com" + + +def validate_email(email : str) -> bool: + return bool(re.match(r"^[\w.+-]{5,15}@[\w]+\.[a-zA-Z]{2,4}$", email)) + + +def validate_number(number : str) -> bool: + return bool(re.match(r"^\+?[\d\s]{3,}$", number)) + + +def validate_url(url : str) -> bool: + return bool(re.match(r"^http[s]?://(www.)?[\w]+\.[a-zA-Z]{2,3}$", url)) + +print(validate_email(email)) +print(validate_number(number)) +print(validate_url(url)) + From abbed24edef64477a6c56697847530001ada9889 Mon Sep 17 00:00:00 2001 From: mvidalb Date: Fri, 20 Sep 2024 08:54:54 +0200 Subject: [PATCH 425/539] #17 - Python --- Roadmap/17 - ITERACIONES/python/mvidalb.py | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Roadmap/17 - ITERACIONES/python/mvidalb.py diff --git a/Roadmap/17 - ITERACIONES/python/mvidalb.py b/Roadmap/17 - ITERACIONES/python/mvidalb.py new file mode 100644 index 0000000000..3fd3b5d80a --- /dev/null +++ b/Roadmap/17 - ITERACIONES/python/mvidalb.py @@ -0,0 +1,59 @@ +''' +Ejercicio +''' + +# For +for i in range(1,11): + print(i) + +# Wjoñe +i = 1 +while i <= 10: + print(i) + i += 1 + +# Recursividad +def count(i): + if i <= 10: + print(i) + count(i+1) + +count(1) + + +''' +Ejercicio extra +''' +for e in [1, 2, 3, 4]: + print(e) + +for e in {1, 2, 3, 4}: + print(e) + +for e in (1, 2, 3, 4): + print(e) + +for e in {1: "a", 2: "b", 3: "c", 4: "d"}: + print(e) + +for e in {1: "a", 2: "b", 3: "c", 4: "d"}.keys(): + print(e) + +for e in {1: "a", 2: "b", 3: "c", 4: "d"}.values(): + print(e) + +print(*[i for i in range(1,11)], sep="\n") + +for c in "python": + print(c) + +for e in reversed([1, 2, 3, 4]): + print(e) + +for e in sorted(["v", "i", "d", "a", "l"]): + print(e) + +for i, e in enumerate(sorted(["v", "i", "d", "a", "l"])): + print(f"Índice: {i}, Value: {e}") + + \ No newline at end of file From 50e2519da287fab1b33ce768283d6a1017630724 Mon Sep 17 00:00:00 2001 From: javitron100 <86791160+javitron100@users.noreply.github.com> Date: Fri, 20 Sep 2024 09:30:07 +0200 Subject: [PATCH 426/539] #03 - Python --- .../python/javitron100.py | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 Roadmap/03 - ESTRUCTURAS DE DATOS/python/javitron100.py diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/python/javitron100.py b/Roadmap/03 - ESTRUCTURAS DE DATOS/python/javitron100.py new file mode 100644 index 0000000000..6a691e2fac --- /dev/null +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/python/javitron100.py @@ -0,0 +1,121 @@ +# ESTRUCTURAS DE DATOS + +# Listas +mi_lista = [1, 35, 23, 11, 34] +print(mi_lista[3]) + +mi_lista.append(5) +print(mi_lista) + +mi_lista.insert(1, 12) +print(mi_lista) + +mi_lista.remove(12) +print(mi_lista) + +mi_lista.pop() +print(mi_lista) + +mi_lista.sort() +print(mi_lista) + +mi_lista.reverse() +print(mi_lista) + +# Tuplas +mi_tupla = (1, 56, 14, 77, 6, 13) +print(mi_tupla) + +# Sets +mi_set = {1, 2, 3, 4, 5, 6, 7} +print(type(mi_set)) +print(mi_set) +print(mi_set) +print(mi_set) + +mi_set.add(14) +print(mi_set) + +mi_set.remove(3) +print(mi_set) + +# Diccionarios + +mi_diccionario = { + "Nombre" : "Javier", + "Edad" : 50, + "Telefono" : "642123487" + +} + +print(mi_diccionario) +print(mi_diccionario["Nombre"]) + +# Dificultad Extra +opcion = "" +agenda = [ + {"Nombre" : "javi", "Telefono" : "11111"}, + {"Nombre" : "pepe", "Telefono" : "22222"}, + {"Nombre" : "toni", "Telefono" : "33333"}, + {"Nombre" : "carla", "Telefono" : "44444"} + ] + +def insertar_contacto(): + + contacto = {"Nombre" : "", "Telefono" : ""} + + nom = input("Nombre: ") + tel = input("Teléfono: ") + if tel.isdigit() and len(tel) in range(1, 12): + contacto["Nombre"] = nom + contacto["Telefono"] = tel + agenda.append(contacto) + else: + print("El número de teléfono no es válido, no se ha grabado la entrada.") + +def borrar_contacto(busqueda): + for contacto in agenda: + if contacto["Nombre"] == busqueda: + agenda.remove(contacto) + +def actualizar_contacto(busqueda): + for contacto in agenda: + if contacto["Nombre"] == busqueda: + tel = input("Nuevo número de teléfono: ") + if tel.isdigit() and len(tel) in range(1, 12): + contacto["Telefono"] = tel + else: + print("Teléfono no válido. No se actualiza.") + +def buscar_contacto(busqueda): + for contacto in agenda: + if contacto["Nombre"] == busqueda: + print(contacto) + + + +while opcion != "0": + + if opcion == "1": + insertar_contacto() + + if opcion == "2": + borrar_contacto(input("Nombre a borrar de la agenda: ")) + + if opcion == "3": + actualizar_contacto(input("Nombre a actualizar: ")) + + if opcion == "4": + buscar_contacto(input("Nombre a buscar: ")) + + if opcion == "5": + print(agenda) + + print("1.- Insertar contacto") + print("2.- Borrar contacto") + print("3.- Actualizar contacto") + print("4.- Buscar contacto") + print("5.- Mostrar agenda") + opcion = input("Elige una opcion (0 para terminar el programa): ") + + From 3c895cfad332980ce02e8960d91dff9733ee03d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Heguaburu=20S=C3=A1nchez?= Date: Fri, 20 Sep 2024 05:03:00 -0300 Subject: [PATCH 427/539] 11-python --- .../python/NicoHeguaburu.py | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 Roadmap/11 - MANEJO DE FICHEROS/python/NicoHeguaburu.py diff --git a/Roadmap/11 - MANEJO DE FICHEROS/python/NicoHeguaburu.py b/Roadmap/11 - MANEJO DE FICHEROS/python/NicoHeguaburu.py new file mode 100644 index 0000000000..98000fd33f --- /dev/null +++ b/Roadmap/11 - MANEJO DE FICHEROS/python/NicoHeguaburu.py @@ -0,0 +1,101 @@ +#Ficheros + +import os + +file_name = "NicoHeguaburu.txt" + + +with open(file_name, "w") as file: + file.write("Nicolás Heguaburu\n") + file.write("22\n") + file.write("Python\n") + +with open(file_name, "r") as file: + print(file.read()) + + +os.remove(file_name) + + + +#Dificultad extra + +file_name = "NicoHeguaburuShop.txt" + + +while True: + print("1------Añadir producto") + print("2------Consultar producto") + print("3------Actualizar producto") + print("4------Eliminar producto") + print("5------Calcular la venta total") + print("6------Calcular la venta por producto") + print("7------Ver todos los productos") + print("8------Salir") + + opcion = input("Selecione una opcion...") + + if opcion == "1": + nombre = input("Nombre:") + cantidad = input("Cantidad:") + precio = input("Precio:") + + with open(file_name, "a") as file: + file.write(f"{nombre}, {cantidad}, {precio}\n") + + elif opcion == "2": + nombre = input("Nombre:") + with open(file_name, "r") as file: + for linea in file.readlines(): + if linea.split(", ")[0] == nombre: + print(linea) + break + + + elif opcion == "3": + nombre = input("Nombre:") + cantidad = input("Cantidad:") + precio = input("Precio:") + with open(file_name, "r") as file: + lineas = file.readlines() + + with open(file_name, "w") as file: + for linea in lineas: + if linea.split(", ")[0] == nombre: + file.write(f"{nombre}, {cantidad}, {precio} \n") + else: + file.write(linea) + + elif opcion == "4": + nombre = input("Nombre:") + with open(file_name, "r") as file: + lineas = file.readlines() + + with open(file_name, "w") as file: + for linea in lineas: + if linea.split(", ")[0] != nombre: + file.write(linea) + + + elif opcion == "5": + with open(file_name, "r") as file: + lineas = file.readlines() + total_venta = 0 + for linea in lineas: + total_venta += int(linea.split(", ")[1]) * int(linea.split(", ")[2]) + print(total_venta) + + + elif opcion == "6": + nombre = input("Nombre:") + with open(file_name, "r") as file: + lineas = file.readlines() + for linea in lineas: + if linea.split(", ")[0] == nombre: + print(int(linea.split(", ")[1]) * int(linea.split(", ")[2])) + + elif opcion == "7": + with open(file_name, "r") as file: + print(file.read()) + else: + print("seleccione una opcion valida") From cb85471bfde89315dac5140088376eed41293a74 Mon Sep 17 00:00:00 2001 From: Mario Barbero Date: Fri, 20 Sep 2024 10:22:22 +0200 Subject: [PATCH 428/539] Reto #11 - Python --- .../python/elbarbero.py | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 Roadmap/11 - MANEJO DE FICHEROS/python/elbarbero.py diff --git a/Roadmap/11 - MANEJO DE FICHEROS/python/elbarbero.py b/Roadmap/11 - MANEJO DE FICHEROS/python/elbarbero.py new file mode 100644 index 0000000000..e944f65346 --- /dev/null +++ b/Roadmap/11 - MANEJO DE FICHEROS/python/elbarbero.py @@ -0,0 +1,119 @@ +""" + * IMPORTANTE: Sólo debes subir el fichero de código como parte del ejercicio. + * + * EJERCICIO: + * Desarrolla un programa capaz de crear un archivo que se llame como + * tu usuario de GitHub y tenga la extensión .txt. + * Añade varias líneas en ese fichero: + * - Tu nombre. + * - Edad. + * - Lenguaje de programación favorito. + * Imprime el contenido. + * Borra el fichero. + * + * DIFICULTAD EXTRA (opcional): + * Desarrolla un programa de gestión de ventas que almacena sus datos en un + * archivo .txt. + * - Cada producto se guarda en una línea del archivo de la siguiente manera: + * [nombre_producto], [cantidad_vendida], [precio]. + * - Siguiendo ese formato, y mediante terminal, debe permitir añadir, consultar, + * actualizar, eliminar productos y salir. + * - También debe poseer opciones para calcular la venta total y por producto. + * - La opción salir borra el .txt. + """ + +from pathlib import Path +import os + +def GetCurrentDirectory(): + return os.getcwd() + +def CreateFile(path: str, text = []): + if len(text) > 0: + with open(path, "w") as file: + for t in text: + file.write(str(t)+"\n") + +def ReadFile(path: str): + if os.path.exists(path): + file = Path(path) + texto = file.read_text("utf-8") + return texto + else: + return "No existe el archivo en la ruta especificada" + +def DeleteFlle(path: str): + if os.path.exists(path): + os.remove(path) + else: + print("No existe el archivo en la ruta especificada") + + +# EXTRA +class Warehouse: + def __init__(self, oid, name, items = []): + self.oid = oid + self.name = name + self.products = [] + self.products.extend(items) + + def AddProduct(self, newProduct): + self.products.append(newProduct) + + def UpdateProduct(self, oid, name = None, price = None, quantity = None, soldUnits = None): + p = self.GetProduct(oid) + if p != None: + p.name = name if name != None else p.name + p.priceByUnit = price if price != None else p.priceByUnit + p.quantity = quantity if quantity != None else p.quantity + p.soldUnits = soldUnits if soldUnits != None else p.soldUnits + return p + + def GetProduct(self, oid: int): + l = list(map(lambda x: x.oid == oid, self.products)) + index = l.index(True) + p = self.products[index] + return p + + def GetProducts(self): + print(*(p for p in self.products), sep='\n') + + def DelteItem(self, oid: int): + p = self.GetProduct(oid) + if p in self.products: + self.products.remove(p) + + + +class Product: + def __init__(self, oid, name, priceByUnit, quantity, soldUnits: int = 0): + self.oid = oid + self.name = name + self.priceByUnit = priceByUnit + self.quantity = quantity + self.soldUnits = soldUnits + + def __str__(self): + return f"El producto {self.name} tiene un precio de {self.priceByUnit}€ por unidad, en el almacén quedan {self.quantity} unidades y ha vendido {self.soldUnits} unidades." + + + + + +if __name__ == "__main__": + current_directory = GetCurrentDirectory() + print(current_directory) + CreateFile(f"{current_directory}\elbarbero.txt", ["Mario Barbero", 35, "Python"]) + text = ReadFile(f"{current_directory}\elbarbero.txt") + print(text) + DeleteFlle((f"{current_directory}\elbarbero.txt")) + + # EXTRA + almacen = Warehouse(1, "Almacen Burgos", [Product(1, "Chorizo", 1.65, 100, 25), Product(2, "Aceite Oliva 1L", 7.79, 550), Product(3, "Yogures", 1.90, 80), Product(4, "Pizza", 2.90, 185)]) + almacen.UpdateProduct(oid=3, name="Nuevo nombre") + print(almacen.GetProduct(1)) + text = [] + text.extend(str(p) for p in almacen.products) + + CreateFile(f"{current_directory}\elbarbero.txt", text) + DeleteFlle((f"{current_directory}\elbarbero.txt")) From a47ee6f3cabdee4d36a10839bc35130b4168cc8a Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Fri, 20 Sep 2024 10:47:10 +0200 Subject: [PATCH 429/539] 38 - Python --- .../python/EmmanuelMMontesinos.py | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/EmmanuelMMontesinos.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/EmmanuelMMontesinos.py b/Roadmap/38 - MOUREDEV PRO/python/EmmanuelMMontesinos.py new file mode 100644 index 0000000000..5e35dabff5 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/EmmanuelMMontesinos.py @@ -0,0 +1,83 @@ +""" +/* + * EJERCICIO: + * He presentado mi proyecto más importante del año: mouredev pro. + * Un campus para la comunidad, que lanzaré en octubre, donde estudiar + * programación de una manera diferente. + * Cualquier persona suscrita a la newsletter de https://mouredev.pro + * accederá a sorteos mensuales de suscripciones, regalos y descuentos. + * + * Desarrolla un programa que lea los registros de un fichero .csv y + * seleccione de manera aleatoria diferentes ganadores. + * Requisitos: + * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + * o "inactivo" (y datos ficticios). + * Ejemplo: 1 | test@test.com | activo + * 2 | test2@test.com | inactivo + * (El .csv no debe subirse como parte de la corrección) + * 2. Recupera los datos desde el programa y selecciona email aleatorios. + * Acciones: + * 1. Accede al fichero .csv y selecciona de manera aleatoria un email + * ganador de una suscripción, otro ganador de un descuento y un último + * ganador de un libro (sólo si tiene status "activo" y no está repetido). + * 2. Muestra los emails ganadores y su id. + * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + * no debe tenerse en cuenta. + */ +""" +import csv +from random import choice + +nombre_csv = "roadmap/38 - MOUREDEV PRO/python/Prueba.csv" + +class Archivo: + def __init__(self,nombre,delimitador): + self.nombre = nombre + self.delimitador = delimitador + + def sorteo(self): + self.leer_csv() + Ganadores.seleccionar_ganador(Ganadores) + + def leer_csv(self): + with open(self.nombre,"r") as archivo: + lector = csv.reader(archivo,delimiter=self.delimitador) + lector = list(lector) + for row in lector[1::]: + id,email,status = row + Ganadores(id,email,status) + + print(f"{id} Email: {email} Status: {status}") + +class Ganadores: + lista_participantes = [] + lista_ganadores = [] + def __init__(self,id,email,status): + self.id = id + self.email = email + self.status = status + if self.status == "activo": + Ganadores.lista_participantes.append(self) + + def seleccionar_ganador(self): + print() + print("Sorteo de MoureDev Pro") + while len(Ganadores.lista_ganadores) < 3: + participante = choice(Ganadores.lista_participantes) + if participante not in Ganadores.lista_ganadores: + Ganadores.lista_ganadores.append(participante) + else: + continue + self.ganador_libro = Ganadores.lista_ganadores[0] + self.ganador_descuento = Ganadores.lista_ganadores[1] + self.subscripcion = Ganadores.lista_ganadores[2] + + print(f"Ganador de la subscripción: ID: {self.subscripcion.id} Email: {self.subscripcion.email}") + print(f"Ganador del descuento: ID: {self.ganador_descuento.id} Email: {self.ganador_descuento.email}") + print(f"Ganador del libro: ID: {self.ganador_libro.id} Email: {self.ganador_libro.email}") + +# Pruebas +prueba = Archivo(nombre_csv,delimitador="|") +prueba.leer_csv() + +prueba.sorteo() \ No newline at end of file From 9d0a08499d1db34bd1c9bfdbe6cdce31f00877bc Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Fri, 20 Sep 2024 13:11:40 +0200 Subject: [PATCH 430/539] #08 java --- Roadmap/08 - CLASES/java/eulogioep.java | 121 ++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 Roadmap/08 - CLASES/java/eulogioep.java diff --git a/Roadmap/08 - CLASES/java/eulogioep.java b/Roadmap/08 - CLASES/java/eulogioep.java new file mode 100644 index 0000000000..318ee65a17 --- /dev/null +++ b/Roadmap/08 - CLASES/java/eulogioep.java @@ -0,0 +1,121 @@ +// Ejemplo de una clase en Java + +/** + * Clase Persona que representa a una persona con nombre y edad. + */ +public class Persona { + // Atributos de la clase + private String nombre; + private int edad; + + // Constructor (inicializador) + public Persona(String nombre, int edad) { + this.nombre = nombre; + this.edad = edad; + } + + // Métodos getter y setter + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public int getEdad() { + return edad; + } + + public void setEdad(int edad) { + this.edad = edad; + } + + // Método para imprimir los datos de la persona + public void imprimirDatos() { + System.out.println("Nombre: " + nombre + ", Edad: " + edad); + } +} + +/** + * Clase Pila que implementa una estructura de datos de tipo pila (LIFO). + */ +public class Pila { + private java.util.LinkedList elementos; + + public Pila() { + elementos = new java.util.LinkedList<>(); + } + + public void push(T elemento) { + elementos.push(elemento); + } + + public T pop() { + return elementos.pop(); + } + + public int size() { + return elementos.size(); + } + + public void imprimirContenido() { + System.out.println("Contenido de la pila: " + elementos); + } +} + +/** + * Clase Cola que implementa una estructura de datos de tipo cola (FIFO). + */ +public class Cola { + private java.util.LinkedList elementos; + + public Cola() { + elementos = new java.util.LinkedList<>(); + } + + public void enqueue(T elemento) { + elementos.addLast(elemento); + } + + public T dequeue() { + return elementos.removeFirst(); + } + + public int size() { + return elementos.size(); + } + + public void imprimirContenido() { + System.out.println("Contenido de la cola: " + elementos); + } +} + +// Clase principal para probar las implementaciones +public class eulogioep { + public static void main(String[] args) { + // Prueba de la clase Persona + Persona persona = new Persona("Juan", 30); + persona.imprimirDatos(); + persona.setEdad(31); + persona.imprimirDatos(); + + // Prueba de la Pila + Pila pila = new Pila<>(); + pila.push(1); + pila.push(2); + pila.push(3); + pila.imprimirContenido(); + System.out.println("Elemento extraído de la pila: " + pila.pop()); + pila.imprimirContenido(); + + // Prueba de la Cola + Cola cola = new Cola<>(); + cola.enqueue("A"); + cola.enqueue("B"); + cola.enqueue("C"); + cola.imprimirContenido(); + System.out.println("Elemento extraído de la cola: " + cola.dequeue()); + cola.imprimirContenido(); + } +} \ No newline at end of file From 54824d24f8d4dfe0bc575a35f1d3d99ee7722ae9 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Fri, 20 Sep 2024 13:12:24 +0200 Subject: [PATCH 431/539] #08 javascript --- Roadmap/08 - CLASES/javascript/eulogioep.js | 119 ++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 Roadmap/08 - CLASES/javascript/eulogioep.js diff --git a/Roadmap/08 - CLASES/javascript/eulogioep.js b/Roadmap/08 - CLASES/javascript/eulogioep.js new file mode 100644 index 0000000000..597894457b --- /dev/null +++ b/Roadmap/08 - CLASES/javascript/eulogioep.js @@ -0,0 +1,119 @@ +// Ejemplo de una clase en JavaScript + +/** + * Clase Persona que representa a una persona con nombre y edad. + */ +class Persona { + // Constructor + constructor(nombre, edad) { + this.nombre = nombre; + this.edad = edad; + } + + // Métodos getter y setter + getNombre() { + return this.nombre; + } + + setNombre(nombre) { + this.nombre = nombre; + } + + getEdad() { + return this.edad; + } + + setEdad(edad) { + this.edad = edad; + } + + // Método para imprimir los datos de la persona + imprimirDatos() { + console.log(`Nombre: ${this.nombre}, Edad: ${this.edad}`); + } +} + +/** + * Clase Pila que implementa una estructura de datos de tipo pila (LIFO). + */ +class Pila { + constructor() { + this.elementos = []; + } + + push(elemento) { + this.elementos.push(elemento); + } + + pop() { + if (this.elementos.length === 0) { + return "La pila está vacía"; + } + return this.elementos.pop(); + } + + size() { + return this.elementos.length; + } + + imprimirContenido() { + console.log("Contenido de la pila:", this.elementos); + } +} + +/** + * Clase Cola que implementa una estructura de datos de tipo cola (FIFO). + */ +class Cola { + constructor() { + this.elementos = []; + } + + enqueue(elemento) { + this.elementos.push(elemento); + } + + dequeue() { + if (this.elementos.length === 0) { + return "La cola está vacía"; + } + return this.elementos.shift(); + } + + size() { + return this.elementos.length; + } + + imprimirContenido() { + console.log("Contenido de la cola:", this.elementos); + } +} + +// Pruebas de las implementaciones +function main() { + // Prueba de la clase Persona + const persona = new Persona("Juan", 30); + persona.imprimirDatos(); + persona.setEdad(31); + persona.imprimirDatos(); + + // Prueba de la Pila + const pila = new Pila(); + pila.push(1); + pila.push(2); + pila.push(3); + pila.imprimirContenido(); + console.log("Elemento extraído de la pila:", pila.pop()); + pila.imprimirContenido(); + + // Prueba de la Cola + const cola = new Cola(); + cola.enqueue("A"); + cola.enqueue("B"); + cola.enqueue("C"); + cola.imprimirContenido(); + console.log("Elemento extraído de la cola:", cola.dequeue()); + cola.imprimirContenido(); +} + +main(); \ No newline at end of file From f6bf75f7009ad68feaf2b99242003e280c085705 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Fri, 20 Sep 2024 13:13:09 +0200 Subject: [PATCH 432/539] #08 php --- Roadmap/08 - CLASES/php/eulogioep.php | 129 ++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 Roadmap/08 - CLASES/php/eulogioep.php diff --git a/Roadmap/08 - CLASES/php/eulogioep.php b/Roadmap/08 - CLASES/php/eulogioep.php new file mode 100644 index 0000000000..b6c84ce4ab --- /dev/null +++ b/Roadmap/08 - CLASES/php/eulogioep.php @@ -0,0 +1,129 @@ +nombre = $nombre; + $this->edad = $edad; + } + + // Métodos getter y setter + public function getNombre() { + return $this->nombre; + } + + public function setNombre($nombre) { + $this->nombre = $nombre; + } + + public function getEdad() { + return $this->edad; + } + + public function setEdad($edad) { + $this->edad = $edad; + } + + // Método para imprimir los datos de la persona + public function imprimirDatos() { + echo "Nombre: {$this->nombre}, Edad: {$this->edad}\n"; + } +} + +/** + * Clase Pila que implementa una estructura de datos de tipo pila (LIFO). + */ +class Pila { + private $elementos; + + public function __construct() { + $this->elementos = array(); + } + + public function push($elemento) { + array_push($this->elementos, $elemento); + } + + public function pop() { + if (empty($this->elementos)) { + return "La pila está vacía"; + } + return array_pop($this->elementos); + } + + public function size() { + return count($this->elementos); + } + + public function imprimirContenido() { + echo "Contenido de la pila: " . implode(', ', $this->elementos) . "\n"; + } +} + +/** + * Clase Cola que implementa una estructura de datos de tipo cola (FIFO). + */ +class Cola { + private $elementos; + + public function __construct() { + $this->elementos = array(); + } + + public function enqueue($elemento) { + array_push($this->elementos, $elemento); + } + + public function dequeue() { + if (empty($this->elementos)) { + return "La cola está vacía"; + } + return array_shift($this->elementos); + } + + public function size() { + return count($this->elementos); + } + + public function imprimirContenido() { + echo "Contenido de la cola: " . implode(', ', $this->elementos) . "\n"; + } +} + +// Función principal para probar las implementaciones +function main() { + // Prueba de la clase Persona + $persona = new Persona("Juan", 30); + $persona->imprimirDatos(); + $persona->setEdad(31); + $persona->imprimirDatos(); + + // Prueba de la Pila + $pila = new Pila(); + $pila->push(1); + $pila->push(2); + $pila->push(3); + $pila->imprimirContenido(); + echo "Elemento extraído de la pila: " . $pila->pop() . "\n"; + $pila->imprimirContenido(); + + // Prueba de la Cola + $cola = new Cola(); + $cola->enqueue("A"); + $cola->enqueue("B"); + $cola->enqueue("C"); + $cola->imprimirContenido(); + echo "Elemento extraído de la cola: " . $cola->dequeue() . "\n"; + $cola->imprimirContenido(); +} + +// Ejecutar la función principal +main(); + +?> \ No newline at end of file From 0f955f35a5914e17b7a7b3d642834dba0964b7c7 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Fri, 20 Sep 2024 13:13:48 +0200 Subject: [PATCH 433/539] #08 typescript --- Roadmap/08 - CLASES/typescript/eulogioep.ts | 120 ++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 Roadmap/08 - CLASES/typescript/eulogioep.ts diff --git a/Roadmap/08 - CLASES/typescript/eulogioep.ts b/Roadmap/08 - CLASES/typescript/eulogioep.ts new file mode 100644 index 0000000000..5fb0e63ec6 --- /dev/null +++ b/Roadmap/08 - CLASES/typescript/eulogioep.ts @@ -0,0 +1,120 @@ +// Ejemplo de una clase en TypeScript + +/** + * Clase Persona que representa a una persona con nombre y edad. + */ +class Persona { + private nombre: string; + private edad: number; + + constructor(nombre: string, edad: number) { + this.nombre = nombre; + this.edad = edad; + } + + // Métodos getter y setter + getNombre(): string { + return this.nombre; + } + + setNombre(nombre: string): void { + this.nombre = nombre; + } + + getEdad(): number { + return this.edad; + } + + setEdad(edad: number): void { + this.edad = edad; + } + + // Método para imprimir los datos de la persona + imprimirDatos(): void { + console.log(`Nombre: ${this.nombre}, Edad: ${this.edad}`); + } +} + +/** + * Clase Pila que implementa una estructura de datos de tipo pila (LIFO). + */ +class Pila { + private elementos: T[]; + + constructor() { + this.elementos = []; + } + + push(elemento: T): void { + this.elementos.push(elemento); + } + + pop(): T | undefined { + return this.elementos.pop(); + } + + size(): number { + return this.elementos.length; + } + + imprimirContenido(): void { + console.log("Contenido de la pila:", this.elementos); + } +} + +/** + * Clase Cola que implementa una estructura de datos de tipo cola (FIFO). + */ +class Cola { + private elementos: T[]; + + constructor() { + this.elementos = []; + } + + enqueue(elemento: T): void { + this.elementos.push(elemento); + } + + dequeue(): T | undefined { + return this.elementos.shift(); + } + + size(): number { + return this.elementos.length; + } + + imprimirContenido(): void { + console.log("Contenido de la cola:", this.elementos); + } +} + +// Función principal para probar las implementaciones +function main(): void { + // Prueba de la clase Persona + const persona = new Persona("Juan", 30); + persona.imprimirDatos(); + persona.setEdad(31); + persona.imprimirDatos(); + + // Prueba de la Pila + const pila = new Pila(); + pila.push(1); + pila.push(2); + pila.push(3); + pila.imprimirContenido(); + console.log("Elemento extraído de la pila:", pila.pop()); + pila.imprimirContenido(); + + // Prueba de la Cola + const cola = new Cola(); + cola.enqueue("A"); + cola.enqueue("B"); + cola.enqueue("C"); + cola.imprimirContenido(); + console.log("Elemento extraído de la cola:", cola.dequeue()); + cola.imprimirContenido(); +} + +// Ejecutar la función principal +main(); \ No newline at end of file From 70fadd88cf2214aabaa5800c08dc19448ba6d22d Mon Sep 17 00:00:00 2001 From: Juan Pablo Patino Lopez Date: Fri, 20 Sep 2024 16:42:09 +0200 Subject: [PATCH 434/539] Juanppdev - Reto #38 - Python --- Roadmap/38 - MOUREDEV PRO/python/Juanppdev.py | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/Juanppdev.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/Juanppdev.py b/Roadmap/38 - MOUREDEV PRO/python/Juanppdev.py new file mode 100644 index 0000000000..c29458d32c --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/Juanppdev.py @@ -0,0 +1,52 @@ +""" + * EJERCICIO: + * He presentado mi proyecto más importante del año: mouredev pro. + * Un campus para la comunidad, que lanzaré en octubre, donde estudiar + * programación de una manera diferente. + * Cualquier persona suscrita a la newsletter de https://mouredev.pro + * accederá a sorteos mensuales de suscripciones, regalos y descuentos. + * + * Desarrolla un programa que lea los registros de un fichero .csv y + * seleccione de manera aleatoria diferentes ganadores. + * Requisitos: + * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + * o "inactivo" (y datos ficticios). + * Ejemplo: 1 | test@test.com | activo + * 2 | test2@test.com | inactivo + * (El .csv no debe subirse como parte de la corrección) + * 2. Recupera los datos desde el programa y selecciona email aleatorios. + * Acciones: + * 1. Accede al fichero .csv y selecciona de manera aleatoria un email + * ganador de una suscripción, otro ganador de un descuento y un último + * ganador de un libro (sólo si tiene status "activo" y no está repetido). + * 2. Muestra los emails ganadores y su id. + * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + * no debe tenerse en cuenta. +""" + +import csv +import random + +# Leer el archivo CSV +def leer_csv(filename): + with open(filename, mode='r') as file: + reader = csv.DictReader(file) + return [row for row in reader] + +# Seleccionar ganadores aleatorios +def seleccionar_ganadores(suscriptores): + activos = [s for s in suscriptores if s['status'] == 'activo'] + ganadores = random.sample(activos, 3) + return ganadores + +# Mostrar los ganadores +def mostrar_ganadores(ganadores): + premios = ['suscripción', 'descuento', 'libro'] + for ganador, premio in zip(ganadores, premios): + print(f"Ganador de {premio}: ID {ganador['id']}, Email {ganador['email']}") + +# Main +if __name__ == "__main__": + suscriptores = leer_csv('d:/Proyectos Github/roadmap-retos-programacion/Roadmap/38 - MOUREDEV PRO/python/suscriptores.csv') + ganadores = seleccionar_ganadores(suscriptores) + mostrar_ganadores(ganadores) From 6faa5a09887d0fa0e80b235f2fd8f583288c5194 Mon Sep 17 00:00:00 2001 From: javitron100 <86791160+javitron100@users.noreply.github.com> Date: Fri, 20 Sep 2024 16:48:59 +0200 Subject: [PATCH 435/539] #04 - Python --- .../python/javitron100.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Roadmap/04 - CADENAS DE CARACTERES/python/javitron100.py diff --git a/Roadmap/04 - CADENAS DE CARACTERES/python/javitron100.py b/Roadmap/04 - CADENAS DE CARACTERES/python/javitron100.py new file mode 100644 index 0000000000..a30e962d13 --- /dev/null +++ b/Roadmap/04 - CADENAS DE CARACTERES/python/javitron100.py @@ -0,0 +1,70 @@ +# 04 - CADENAS DE CARACTERES + +mi_cadena = "Hola mi nombre es Javier, estoy aprendiendo Python con retos de programación" + +print(mi_cadena[3]) +print(mi_cadena[0:4]) +print("Longitud de la cadena: " + str(len(mi_cadena))) +print(mi_cadena * 3) + +for caracter in mi_cadena: + print(caracter) + +print(mi_cadena.upper()) +print(mi_cadena.lower()) +print(mi_cadena.capitalize()) + +print(mi_cadena.replace("javier", "Javier")) + +mi_lista = mi_cadena.split(" ") +print(mi_lista) +print(type(mi_lista)) +texto="" +for i in mi_lista: + texto = texto + i + " " +print(texto) + +lenguaje = "Python" +print(f"Hola {lenguaje}!") + +if lenguaje == "Python": + print("El lenguaje es Python") + +mi_cadena = "AAAAAaaaaa" +if mi_cadena.isalpha(): + print("Cadena contiene sólo caracteres") + +mi_cadena = "12345" +if mi_cadena.isnumeric(): + print("Cadena contiene sólo números") + + +""" +DIFICULTAD EXTRA (opcional): + * Crea un programa que analice dos palabras diferentes y realice comprobaciones + * para descubrir si son: + * - Palíndromos + * - Anagramas + * - Isogramas +""" +primera_palabra = "" +segunda_palabra = "" + +while primera_palabra == segunda_palabra: + print("Introduce dos palabras, tienen que ser distintas") + primera_palabra = input("Primera palabra: ") + segunda_palabra = input("Segunda palabra: ") + + +if primera_palabra == segunda_palabra[::-1]: + print("Palindromos") + +if ''.join(sorted(primera_palabra)) == ''.join(sorted(segunda_palabra)): + print("Anagramas") + +isograma = True +for letra in primera_palabra: + if primera_palabra.count(letra) > 1: + isograma = False + +if isograma: print("La primera palabra es un isograma") \ No newline at end of file From 09a304eef4121ced2962204342872d36156e7963 Mon Sep 17 00:00:00 2001 From: Parababire Date: Fri, 20 Sep 2024 12:21:39 -0400 Subject: [PATCH 436/539] #25 - Javascript --- .../28 - SOLID LSP/javascript/parababire.js | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 Roadmap/28 - SOLID LSP/javascript/parababire.js diff --git a/Roadmap/28 - SOLID LSP/javascript/parababire.js b/Roadmap/28 - SOLID LSP/javascript/parababire.js new file mode 100644 index 0000000000..fe1d1f1c6e --- /dev/null +++ b/Roadmap/28 - SOLID LSP/javascript/parababire.js @@ -0,0 +1,111 @@ +// Ejercicio + +/* Incorrecto */ + +/* class Ball { + bounce() { + console.log(`The ball bounce!!!`); + } +} + +class BowlingBall extends Ball { + bounce() { + throw new Error(`Bowling ball can't bounce!!!`) + } +} */ + +/* const ball = new Ball() +const bowlingBall = new BowlingBall() +ball.bounce() +bowlingBall.bounce() */ + +/* Correcto */ + +class Ball { + throw() { + console.log(`Throw the ball`); + } +} + +class BowlingBall extends Ball { + throw() { + console.log(`Throw the ball toward pins`); + } +} + +let ball = new Ball() +let bowlingBall = new BowlingBall() +ball.throw() +bowlingBall.throw() + +/* Comprobación del principio de sustitución de Likov */ + +ball = new BowlingBall() +bowlingBall = new Ball() +ball.throw() +bowlingBall.throw() + +// Extra + +class Vehicle { + constructor(speed = 0) { + this.speed = speed + } + + accelerate(increment) { + this.speed += increment + console.log(this.speed); + + } + break(decrement) { + this.speed -= decrement + if (this.speed <= 0) { + console.log(this.speed = 0) + } + console.log(this.speed) + } +} + +class Car extends Vehicle { + accelerate(increment) { + console.log(`El carro está acelerando`) + super.accelerate(increment) + } + break(decrement) { + console.log(`El carro está frenando`) + super.break(decrement) + } +} +class Bike extends Vehicle { + accelerate(increment) { + console.log(`La bicicleta está acelerando`) + super.accelerate(increment) + } + break(decrement) { + console.log(`La bicicleta está frenando`) + super.break(decrement) + } +} +class Motocycle extends Vehicle { + accelerate(increment) { + console.log(`La moto está acelerando`) + super.accelerate(increment) + } + break(decrement) { + console.log(`La moto está frenando`) + super.break(decrement) + } +} + +function testVehicle(vehicle) { + vehicle.accelerate(2) + vehicle.break(1) +} + +const car = new Car() +const bike = new Bike() +const motocycle = new Motocycle() + +testVehicle(car) +testVehicle(bike) +testVehicle(motocycle) \ No newline at end of file From 043e0659cd5536d9a1d15788781f2d75536bfe11 Mon Sep 17 00:00:00 2001 From: Nazhir Avila <100221089+NazhirAvila@users.noreply.github.com> Date: Fri, 20 Sep 2024 12:59:23 -0500 Subject: [PATCH 437/539] Create Nazhir_Avila_Reto1 --- .../java/Nazhir_Avila_Reto1 | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Nazhir_Avila_Reto1 diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Nazhir_Avila_Reto1 b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Nazhir_Avila_Reto1 new file mode 100644 index 0000000000..62915c5077 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Nazhir_Avila_Reto1 @@ -0,0 +1,37 @@ +package RetosJava; + +public class Reto1 { + + public static void main(String args[]) { + + //* - Crea un comentario en el código y coloca la URL del sitio web oficial del lenguaje de programación que has seleccionado. + + //https://www.java.com/es/ + /* + //https://www.java.com/es/ + */ + + //- Crea una variable (y una constante si el lenguaje lo soporta). + int variable1 = 0; + final int const1 = 1; + + //- Crea variables representando todos los tipos de datos primitivos del lenguaje (cadenas de texto, enteros, booleanos...). + + byte varByte = 127; + short varShort = 32767; + int varInt = 999999999; + long varLong = 999999999; + float varFloat = 1.26f; + double varDouble = 1.25; + boolean varBoolean = true; + boolean varBoolean2 = false; + char varChar = 'A'; + + //- Imprime por terminal el texto: "¡Hola, [y el nombre de tu lenguaje]!" + String varString ="Hola soy una variable de tipo String"; + + System.out.println("¡Hola JAVA!"); + + } + +} From 6f55cb6346284a0733643b5531708164f513ac4d Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 20 Sep 2024 12:43:54 -0600 Subject: [PATCH 438/539] aporte --- .../python/danielhdzr.py | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Roadmap/16 - EXPRESIONES REGULARES/python/danielhdzr.py diff --git a/Roadmap/16 - EXPRESIONES REGULARES/python/danielhdzr.py b/Roadmap/16 - EXPRESIONES REGULARES/python/danielhdzr.py new file mode 100644 index 0000000000..f08d85ade3 --- /dev/null +++ b/Roadmap/16 - EXPRESIONES REGULARES/python/danielhdzr.py @@ -0,0 +1,48 @@ +# #16 EXPRESIONES REGULARES +#### Dificultad: Media | Publicación: 15/04/24 | Corrección: 22/04/24 + +## Ejercicio + + +'''EJERCICIO: + * Utilizando tu lenguaje, explora el concepto de expresiones regulares, + * creando una que sea capaz de encontrar y extraer todos los números + * de un texto. + * + * DIFICULTAD EXTRA (opcional): + * Crea 3 expresiones regulares (a tu criterio) capaces de: + * - Validar un email. + * - Validar un número de teléfono. + * - Validar una url.''' + +import re +def main(): + + def validar_email(email) -> bool: + regex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' + return bool (re.match(regex, email)) + + # Ejemplo de uso + print(validar_email("ejemplo@dominio.com")) # True + print(validar_email("email_incorrecto@.com")) # False + + def validar_telefono(telefono) -> bool: + regex = r'^(\+?\d{1,3})?[-.\s]?\(?\d{1,4}\)?[-.\s]?\d{1,4}[-.\s]?\d{1,9}$' + return bool (re.match(regex, telefono)) + + # Ejemplo de uso + print(validar_telefono("+1-800-555-1234")) # True + print(validar_telefono("555-1234")) # True + print(validar_telefono("12345")) # False + + def validar_url(url) -> bool: + regex = r'^(https?:\/\/)?([a-zA-Z0-9.-]+)\.([a-zA-Z]{2,})([\/\w .-]*)*\/?$' + return bool (re.match(regex, url)) + + # Ejemplo de uso + print(validar_url("https://www.ejemplo.com")) # True + print(validar_url("http://ejemplo.com/path/to/resource")) # True + print(validar_url("www.ejemplo")) # False +if __name__=="__main__": + main() + From 8b8a4bc3bcedce3d89108c42f91ca5e1b9038ac5 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 20 Sep 2024 13:44:27 -0600 Subject: [PATCH 439/539] aporte --- Roadmap/17 - ITERACIONES/python/danielhdzr.py | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 Roadmap/17 - ITERACIONES/python/danielhdzr.py diff --git a/Roadmap/17 - ITERACIONES/python/danielhdzr.py b/Roadmap/17 - ITERACIONES/python/danielhdzr.py new file mode 100644 index 0000000000..14ae7cd3de --- /dev/null +++ b/Roadmap/17 - ITERACIONES/python/danielhdzr.py @@ -0,0 +1,64 @@ +# #17 ITERACIONES +#### Dificultad: Fácil | Publicación: 22/04/24 | Corrección: 29/04/24 + +''' +* EJERCICIO: + * Utilizando tu lenguaje, emplea 3 mecanismos diferentes para imprimir + * números del 1 al 10 mediante iteración. + * + * DIFICULTAD EXTRA (opcional): + * Escribe el mayor número de mecanismos que posea tu lenguaje + * para iterar valores. ¿Eres capaz de utilizar 5? ¿Y 10? +''' + +# Metodo 1 +lista_numeros = [1,2,3,4,5,6,7,8,9,10] +for i in lista_numeros: + print(i) +print("Fin de iteracion 1") + +# Metodo 2 +numero = 0 +while True: + numero += 1 + if numero <= 10: + print(numero) + else: + print("Fin de iteracion 2") + break + +# Metodo 3 +for i in range(10): + print(i+1) +print("Fin de iteracion 3") + +# Metodo 4 +numero = 10 +for i in range(1, numero+1): + print(i) +print("Fin de iteracion 4") + +# Metodo 5 +def iteracion(iter_num): + numeros = [] + for i in range(iter_num): + numeros.append(i) + for j in (numeros): + print(j+1) + return("Fin de iteracion 5") +print(iteracion(10)) + +numeros = 10 +print(*[i+1 for i in range(numeros)], sep="\n") +print("Fin de iteracion 6") + +for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: + print(i) +print("Fin de iteracion 7") + +for i in {1: "a", 2: "b", 3: "c", 4: "d", 5: "e", 6: "f", 7: "g", 8: "h", 9: "i", 10: "j"}.values(): + print(i) +print("Fin de iteracion 8") + +print(*[i for i in range(1, 11)], sep="\n") +print("Fin de iteracion 9") \ No newline at end of file From 2299fef28e4f6331c88714fb550f6c8bf5618084 Mon Sep 17 00:00:00 2001 From: LisandroArnodo Date: Fri, 20 Sep 2024 22:49:15 +0200 Subject: [PATCH 440/539] Create LisandroArnodo.py #00/python/LisandroArnodo.py --- .../python/LisandroArnodo.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/LisandroArnodo.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/LisandroArnodo.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/LisandroArnodo.py new file mode 100644 index 0000000000..d3206511ee --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/LisandroArnodo.py @@ -0,0 +1,28 @@ +# https://www.python.org/ + +#Esto es un comentario de una linea + + +""" +Esto es tambien un +comentario de +varias lineas +""" + +#Variables +my_variable = "Mi variable" +my_variable = "Nuevo valor de mi variable" + +#Las variables constantes no existen en Python pero se escriben en mayuscula por convesion + +MY_CONSTANT = "Mi variable constante" + +#Tipos primitivos de datos +my_int = 1 +my_float = 1.5 +my_boolean = True +my_boolean = False +my_string = "Mi cadena de texto" +my_other_tring = "Mi otra cadena de texto" + +print ("Mi primer Hola Mundo en Python") From 89077188a7c26d7d5ddbc4ce9e8d5f09cddbd8a8 Mon Sep 17 00:00:00 2001 From: Andres Pantigoso Date: Fri, 20 Sep 2024 17:09:26 -0400 Subject: [PATCH 441/539] #00 - c++ --- .../c++/andreessj.cpp | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/andreessj.cpp diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/andreessj.cpp b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/andreessj.cpp new file mode 100644 index 0000000000..fec43df2fc --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/andreessj.cpp @@ -0,0 +1,34 @@ +/* EJERCICIO : Crea un comentario en el código y coloca la URL del sitio web oficial del + lenguaje de programación que has seleccionado.Representa las diferentes sintaxis que existen de crear comentarios + en el lenguaje(en una línea, varias...) + .Crea una variable(y una constante si el lenguaje lo soporta) + .Crea variables representando todos los tipos de datos primitivos del lenguaje(cadenas de texto, enteros, booleanos...) + .Imprime por terminal el texto : "¡Hola, [y el nombre de tu lenguaje]!" */ + +#include +#include + +#define MaxValue 256 // Constante + +using namespace std; + +int main() +{ + int value = 3; // enteros + float pi = 3.14; // decimales + bool verdadero = true; // booleanos + bool falso = false; + char letter = 'a'; // de caracter + string hello = "Hola C++!\n"; // cadena de caracteres + + cout << hello; + + system("pause"); + return 0; +} + +/* +comentario +en varias +lineas +*/ From 25139ea9e3195b08ff0b93e6f087dbd1b770e336 Mon Sep 17 00:00:00 2001 From: Reddmar Quevedo Date: Fri, 20 Sep 2024 16:39:50 -0500 Subject: [PATCH 442/539] #00 - Javascript --- .../javascript/akaidmaru.js | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/akaidmaru.js diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/akaidmaru.js b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/akaidmaru.js new file mode 100644 index 0000000000..64b28fd18a --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/akaidmaru.js @@ -0,0 +1,22 @@ +// https://developer.mozilla.org/en-US/docs/Web/javascript + +// Esto es un comentario en Javascript + +/* + Esto también es un comentario, pero + en múltiples líneas. +*/ + +// Esto es una variable +let variable = "Soy una variable."; +const CONSTANTE = "Soy una constante."; + +let stringVar = "Soy un String."; +let integerVar = 230; +let bigIntegerVar = BigInt("12345678901234567890"); +let floatVar = 0.23; +let booleanVar = true; +let undefinedVar; +let symbolVar = Symbol("Redd"); + +console.log("¡Hola, Javascript!"); From 636827904c192c13b6d4345f2de94b6e8c344b49 Mon Sep 17 00:00:00 2001 From: hozlucas28 Date: Fri, 20 Sep 2024 20:59:01 -0300 Subject: [PATCH 443/539] Solution 37 - TypeScript --- .../typescript/hozlucas28.ts | 588 ++++++++++++++++++ 1 file changed, 588 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/typescript/hozlucas28.ts diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/typescript/hozlucas28.ts b/Roadmap/37 - OASIS VS LINKIN PARK/typescript/hozlucas28.ts new file mode 100644 index 0000000000..6556571e30 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/typescript/hozlucas28.ts @@ -0,0 +1,588 @@ +/* -------------------------------------------------------------------------- */ +/* SPOTIFY TYPES */ +/* -------------------------------------------------------------------------- */ + +export interface ArtistTopTracks { + readonly tracks: Track[] +} + +export interface Track { + readonly album: Album + readonly artists: Artist[] + readonly available_markets: string[] + readonly disc_number: number + readonly duration_ms: number + readonly explicit: boolean + readonly external_ids: ExternalIDS + readonly external_urls: ExternalUrls + readonly href: string + readonly id: string + readonly is_local: boolean + readonly is_playable: boolean + readonly name: string + readonly popularity: number + readonly preview_url: string + readonly track_number: number + readonly type: string + readonly uri: string +} + +export interface Album { + readonly album_type: string + readonly artists: Artist[] + readonly available_markets: string[] + readonly external_urls: ExternalUrls + readonly href: string + readonly id: string + readonly images: Image[] + readonly is_playable: boolean + readonly name: string + readonly release_date: Date + readonly release_date_precision: string + readonly total_tracks: number + readonly type: string + readonly uri: string +} + +export interface Token { + readonly access_token: string + readonly token_type: string + readonly expires_in: number +} + +export interface TokenError { + readonly error: string + readonly error_description: string +} + +export interface ArtistData { + readonly external_urls: ExternalUrls + readonly followers: Followers + readonly genres: string[] + readonly href: string + readonly id: string + readonly images: Image[] + readonly name: string + readonly popularity: number + readonly type: string + readonly uri: string +} + +export interface ExternalUrls { + readonly spotify: string +} + +export interface Followers { + readonly href: string + readonly total: number +} + +export interface Image { + readonly url: string + readonly height: number + readonly width: number +} + +export interface SearchData { + readonly tracks: Tracks + readonly artists: Artists + readonly albums: Albums + readonly playlists: Playlists + readonly shows: Audiobooks + readonly episodes: Episodes + readonly audiobooks: Audiobooks +} + +export interface DataError { + readonly error: Error +} + +export interface Error { + readonly status: number + readonly message: string +} + +export interface Albums { + readonly href: string + readonly limit: number + readonly next: string + readonly offset: number + readonly previous: string + readonly total: number + readonly items: AlbumElement[] +} + +export interface AlbumElement { + readonly album_type: string + readonly total_tracks: number + readonly available_markets: string[] + readonly external_urls: ExternalUrls + readonly href: string + readonly id: string + readonly images: Image[] + readonly name: string + readonly release_date: string + readonly release_date_precision: string + readonly restrictions: Restrictions + readonly type: string + readonly uri: string + readonly artists: Artist[] +} + +export interface Artist { + readonly external_urls: ExternalUrls + readonly href: string + readonly id: string + readonly name: string + readonly type: string + readonly uri: string +} + +export interface Restrictions { + readonly reason: string +} + +export interface Artists { + readonly href: string + readonly limit: number + readonly next: string + readonly offset: number + readonly previous: string + readonly total: number + readonly items: ArtistsItem[] +} + +export interface ArtistsItem { + readonly external_urls: ExternalUrls + readonly followers: Followers + readonly genres: string[] + readonly href: string + readonly id: string + readonly images: Image[] + readonly name: string + readonly popularity: number + readonly type: string + readonly uri: string +} + +export interface Audiobooks { + readonly href: string + readonly limit: number + readonly next: string + readonly offset: number + readonly previous: string + readonly total: number + readonly items: AudiobooksItem[] +} + +export interface AudiobooksItem { + readonly authors?: Author[] + readonly available_markets: string[] + readonly copyrights: Copyright[] + readonly description: string + readonly html_description: string + readonly edition?: string + readonly explicit: boolean + readonly external_urls: ExternalUrls + readonly href: string + readonly id: string + readonly images: Image[] + readonly languages: string[] + readonly media_type: string + readonly name: string + readonly narrators?: Author[] + readonly publisher: string + readonly type: string + readonly uri: string + readonly total_chapters?: number + readonly is_externally_hosted?: boolean + readonly total_episodes?: number +} + +export interface Author { + readonly name: string +} + +export interface Copyright { + readonly text: string + readonly type: string +} + +export interface Episodes { + readonly href: string + readonly limit: number + readonly next: string + readonly offset: number + readonly previous: string + readonly total: number + readonly items: EpisodesItem[] +} + +export interface EpisodesItem { + readonly audio_preview_url: string + readonly description: string + readonly html_description: string + readonly duration_ms: number + readonly explicit: boolean + readonly external_urls: ExternalUrls + readonly href: string + readonly id: string + readonly images: Image[] + readonly is_externally_hosted: boolean + readonly is_playable: boolean + readonly language: string + readonly languages: string[] + readonly name: string + readonly release_date: Date + readonly release_date_precision: string + readonly resume_point: ResumePoint + readonly type: string + readonly uri: string + readonly restrictions: Restrictions +} + +export interface ResumePoint { + readonly fully_played: boolean + readonly resume_position_ms: number +} + +export interface Playlists { + readonly href: string + readonly limit: number + readonly next: string + readonly offset: number + readonly previous: string + readonly total: number + readonly items: PlaylistsItem[] +} + +export interface PlaylistsItem { + readonly collaborative: boolean + readonly description: string + readonly external_urls: ExternalUrls + readonly href: string + readonly id: string + readonly images: Image[] + readonly name: string + readonly owner: Owner + readonly public: boolean + readonly snapshot_id: string + readonly tracks: Followers + readonly type: string + readonly uri: string +} + +export interface Owner { + readonly external_urls: ExternalUrls + readonly followers: Followers + readonly href: string + readonly id: string + readonly type: string + readonly uri: string + readonly display_name: string +} + +export interface Tracks { + readonly href: string + readonly limit: number + readonly next: string + readonly offset: number + readonly previous: string + readonly total: number + readonly items: TracksItem[] +} + +export interface TracksItem { + readonly album: AlbumElement + readonly artists: Artist[] + readonly available_markets: string[] + readonly disc_number: number + readonly duration_ms: number + readonly explicit: boolean + readonly external_ids: ExternalIDS + readonly external_urls: ExternalUrls + readonly href: string + readonly id: string + readonly is_playable: boolean + readonly linked_from: LinkedFrom + readonly restrictions: Restrictions + readonly name: string + readonly popularity: number + readonly preview_url: string + readonly track_number: number + readonly type: string + readonly uri: string + readonly is_local: boolean +} + +export interface ExternalIDS { + readonly isrc: string +} + +export interface LinkedFrom {} + +/* -------------------------------------------------------------------------- */ +/* FUNCTIONS */ +/* -------------------------------------------------------------------------- */ + +function getTopTrack(tracks: Track[]): Track { + let topTrack: Track = tracks.splice(0, 1)[0] + + for (const track of tracks) { + if (track.popularity > topTrack.popularity) topTrack = track + } + + return topTrack +} + +interface FetchArtistDataParams { + artistID: string + token: string +} + +async function fetchArtistData({ + artistID, + token, +}: FetchArtistDataParams): Promise { + const url: string = `https://api.spotify.com/v1/artists/${artistID}` + + const headers: Record = { + Authorization: `Bearer ${token}`, + } + + const response: Response = await fetch(url, {method: 'GET', headers}) + const data: ArtistData | DataError = await response.json() + + if ('error' in data) + throw new Error(`${data.error.status}: ${data.error.message}`) + + return data +} + +interface FetchArtistIDParams { + fullName: string + token: string +} + +async function fetchArtistID({ + fullName, + token, +}: FetchArtistIDParams): Promise { + const urlBase: string = 'https://api.spotify.com/v1/search' + const urlSearchParams: URLSearchParams = new URLSearchParams({ + q: fullName, + type: 'artist', + limit: '1', + }) + const url: string = `${urlBase}?${urlSearchParams}` + + const headers: Record = { + Authorization: `Bearer ${token}`, + } + + const response: Response = await fetch(url, {method: 'GET', headers}) + const data: SearchData | DataError = await response.json() + + if ('error' in data) + throw new Error(`${data.error.status}: ${data.error.message}`) + + return data.artists.items[0].id +} + +interface FetchArtistTopTracksParams { + artistID: string + token: string +} + +async function fetchArtistTopTracks({ + artistID, + token, +}: FetchArtistTopTracksParams): Promise { + const url: string = `https://api.spotify.com/v1/artists/${artistID}/top-tracks` + + const headers: Record = { + Authorization: `Bearer ${token}`, + } + + const response: Response = await fetch(url, {method: 'GET', headers}) + const data: ArtistTopTracks | DataError = await response.json() + + if ('error' in data) + throw new Error(`${data.error.status}: ${data.error.message}`) + + return data +} + +async function fetchSpotifyToken(): Promise { + if (!process.env.SPOTIFY_API_CLIENT_ID) + throw new Error( + '`SPOTIFY_API_CLIENT_ID` (environment variable) is not defined' + ) + + if (!process.env.SPOTIFY_API_CLIENT_SECRET) + throw new Error( + '`SPOTIFY_API_CLIENT_SECRET` (environment variable) is not defined' + ) + + const url: string = 'https://accounts.spotify.com/api/token' + + const headers: Record = { + 'Content-Type': 'application/x-www-form-urlencoded', + } + + const clientID: string = process.env.SPOTIFY_API_CLIENT_ID + const clientSecret: string = process.env.SPOTIFY_API_CLIENT_SECRET + const body: string = `grant_type=client_credentials&client_id=${clientID}&client_secret=${clientSecret}` + + const response: Response = await fetch(url, {method: 'POST', headers, body}) + const data: Token | TokenError = await response.json() + + if ('error' in data) + throw new Error(`${data.error}: ${data.error_description}`) + + return data +} + +/* -------------------------------------------------------------------------- */ +/* MAIN */ +/* -------------------------------------------------------------------------- */ + +;(async () => { + const spotifyToken: Token = await fetchSpotifyToken() + + const bandNames = { + first: 'oasis', + second: 'linkin park', + } + + const firstBandID: string = await fetchArtistID({ + fullName: bandNames.first, + token: spotifyToken.access_token, + }) + + const firstBandData: ArtistData = await fetchArtistData({ + artistID: firstBandID, + token: spotifyToken.access_token, + }) + + const firstBandTopTracks: ArtistTopTracks = await fetchArtistTopTracks({ + artistID: firstBandID, + token: spotifyToken.access_token, + }) + + const firstBandTopTrack: Track = getTopTrack(firstBandTopTracks.tracks) + + const secondBandID: string = await fetchArtistID({ + fullName: bandNames.second, + token: spotifyToken.access_token, + }) + + const secondBandData: ArtistData = await fetchArtistData({ + artistID: secondBandID, + token: spotifyToken.access_token, + }) + + const secondBandTopTracks: ArtistTopTracks = await fetchArtistTopTracks({ + artistID: secondBandID, + token: spotifyToken.access_token, + }) + + const secondBandTopTrack: Track = getTopTrack(secondBandTopTracks.tracks) + + const pointsPerBand: Record = { + first: 0, + second: 0, + } + + console.log( + `> Which band is more popular (${firstBandData.name}, or ${secondBandData.name})?` + ) + + console.log('\n> Comparison of popularity...') + console.log( + `\n> Popularity of ${firstBandData.name}: ${firstBandData.popularity} points of popularity.` + ) + console.log( + `> Popularity of ${secondBandData.name}: ${secondBandData.popularity} points of popularity.` + ) + + if (firstBandData.popularity > secondBandData.popularity) { + console.log( + `> ${firstBandData.name} has more popularity points than ${secondBandData.name}.` + ) + pointsPerBand.first++ + } else if (firstBandData.popularity < secondBandData.popularity) { + console.log( + `> ${secondBandData.name} has more popularity points than ${firstBandData.name}.` + ) + pointsPerBand.second++ + } else { + console.log( + `> ${firstBandData.name} has the same popularity points than ${secondBandData.name}.` + ) + } + + console.log('\n> Comparison of followers...') + console.log( + `\n> Followers of ${firstBandData.name}: ${firstBandData.followers.total} followers.` + ) + console.log( + `> Followers of ${secondBandData.name}: ${secondBandData.followers.total} followers.` + ) + + if (firstBandData.followers.total > secondBandData.followers.total) { + console.log( + `> ${firstBandData.name} has more followers than ${secondBandData.name}.` + ) + pointsPerBand.first++ + } else if (firstBandData.followers.total < secondBandData.followers.total) { + console.log( + `> ${secondBandData.name} has more followers than ${firstBandData.name}.` + ) + pointsPerBand.second++ + } else { + console.log( + `> ${firstBandData.name} has the same number of followers than ${secondBandData.name}.` + ) + } + + console.log('\n> Comparison of top track of each band...') + console.log( + `\n> Top track of ${firstBandData.name} (name, and popularity): ${firstBandTopTrack.name} (${firstBandTopTrack.popularity} points of popularity).` + ) + console.log( + `> Top track of ${secondBandData.name} (name, and popularity): ${secondBandTopTrack.name} (${secondBandTopTrack.popularity} points of popularity).` + ) + + if (firstBandTopTrack.popularity > secondBandTopTrack.popularity) { + console.log( + `> ${firstBandTopTrack.name} of ${firstBandData.name} band is more popular than ${secondBandTopTrack.name} of ${secondBandData.name} band.` + ) + pointsPerBand.first++ + } else if (firstBandTopTrack.popularity < secondBandTopTrack.popularity) { + console.log( + `> ${secondBandTopTrack.name} of ${secondBandData.name} band is more popular than ${firstBandTopTrack.name} of ${firstBandData.name} band.` + ) + pointsPerBand.second++ + } else { + console.log( + `> ${secondBandTopTrack.name} of ${secondBandData.name} band has the same popularity points than ${firstBandTopTrack.name} of ${firstBandData.name} band.` + ) + } + + console.log('\n> In conclusion...') + + if (pointsPerBand.first > pointsPerBand.second) { + console.log( + `\n> ${firstBandData.name} band is more popular than ${secondBandData.name} band` + ) + } else if (pointsPerBand.first < pointsPerBand.second) { + console.log( + `\n> ${secondBandData.name} band is more popular than ${firstBandData.name} band` + ) + } else { + console.log( + `\n> ${firstBandData.name} band is as popular as ${secondBandData.name} band` + ) + } +})() From 3a80eb4ebaf448368b278d9bda11ca70ecbb14ec Mon Sep 17 00:00:00 2001 From: mouredev Date: Sat, 21 Sep 2024 00:15:03 +0000 Subject: [PATCH 444/539] Update stats --- Roadmap/stats.json | 1946 ++++++++++++++++++++++---------------------- 1 file changed, 979 insertions(+), 967 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index 78da978856..ddd0796d98 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,18 +1,18 @@ { "challenges_total": 39, "languages_total": 48, - "files_total": 7165, - "users_total": 1199, + "files_total": 7186, + "users_total": 1201, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1297 + "count": 1299 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 789 + "count": 790 }, { "order": 3, @@ -22,37 +22,37 @@ { "order": 4, "name": "03 - ESTRUCTURAS DE DATOS", - "count": 411 + "count": 412 }, { "order": 5, "name": "04 - CADENAS DE CARACTERES", - "count": 341 + "count": 342 }, { "order": 6, "name": "06 - RECURSIVIDAD", - "count": 321 + "count": 322 }, { "order": 7, "name": "05 - VALOR Y REFERENCIA", - "count": 294 + "count": 295 }, { "order": 8, "name": "07 - PILAS Y COLAS", - "count": 247 + "count": 252 }, { "order": 9, "name": "08 - CLASES", - "count": 231 + "count": 232 }, { "order": 10, "name": "09 - HERENCIA", - "count": 223 + "count": 224 }, { "order": 11, @@ -82,12 +82,12 @@ { "order": 16, "name": "16 - EXPRESIONES REGULARES", - "count": 127 + "count": 128 }, { "order": 17, "name": "15 - ASINCRON\u00cdA", - "count": 126 + "count": 127 }, { "order": 18, @@ -157,7 +157,7 @@ { "order": 31, "name": "32 - BATALLA DEADPOOL Y WOLVERINE", - "count": 51 + "count": 52 }, { "order": 32, @@ -167,7 +167,7 @@ { "order": 33, "name": "33 - RESCATANDO A MICKEY", - "count": 44 + "count": 45 }, { "order": 34, @@ -192,68 +192,68 @@ { "order": 38, "name": "37 - OASIS VS LINKIN PARK", - "count": 31 + "count": 32 }, { "order": 39, "name": "38 - MOUREDEV PRO", - "count": 20 + "count": 22 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 3084, - "percentage": 43.04 + "count": 3095, + "percentage": 43.07 }, { "order": 2, "name": "javascript", - "count": 1410, + "count": 1414, "percentage": 19.68 }, { "order": 3, "name": "java", - "count": 663, - "percentage": 9.25 + "count": 667, + "percentage": 9.28 }, { "order": 4, "name": "typescript", - "count": 322, + "count": 323, "percentage": 4.49 }, { "order": 5, "name": "c#", "count": 260, - "percentage": 3.63 + "percentage": 3.62 }, { "order": 6, "name": "kotlin", "count": 222, - "percentage": 3.1 + "percentage": 3.09 }, { "order": 7, "name": "go", "count": 217, - "percentage": 3.03 + "percentage": 3.02 }, { "order": 8, "name": "swift", "count": 167, - "percentage": 2.33 + "percentage": 2.32 }, { "order": 9, "name": "php", - "count": 162, - "percentage": 2.26 + "count": 163, + "percentage": 2.27 }, { "order": 10, @@ -265,13 +265,13 @@ "order": 11, "name": "rust", "count": 115, - "percentage": 1.61 + "percentage": 1.6 }, { "order": 12, "name": "c", "count": 70, - "percentage": 0.98 + "percentage": 0.97 }, { "order": 13, @@ -541,15 +541,15 @@ }, { "order": 9, - "name": "blackriper", - "count": 70, - "languages": 2 + "name": "eulogioep", + "count": 71, + "languages": 6 }, { "order": 10, - "name": "eulogioep", - "count": 67, - "languages": 6 + "name": "blackriper", + "count": 70, + "languages": 2 }, { "order": 11, @@ -595,33 +595,33 @@ }, { "order": 18, - "name": "jesusway69", + "name": "juanppdev", "count": 49, - "languages": 2 + "languages": 3 }, { "order": 19, - "name": "raulg91", + "name": "jesusway69", "count": 49, "languages": 2 }, { "order": 20, - "name": "ricjdev", + "name": "raulg91", "count": 49, "languages": 2 }, { "order": 21, - "name": "amadorquispe", + "name": "ricjdev", "count": 49, "languages": 2 }, { "order": 22, - "name": "juanppdev", - "count": 48, - "languages": 3 + "name": "amadorquispe", + "count": 49, + "languages": 2 }, { "order": 23, @@ -679,49 +679,49 @@ }, { "order": 32, - "name": "mouredev", + "name": "emmanuelmmontesinos", "count": 38, "languages": 1 }, { "order": 33, - "name": "qv1ko", - "count": 37, - "languages": 4 + "name": "mouredev", + "count": 38, + "languages": 1 }, { "order": 34, - "name": "raynerpv2022", - "count": 37, - "languages": 2 + "name": "asjordi", + "count": 38, + "languages": 1 }, { "order": 35, - "name": "luishendrix92", + "name": "qv1ko", "count": 37, - "languages": 2 + "languages": 4 }, { "order": 36, - "name": "soohav", + "name": "raynerpv2022", "count": 37, - "languages": 1 + "languages": 2 }, { "order": 37, - "name": "emmanuelmmontesinos", + "name": "luishendrix92", "count": 37, - "languages": 1 + "languages": 2 }, { "order": 38, - "name": "rauldoezon", + "name": "soohav", "count": 37, "languages": 1 }, { "order": 39, - "name": "asjordi", + "name": "rauldoezon", "count": 37, "languages": 1 }, @@ -763,15 +763,15 @@ }, { "order": 46, - "name": "worlion", - "count": 33, - "languages": 2 + "name": "adra-dev", + "count": 34, + "languages": 1 }, { "order": 47, - "name": "adra-dev", + "name": "worlion", "count": 33, - "languages": 1 + "languages": 2 }, { "order": 48, @@ -1057,49 +1057,49 @@ }, { "order": 95, - "name": "raulfauli", + "name": "martinbohorquez", "count": 17, "languages": 2 }, { "order": 96, - "name": "hyromy", + "name": "raulfauli", "count": 17, - "languages": 1 + "languages": 2 }, { "order": 97, - "name": "andreavzqz", + "name": "hyromy", "count": 17, "languages": 1 }, { "order": 98, - "name": "rxvlc", - "count": 16, - "languages": 3 + "name": "andreavzqz", + "count": 17, + "languages": 1 }, { "order": 99, - "name": "mariovelascodev", + "name": "rxvlc", "count": 16, - "languages": 2 + "languages": 3 }, { "order": 100, - "name": "sergiogi99", + "name": "mariovelascodev", "count": 16, "languages": 2 }, { "order": 101, - "name": "tofedev", + "name": "sergiogi99", "count": 16, "languages": 2 }, { "order": 102, - "name": "martinbohorquez", + "name": "tofedev", "count": 16, "languages": 2 }, @@ -1117,75 +1117,75 @@ }, { "order": 105, - "name": "mvidalb", + "name": "juanchernandezdev", "count": 16, "languages": 1 }, { "order": 106, - "name": "artickun", + "name": "mvidalb", "count": 16, "languages": 1 }, { "order": 107, - "name": "kontroldev", + "name": "artickun", "count": 16, "languages": 1 }, { "order": 108, - "name": "kuroz00", - "count": 15, - "languages": 3 + "name": "kontroldev", + "count": 16, + "languages": 1 }, { "order": 109, - "name": "eugeniasoria", + "name": "kuroz00", "count": 15, - "languages": 2 + "languages": 3 }, { "order": 110, - "name": "alvaro-neyra", + "name": "jesuses1312", "count": 15, - "languages": 2 + "languages": 3 }, { "order": 111, - "name": "juanchernandezdev", + "name": "eugeniasoria", "count": 15, - "languages": 1 + "languages": 2 }, { "order": 112, - "name": "seandsun", + "name": "alvaro-neyra", "count": 15, - "languages": 1 + "languages": 2 }, { "order": 113, - "name": "jafeito", + "name": "seandsun", "count": 15, "languages": 1 }, { "order": 114, - "name": "sniker1223", - "count": 14, - "languages": 4 + "name": "jafeito", + "count": 15, + "languages": 1 }, { "order": 115, - "name": "redom69", + "name": "sniker1223", "count": 14, "languages": 4 }, { "order": 116, - "name": "jesuses1312", + "name": "redom69", "count": 14, - "languages": 3 + "languages": 4 }, { "order": 117, @@ -1645,823 +1645,823 @@ }, { "order": 193, - "name": "omarland", + "name": "nicoheguaburu", "count": 9, "languages": 1 }, { "order": 194, - "name": "cmejiajulian", + "name": "omarland", "count": 9, "languages": 1 }, { "order": 195, - "name": "karys4", + "name": "cmejiajulian", "count": 9, "languages": 1 }, { "order": 196, - "name": "brockar", + "name": "karys4", "count": 9, "languages": 1 }, { "order": 197, - "name": "sperezsa", + "name": "brockar", "count": 9, "languages": 1 }, { "order": 198, + "name": "sperezsa", + "count": 9, + "languages": 1 + }, + { + "order": 199, "name": "pakiuh", "count": 8, "languages": 4 }, { - "order": 199, + "order": 200, "name": "angel-delg", "count": 8, "languages": 4 }, { - "order": 200, + "order": 201, "name": "pcosin", "count": 8, "languages": 2 }, { - "order": 201, + "order": 202, "name": "ansuzgs", "count": 8, "languages": 2 }, { - "order": 202, + "order": 203, "name": "xmunder", "count": 8, "languages": 2 }, { - "order": 203, + "order": 204, "name": "jtrujilloalcocer", "count": 8, "languages": 1 }, { - "order": 204, + "order": 205, "name": "linerlander", "count": 8, "languages": 1 }, { - "order": 205, + "order": 206, "name": "zequy40", "count": 8, "languages": 1 }, { - "order": 206, + "order": 207, "name": "toral24", "count": 8, "languages": 1 }, { - "order": 207, + "order": 208, "name": "abelperezcollado", "count": 8, "languages": 1 }, { - "order": 208, + "order": 209, "name": "matitc", "count": 8, "languages": 1 }, { - "order": 209, + "order": 210, "name": "jaxi86", "count": 8, "languages": 1 }, { - "order": 210, + "order": 211, "name": "isj-code", "count": 8, "languages": 1 }, { - "order": 211, + "order": 212, "name": "vid92", "count": 8, "languages": 1 }, { - "order": 212, + "order": 213, "name": "westwbn", "count": 8, "languages": 1 }, { - "order": 213, + "order": 214, "name": "srvariable", "count": 8, "languages": 1 }, { - "order": 214, + "order": 215, "name": "cyberdidac", "count": 8, "languages": 1 }, { - "order": 215, + "order": 216, "name": "bytecodesky", "count": 8, "languages": 1 }, { - "order": 216, + "order": 217, "name": "darubiano", "count": 7, "languages": 7 }, { - "order": 217, + "order": 218, "name": "nwpablodeveloper", "count": 7, "languages": 3 }, { - "order": 218, + "order": 219, "name": "cubandeveloper89", "count": 7, "languages": 3 }, { - "order": 219, + "order": 220, "name": "younes0-0", "count": 7, "languages": 2 }, { - "order": 220, + "order": 221, "name": "h4ckxel", "count": 7, "languages": 2 }, { - "order": 221, + "order": 222, "name": "danielbelenguer", "count": 7, "languages": 2 }, { - "order": 222, + "order": 223, "name": "dgrex", "count": 7, "languages": 1 }, { - "order": 223, + "order": 224, "name": "franvozzi", "count": 7, "languages": 1 }, { - "order": 224, + "order": 225, "name": "abrahamraies", "count": 7, "languages": 1 }, { - "order": 225, + "order": 226, "name": "ocandodev", "count": 7, "languages": 1 }, { - "order": 226, + "order": 227, "name": "marinaortells", "count": 7, "languages": 1 }, { - "order": 227, + "order": 228, "name": "18miguelgalarza", "count": 7, "languages": 1 }, { - "order": 228, + "order": 229, "name": "ldre3", "count": 7, "languages": 1 }, { - "order": 229, + "order": 230, "name": "mtirador", "count": 7, "languages": 1 }, { - "order": 230, + "order": 231, "name": "alextc35", "count": 7, "languages": 1 }, { - "order": 231, + "order": 232, "name": "albertomorilla", "count": 7, "languages": 1 }, { - "order": 232, + "order": 233, "name": "hectordbh", "count": 7, "languages": 1 }, { - "order": 233, + "order": 234, + "name": "glossypath", + "count": 7, + "languages": 1 + }, + { + "order": 235, "name": "fidelysla", "count": 6, "languages": 3 }, { - "order": 234, + "order": 236, "name": "curtobrull", "count": 6, "languages": 3 }, { - "order": 235, + "order": 237, "name": "luisk0706", "count": 6, "languages": 2 }, { - "order": 236, + "order": 238, "name": "luterfloyd", "count": 6, "languages": 2 }, { - "order": 237, + "order": 239, "name": "danilo0203", "count": 6, "languages": 2 }, { - "order": 238, + "order": 240, "name": "rserradev", "count": 6, "languages": 2 }, { - "order": 239, + "order": 241, "name": "kronstadt-lambda", "count": 6, "languages": 2 }, { - "order": 240, + "order": 242, "name": "isaias-alt", "count": 6, "languages": 2 }, { - "order": 241, + "order": 243, "name": "oixild", "count": 6, "languages": 2 }, { - "order": 242, + "order": 244, "name": "adrs1166ma", "count": 6, "languages": 2 }, { - "order": 243, + "order": 245, "name": "troleomotor10", "count": 6, "languages": 2 }, { - "order": 244, + "order": 246, "name": "devknn", "count": 6, "languages": 2 }, { - "order": 245, + "order": 247, "name": "roswer13", "count": 6, "languages": 2 }, { - "order": 246, + "order": 248, "name": "blancowilson", "count": 6, "languages": 1 }, { - "order": 247, + "order": 249, "name": "eamartin96", "count": 6, "languages": 1 }, { - "order": 248, + "order": 250, "name": "eduhumanes91", "count": 6, "languages": 1 }, { - "order": 249, + "order": 251, "name": "lazar171717ech", "count": 6, "languages": 1 }, { - "order": 250, + "order": 252, "name": "abascal92", "count": 6, "languages": 1 }, { - "order": 251, + "order": 253, "name": "facundo-muoio", "count": 6, "languages": 1 }, { - "order": 252, + "order": 254, "name": "wolffcode", "count": 6, "languages": 1 }, { - "order": 253, + "order": 255, "name": "dannymarperone", "count": 6, "languages": 1 }, { - "order": 254, + "order": 256, "name": "guillemduno", "count": 6, "languages": 1 }, { - "order": 255, + "order": 257, "name": "mxtrar23", "count": 6, "languages": 1 }, { - "order": 256, + "order": 258, "name": "yeisonagm", "count": 6, "languages": 1 }, { - "order": 257, + "order": 259, "name": "gliadev", "count": 6, "languages": 1 }, { - "order": 258, + "order": 260, "name": "dafi02", "count": 6, "languages": 1 }, { - "order": 259, - "name": "glossypath", - "count": 6, - "languages": 1 - }, - { - "order": 260, + "order": 261, "name": "bryan112094", "count": 5, "languages": 3 }, { - "order": 261, + "order": 262, "name": "alabacw74", "count": 5, "languages": 3 }, { - "order": 262, + "order": 263, "name": "espinoleandroo", "count": 5, "languages": 2 }, { - "order": 263, + "order": 264, "name": "vmatmarco", "count": 5, "languages": 2 }, { - "order": 264, + "order": 265, "name": "andresmendozaf", "count": 5, "languages": 2 }, { - "order": 265, + "order": 266, "name": "icedrek", "count": 5, "languages": 2 }, { - "order": 266, + "order": 267, "name": "jalivur", "count": 5, "languages": 2 }, { - "order": 267, + "order": 268, "name": "alejandrodave", "count": 5, "languages": 2 }, - { - "order": 268, - "name": "d0ubt0", - "count": 5, - "languages": 1 - }, { "order": 269, - "name": "yharyarias", + "name": "d0ubt0", "count": 5, "languages": 1 }, { "order": 270, - "name": "jorgeadamowicz", + "name": "yharyarias", "count": 5, "languages": 1 }, { "order": 271, - "name": "jose-luis-lanza", + "name": "jorgeadamowicz", "count": 5, "languages": 1 }, { "order": 272, - "name": "santiago434c", + "name": "zakkdrte", "count": 5, "languages": 1 }, { "order": 273, - "name": "augustdev2003", + "name": "jose-luis-lanza", "count": 5, "languages": 1 }, { "order": 274, - "name": "alberba", + "name": "santiago434c", "count": 5, "languages": 1 }, { "order": 275, - "name": "thezhizn", + "name": "augustdev2003", "count": 5, "languages": 1 }, { "order": 276, - "name": "gabrielramos02", + "name": "alberba", "count": 5, "languages": 1 }, { "order": 277, - "name": "gmbarrios", + "name": "thezhizn", "count": 5, "languages": 1 }, { "order": 278, - "name": "nicoheguaburu", + "name": "gabrielramos02", "count": 5, "languages": 1 }, { "order": 279, - "name": "nomellamodante", + "name": "gmbarrios", "count": 5, "languages": 1 }, { "order": 280, - "name": "sarismejiasanchez", + "name": "nomellamodante", "count": 5, "languages": 1 }, { "order": 281, - "name": "franz-arzapalo", + "name": "sarismejiasanchez", "count": 5, "languages": 1 }, { "order": 282, - "name": "drvito1977", + "name": "franz-arzapalo", "count": 5, "languages": 1 }, { "order": 283, - "name": "joanfv-git", + "name": "drvito1977", "count": 5, "languages": 1 }, { "order": 284, - "name": "eloychavezdev", + "name": "joanfv-git", "count": 5, "languages": 1 }, { "order": 285, - "name": "n1sek", + "name": "eloychavezdev", "count": 5, "languages": 1 }, { "order": 286, - "name": "vixito", + "name": "n1sek", "count": 5, "languages": 1 }, { "order": 287, - "name": "d4-n1", + "name": "vixito", "count": 5, "languages": 1 }, { "order": 288, - "name": "lauracastrillonmp", + "name": "d4-n1", "count": 5, "languages": 1 }, { "order": 289, - "name": "danielbustos342", + "name": "lauracastrillonmp", "count": 5, "languages": 1 }, { "order": 290, - "name": "robmxz", + "name": "danielbustos342", "count": 5, "languages": 1 }, { "order": 291, - "name": "douglasdiazr", + "name": "robmxz", "count": 5, "languages": 1 }, { "order": 292, - "name": "vasilealexandru02", + "name": "douglasdiazr", "count": 5, "languages": 1 }, { "order": 293, - "name": "victormugo", + "name": "vasilealexandru02", "count": 5, "languages": 1 }, { "order": 294, - "name": "esaens12", + "name": "victormugo", "count": 5, "languages": 1 }, { "order": 295, - "name": "adridoce", + "name": "esaens12", "count": 5, "languages": 1 }, { "order": 296, - "name": "lucasag01", + "name": "adridoce", "count": 5, "languages": 1 }, { "order": 297, - "name": "karolle", + "name": "lucasag01", "count": 5, "languages": 1 }, { "order": 298, - "name": "jcrodmir", + "name": "karolle", "count": 5, "languages": 1 }, { "order": 299, - "name": "alvarofernandezavalos", + "name": "jcrodmir", "count": 5, "languages": 1 }, { "order": 300, - "name": "thaishdz", + "name": "alvarofernandezavalos", "count": 5, "languages": 1 }, { "order": 301, - "name": "boterop", + "name": "thaishdz", "count": 5, "languages": 1 }, { "order": 302, - "name": "bastianalq", + "name": "boterop", "count": 5, "languages": 1 }, { "order": 303, - "name": "rafacv23", + "name": "bastianalq", "count": 5, "languages": 1 }, { "order": 304, - "name": "mohamedelderkaoui", + "name": "rafacv23", "count": 5, "languages": 1 }, { "order": 305, - "name": "w00k", + "name": "mohamedelderkaoui", "count": 5, "languages": 1 }, { "order": 306, - "name": "zarakilancelot", - "count": 4, - "languages": 3 + "name": "w00k", + "count": 5, + "languages": 1 }, { "order": 307, - "name": "ruthmp", + "name": "zarakilancelot", "count": 4, - "languages": 2 + "languages": 3 }, { "order": 308, - "name": "mendozalz", + "name": "ruthmp", "count": 4, "languages": 2 }, { "order": 309, - "name": "salkalero", + "name": "mendozalz", "count": 4, "languages": 2 }, { "order": 310, - "name": "willr30", + "name": "salkalero", "count": 4, "languages": 2 }, { "order": 311, - "name": "eonozux", + "name": "willr30", "count": 4, "languages": 2 }, { "order": 312, - "name": "josefuentes-dev", + "name": "eonozux", "count": 4, "languages": 2 }, { "order": 313, - "name": "k3nvd", + "name": "josefuentes-dev", "count": 4, "languages": 2 }, { "order": 314, - "name": "daeduol", + "name": "k3nvd", "count": 4, "languages": 2 }, { "order": 315, - "name": "fullovellas", + "name": "daeduol", "count": 4, "languages": 2 }, { "order": 316, - "name": "yablik", + "name": "fullovellas", "count": 4, "languages": 2 }, { "order": 317, - "name": "nox456", + "name": "yablik", "count": 4, - "languages": 1 + "languages": 2 }, { "order": 318, - "name": "mplatab", + "name": "nox456", "count": 4, "languages": 1 }, { "order": 319, - "name": "davstudy", + "name": "mplatab", "count": 4, "languages": 1 }, { "order": 320, - "name": "rodrigoghr", + "name": "davstudy", "count": 4, "languages": 1 }, { "order": 321, - "name": "ramxv", + "name": "rodrigoghr", "count": 4, "languages": 1 }, { "order": 322, - "name": "inkhemi", + "name": "ramxv", "count": 4, "languages": 1 }, { "order": 323, - "name": "tobibordino", + "name": "inkhemi", "count": 4, "languages": 1 }, { "order": 324, - "name": "mallcca", + "name": "tobibordino", "count": 4, "languages": 1 }, { "order": 325, - "name": "guillermo-k", + "name": "mallcca", "count": 4, "languages": 1 }, { "order": 326, - "name": "angell4s", + "name": "guillermo-k", "count": 4, "languages": 1 }, { "order": 327, - "name": "axelprz", + "name": "angell4s", "count": 4, "languages": 1 }, { "order": 328, - "name": "luissssoto", + "name": "axelprz", "count": 4, "languages": 1 }, { "order": 329, - "name": "zakkdrte", + "name": "luissssoto", "count": 4, "languages": 1 }, @@ -2551,571 +2551,571 @@ }, { "order": 344, - "name": "joaquinlopez14", + "name": "joapalobael", "count": 4, "languages": 1 }, { "order": 345, - "name": "juperdev", + "name": "joaquinlopez14", "count": 4, "languages": 1 }, { "order": 346, - "name": "angelurrutdev", + "name": "juperdev", "count": 4, "languages": 1 }, { "order": 347, - "name": "duendeintemporal", + "name": "angelurrutdev", "count": 4, "languages": 1 }, { "order": 348, - "name": "omegatroy", + "name": "duendeintemporal", "count": 4, "languages": 1 }, { "order": 349, - "name": "socramwd", + "name": "omegatroy", "count": 4, "languages": 1 }, { "order": 350, - "name": "mateo423", + "name": "socramwd", "count": 4, "languages": 1 }, { "order": 351, - "name": "dieswae", + "name": "mateo423", "count": 4, "languages": 1 }, { "order": 352, - "name": "elianisdev", + "name": "dieswae", "count": 4, "languages": 1 }, { "order": 353, - "name": "marcoslombardo", + "name": "elianisdev", "count": 4, "languages": 1 }, { "order": 354, - "name": "andeveling", + "name": "marcoslombardo", "count": 4, "languages": 1 }, { "order": 355, - "name": "sbs24", + "name": "andeveling", "count": 4, "languages": 1 }, { "order": 356, - "name": "carzep09", + "name": "sbs24", "count": 4, "languages": 1 }, { "order": 357, - "name": "traver79", + "name": "carzep09", "count": 4, "languages": 1 }, { "order": 358, - "name": "santiago-munoz-garcia", + "name": "traver79", "count": 4, "languages": 1 }, { "order": 359, - "name": "blasbarragan", + "name": "santiago-munoz-garcia", "count": 4, "languages": 1 }, { "order": 360, - "name": "jerrysantana", + "name": "blasbarragan", "count": 4, "languages": 1 }, { "order": 361, - "name": "password1989", + "name": "jerrysantana", "count": 4, "languages": 1 }, { "order": 362, - "name": "bladi23", + "name": "password1989", "count": 4, "languages": 1 }, { "order": 363, - "name": "juanca2805", + "name": "bladi23", "count": 4, "languages": 1 }, { "order": 364, - "name": "elhacedordecosas", + "name": "juanca2805", "count": 4, "languages": 1 }, { "order": 365, - "name": "hugovrc", + "name": "elhacedordecosas", "count": 4, "languages": 1 }, { "order": 366, - "name": "mayerga", + "name": "hugovrc", "count": 4, "languages": 1 }, { "order": 367, - "name": "deivitdev", + "name": "mayerga", "count": 4, "languages": 1 }, { "order": 368, - "name": "jairo-alejandro", + "name": "deivitdev", "count": 4, "languages": 1 }, { "order": 369, - "name": "quejuan52", + "name": "jairo-alejandro", "count": 4, "languages": 1 }, { "order": 370, - "name": "abel-ade", + "name": "quejuan52", "count": 4, "languages": 1 }, { "order": 371, + "name": "abel-ade", + "count": 4, + "languages": 1 + }, + { + "order": 372, "name": "angelo-eyama", "count": 3, "languages": 3 }, { - "order": 372, + "order": 373, "name": "owen-ian", "count": 3, "languages": 3 }, { - "order": 373, + "order": 374, "name": "akaisombra", "count": 3, "languages": 3 }, { - "order": 374, + "order": 375, "name": "abelsrzz", "count": 3, "languages": 3 }, { - "order": 375, + "order": 376, "name": "jehiselruth", "count": 3, "languages": 3 }, { - "order": 376, + "order": 377, "name": "oskarcali", "count": 3, "languages": 3 }, { - "order": 377, + "order": 378, "name": "eloitr", "count": 3, "languages": 2 }, { - "order": 378, + "order": 379, "name": "diegopc-dev", "count": 3, "languages": 2 }, { - "order": 379, + "order": 380, "name": "dimasb69", "count": 3, "languages": 2 }, { - "order": 380, + "order": 381, "name": "seba9906", "count": 3, "languages": 2 }, { - "order": 381, + "order": 382, "name": "arliumdev", "count": 3, "languages": 2 }, { - "order": 382, + "order": 383, "name": "robindev1812", "count": 3, "languages": 2 }, { - "order": 383, + "order": 384, "name": "alfarog507", "count": 3, "languages": 2 }, { - "order": 384, + "order": 385, "name": "skala2301", "count": 3, "languages": 2 }, { - "order": 385, + "order": 386, "name": "augustosdev", "count": 3, "languages": 2 }, { - "order": 386, + "order": 387, "name": "clotrack", "count": 3, "languages": 2 }, { - "order": 387, + "order": 388, "name": "pablotaber", "count": 3, "languages": 2 }, { - "order": 388, + "order": 389, "name": "allanoscoding", "count": 3, "languages": 2 }, { - "order": 389, + "order": 390, "name": "n-skot", "count": 3, "languages": 2 }, - { - "order": 390, - "name": "bryanalzate007", - "count": 3, - "languages": 1 - }, { "order": 391, - "name": "tonywarcode", + "name": "bryanalzate007", "count": 3, "languages": 1 }, { "order": 392, - "name": "exanderguitar", + "name": "tonywarcode", "count": 3, "languages": 1 }, { "order": 393, - "name": "elkin-dev", + "name": "exanderguitar", "count": 3, "languages": 1 }, { "order": 394, - "name": "carlosalberto05", + "name": "elkin-dev", "count": 3, "languages": 1 }, { "order": 395, - "name": "minn09", + "name": "carlosalberto05", "count": 3, "languages": 1 }, { "order": 396, - "name": "jorgegarcia-dev", + "name": "minn09", "count": 3, "languages": 1 }, { "order": 397, - "name": "guillesese", + "name": "jorgegarcia-dev", "count": 3, "languages": 1 }, { "order": 398, - "name": "tekatoki", + "name": "guillesese", "count": 3, "languages": 1 }, { "order": 399, - "name": "dandrusco", + "name": "tekatoki", "count": 3, "languages": 1 }, { "order": 400, - "name": "estelacode", + "name": "dandrusco", "count": 3, "languages": 1 }, { "order": 401, - "name": "strooplab", + "name": "estelacode", "count": 3, "languages": 1 }, { "order": 402, - "name": "monikgbar", + "name": "strooplab", "count": 3, "languages": 1 }, { "order": 403, - "name": "mstaz4", + "name": "monikgbar", "count": 3, "languages": 1 }, { "order": 404, - "name": "ramon-almeida", + "name": "mstaz4", "count": 3, "languages": 1 }, { "order": 405, - "name": "oscarhub90", + "name": "ramon-almeida", "count": 3, "languages": 1 }, { "order": 406, - "name": "artdugarte", + "name": "oscarhub90", "count": 3, "languages": 1 }, { "order": 407, - "name": "elder202", + "name": "artdugarte", "count": 3, "languages": 1 }, { "order": 408, - "name": "bertolini-victor", + "name": "elder202", "count": 3, "languages": 1 }, { "order": 409, - "name": "oscargeovannyrincon", + "name": "bertolini-victor", "count": 3, "languages": 1 }, { "order": 410, - "name": "rgeditv1", + "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { "order": 411, - "name": "frostbitepy", + "name": "rgeditv1", "count": 3, "languages": 1 }, { "order": 412, - "name": "antii16", + "name": "frostbitepy", "count": 3, "languages": 1 }, { "order": 413, - "name": "mmacalli", + "name": "antii16", "count": 3, "languages": 1 }, { "order": 414, - "name": "eliskopun", + "name": "mmacalli", "count": 3, "languages": 1 }, { "order": 415, - "name": "jofedev", + "name": "eliskopun", "count": 3, "languages": 1 }, { "order": 416, - "name": "suescun845", + "name": "jofedev", "count": 3, "languages": 1 }, { "order": 417, - "name": "yeam-10", + "name": "suescun845", "count": 3, "languages": 1 }, { "order": 418, - "name": "joandevpy", + "name": "yeam-10", "count": 3, "languages": 1 }, { "order": 419, - "name": "macova96", + "name": "joandevpy", "count": 3, "languages": 1 }, { "order": 420, - "name": "beonzj", + "name": "macova96", "count": 3, "languages": 1 }, { "order": 421, - "name": "betzadev", + "name": "beonzj", "count": 3, "languages": 1 }, { "order": 422, - "name": "javitron100", + "name": "betzadev", "count": 3, "languages": 1 }, { "order": 423, - "name": "mizadlogcia", + "name": "javitron100", "count": 3, "languages": 1 }, { "order": 424, - "name": "emilianohoyos", + "name": "mizadlogcia", "count": 3, "languages": 1 }, { "order": 425, - "name": "camilo-zuluaga", + "name": "emilianohoyos", "count": 3, "languages": 1 }, { "order": 426, - "name": "zzepu", + "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { "order": 427, - "name": "danielperezrubio", + "name": "zzepu", "count": 3, "languages": 1 }, { "order": 428, - "name": "marcoh2325", + "name": "danielperezrubio", "count": 3, "languages": 1 }, { "order": 429, - "name": "nathaliamf", + "name": "marcoh2325", "count": 3, "languages": 1 }, { "order": 430, - "name": "jacarrillob", + "name": "nathaliamf", "count": 3, "languages": 1 }, { "order": 431, - "name": "fdcorreadev", + "name": "jacarrillob", "count": 3, "languages": 1 }, { "order": 432, - "name": "matiascba27", + "name": "fdcorreadev", "count": 3, "languages": 1 }, { "order": 433, - "name": "andresargote", + "name": "matiascba27", "count": 3, "languages": 1 }, { "order": 434, - "name": "victorsschz", + "name": "andresargote", "count": 3, "languages": 1 }, { "order": 435, - "name": "faga01", + "name": "victorsschz", "count": 3, "languages": 1 }, { "order": 436, - "name": "dariorfm", + "name": "faga01", "count": 3, "languages": 1 }, { "order": 437, - "name": "hectoriglesias", + "name": "dariorfm", "count": 3, "languages": 1 }, { "order": 438, - "name": "joapalobael", + "name": "hectoriglesias", "count": 3, "languages": 1 }, @@ -3967,3720 +3967,3732 @@ }, { "order": 580, - "name": "ziellucio01", + "name": "maxirica", "count": 2, "languages": 1 }, { "order": 581, - "name": "santiagodc8", + "name": "ziellucio01", "count": 2, "languages": 1 }, { "order": 582, - "name": "haroldalb", + "name": "santiagodc8", "count": 2, "languages": 1 }, { "order": 583, - "name": "eriickm", + "name": "haroldalb", "count": 2, "languages": 1 }, { "order": 584, - "name": "pakomor", + "name": "eriickm", "count": 2, "languages": 1 }, { "order": 585, - "name": "dkp-dev", + "name": "pakomor", "count": 2, "languages": 1 }, { "order": 586, - "name": "adogdev", + "name": "dkp-dev", "count": 2, "languages": 1 }, { "order": 587, - "name": "ignaciogm1973", + "name": "adogdev", "count": 2, "languages": 1 }, { "order": 588, - "name": "josephfaster", + "name": "ignaciogm1973", "count": 2, "languages": 1 }, { "order": 589, - "name": "pedrojog", + "name": "josephfaster", "count": 2, "languages": 1 }, { "order": 590, - "name": "carlosmarte23", + "name": "pedrojog", "count": 2, "languages": 1 }, { "order": 591, - "name": "tic4", + "name": "carlosmarte23", "count": 2, "languages": 1 }, { "order": 592, - "name": "julind0", + "name": "tic4", "count": 2, "languages": 1 }, { "order": 593, - "name": "christiancoc", + "name": "julind0", "count": 2, "languages": 1 }, { "order": 594, - "name": "steven9708m", + "name": "christiancoc", "count": 2, "languages": 1 }, { "order": 595, - "name": "soydaviddev", + "name": "steven9708m", "count": 2, "languages": 1 }, { "order": 596, - "name": "nevaito", + "name": "soydaviddev", "count": 2, "languages": 1 }, { "order": 597, - "name": "fabianpa505", + "name": "nevaito", "count": 2, "languages": 1 }, { "order": 598, - "name": "nachodev7", + "name": "fabianpa505", "count": 2, "languages": 1 }, { "order": 599, - "name": "jsacristanbeltri", + "name": "nachodev7", "count": 2, "languages": 1 }, { "order": 600, - "name": "cipollalucas", + "name": "jsacristanbeltri", "count": 2, "languages": 1 }, { "order": 601, - "name": "devcherry1", + "name": "cipollalucas", "count": 2, "languages": 1 }, { "order": 602, - "name": "zeti1231", + "name": "devcherry1", "count": 2, "languages": 1 }, { "order": 603, - "name": "josegago27", + "name": "zeti1231", "count": 2, "languages": 1 }, { "order": 604, - "name": "gmigues", + "name": "josegago27", "count": 2, "languages": 1 }, { "order": 605, - "name": "dans182", + "name": "gmigues", "count": 2, "languages": 1 }, { "order": 606, - "name": "jheisonquiroga", + "name": "dans182", "count": 2, "languages": 1 }, { "order": 607, - "name": "misterdan100", + "name": "jheisonquiroga", "count": 2, "languages": 1 }, { "order": 608, - "name": "mickel-arroz", + "name": "misterdan100", "count": 2, "languages": 1 }, { "order": 609, - "name": "jhonf1992", + "name": "mickel-arroz", "count": 2, "languages": 1 }, { "order": 610, - "name": "farthaz", + "name": "jhonf1992", "count": 2, "languages": 1 }, { "order": 611, - "name": "murquisdev", + "name": "farthaz", "count": 2, "languages": 1 }, { "order": 612, - "name": "cpcarlosprieto", + "name": "murquisdev", "count": 2, "languages": 1 }, { "order": 613, - "name": "valeriatorrealba", + "name": "cpcarlosprieto", "count": 2, "languages": 1 }, { "order": 614, - "name": "jorge186414", + "name": "valeriatorrealba", "count": 2, "languages": 1 }, { "order": 615, - "name": "davhage", + "name": "jorge186414", "count": 2, "languages": 1 }, { "order": 616, - "name": "lmedina96", + "name": "davhage", "count": 2, "languages": 1 }, { "order": 617, - "name": "matiasfarfan89", + "name": "lmedina96", "count": 2, "languages": 1 }, { "order": 618, - "name": "alanox1", + "name": "matiasfarfan89", "count": 2, "languages": 1 }, { "order": 619, - "name": "santiagocuevas2003", + "name": "alanox1", "count": 2, "languages": 1 }, { "order": 620, - "name": "franciscocuminilondero", + "name": "santiagocuevas2003", "count": 2, "languages": 1 }, { "order": 621, - "name": "gianbordon", + "name": "franciscocuminilondero", "count": 2, "languages": 1 }, { "order": 622, - "name": "christianhernandezb", + "name": "gianbordon", "count": 2, "languages": 1 }, { "order": 623, - "name": "leonardo291024", + "name": "christianhernandezb", "count": 2, "languages": 1 }, { "order": 624, - "name": "haryblanco20", + "name": "leonardo291024", "count": 2, "languages": 1 }, { "order": 625, - "name": "cesarocbu", + "name": "haryblanco20", "count": 2, "languages": 1 }, { "order": 626, - "name": "christianumb", + "name": "cesarocbu", "count": 2, "languages": 1 }, { "order": 627, - "name": "aleoe01", + "name": "christianumb", "count": 2, "languages": 1 }, { "order": 628, - "name": "andnikdev", + "name": "aleoe01", "count": 2, "languages": 1 }, { "order": 629, - "name": "angelvelasco1", + "name": "andnikdev", "count": 2, "languages": 1 }, { "order": 630, - "name": "glaboryp", + "name": "angelvelasco1", "count": 2, "languages": 1 }, { "order": 631, - "name": "nxl22", + "name": "glaboryp", "count": 2, "languages": 1 }, { "order": 632, - "name": "erikayeah", + "name": "nxl22", "count": 2, "languages": 1 }, { "order": 633, - "name": "jeisonredondo", + "name": "erikayeah", "count": 2, "languages": 1 }, { "order": 634, - "name": "rikar2o", + "name": "jeisonredondo", "count": 2, "languages": 1 }, { "order": 635, - "name": "rolo27s", + "name": "rikar2o", "count": 2, "languages": 1 }, { "order": 636, - "name": "miguelrejon96", + "name": "rolo27s", "count": 2, "languages": 1 }, { "order": 637, - "name": "doblea74", + "name": "miguelrejon96", "count": 2, "languages": 1 }, { "order": 638, - "name": "jaimemunozdev", + "name": "doblea74", "count": 2, "languages": 1 }, { "order": 639, - "name": "tomasmarquez81", + "name": "jaimemunozdev", "count": 2, "languages": 1 }, { "order": 640, - "name": "akzorla", + "name": "tomasmarquez81", "count": 2, "languages": 1 }, { "order": 641, - "name": "juangomezn", + "name": "akzorla", "count": 2, "languages": 1 }, { "order": 642, - "name": "soldochris", + "name": "juangomezn", "count": 2, "languages": 1 }, { "order": 643, - "name": "k4rv3r", + "name": "soldochris", "count": 2, "languages": 1 }, { "order": 644, - "name": "wesborland-github", + "name": "k4rv3r", "count": 2, "languages": 1 }, { "order": 645, - "name": "ovjohn", + "name": "wesborland-github", "count": 2, "languages": 1 }, { "order": 646, - "name": "memogv", + "name": "ovjohn", "count": 2, "languages": 1 }, { "order": 647, - "name": "navarroemiliano", + "name": "memogv", "count": 2, "languages": 1 }, { "order": 648, - "name": "waldid32", + "name": "navarroemiliano", "count": 2, "languages": 1 }, { "order": 649, - "name": "mikelroset", + "name": "waldid32", "count": 2, "languages": 1 }, { "order": 650, - "name": "dararod", + "name": "mikelroset", "count": 2, "languages": 1 }, { "order": 651, - "name": "freddyasierraj", + "name": "dararod", "count": 2, "languages": 1 }, { "order": 652, - "name": "gomezcamilo9701", + "name": "freddyasierraj", "count": 2, "languages": 1 }, { "order": 653, - "name": "nicolastapiasanz", + "name": "gomezcamilo9701", "count": 2, "languages": 1 }, { "order": 654, - "name": "vicgallego", + "name": "nicolastapiasanz", "count": 2, "languages": 1 }, { "order": 655, - "name": "porto1090", + "name": "vicgallego", "count": 2, "languages": 1 }, { "order": 656, - "name": "0pio", + "name": "porto1090", "count": 2, "languages": 1 }, { "order": 657, - "name": "whiterunjarl", + "name": "0pio", "count": 2, "languages": 1 }, { "order": 658, - "name": "crisdev3", + "name": "whiterunjarl", "count": 2, "languages": 1 }, { "order": 659, - "name": "gamitocu", + "name": "crisdev3", "count": 2, "languages": 1 }, { "order": 660, - "name": "luis-vb", + "name": "gamitocu", "count": 2, "languages": 1 }, { "order": 661, - "name": "saracorraless", + "name": "luis-vb", "count": 2, "languages": 1 }, { "order": 662, - "name": "vikkanh", + "name": "saracorraless", "count": 2, "languages": 1 }, { "order": 663, - "name": "juaruibr", + "name": "vikkanh", "count": 2, "languages": 1 }, { "order": 664, - "name": "frealexandro", + "name": "juaruibr", "count": 2, "languages": 1 }, { "order": 665, - "name": "roilhi", + "name": "frealexandro", "count": 2, "languages": 1 }, { "order": 666, - "name": "evelynnobile", + "name": "roilhi", "count": 2, "languages": 1 }, { "order": 667, - "name": "cristiansystem", + "name": "evelynnobile", "count": 2, "languages": 1 }, { "order": 668, - "name": "peibolstrike", + "name": "cristiansystem", "count": 2, "languages": 1 }, { "order": 669, - "name": "nahuelborromeo", + "name": "peibolstrike", "count": 2, "languages": 1 }, { "order": 670, - "name": "arhl2023", + "name": "nahuelborromeo", "count": 2, "languages": 1 }, { "order": 671, - "name": "yowcloud", + "name": "arhl2023", "count": 2, "languages": 1 }, { "order": 672, - "name": "jcknot", + "name": "yowcloud", "count": 2, "languages": 1 }, { "order": 673, - "name": "coronelsam", + "name": "jcknot", "count": 2, "languages": 1 }, { "order": 674, - "name": "peeanoot", + "name": "coronelsam", "count": 2, "languages": 1 }, { "order": 675, - "name": "anaroncero", + "name": "peeanoot", "count": 2, "languages": 1 }, { "order": 676, - "name": "marioyellowy", + "name": "anaroncero", "count": 2, "languages": 1 }, { "order": 677, - "name": "hersac", + "name": "marioyellowy", "count": 2, "languages": 1 }, { "order": 678, - "name": "isidrojng", + "name": "hersac", "count": 2, "languages": 1 }, { "order": 679, - "name": "lorenamesa", + "name": "isidrojng", "count": 2, "languages": 1 }, { "order": 680, - "name": "jago86", + "name": "lorenamesa", "count": 2, "languages": 1 }, { "order": 681, - "name": "johannhsdev", + "name": "jago86", "count": 2, "languages": 1 }, { "order": 682, - "name": "diegokarabin", + "name": "johannhsdev", "count": 2, "languages": 1 }, { "order": 683, - "name": "gugliio", + "name": "diegokarabin", "count": 2, "languages": 1 }, { "order": 684, - "name": "fefestuve", + "name": "gugliio", "count": 2, "languages": 1 }, { "order": 685, - "name": "fsfigueroa77", + "name": "fefestuve", "count": 2, "languages": 1 }, { "order": 686, - "name": "reanthonyh", + "name": "fsfigueroa77", "count": 2, "languages": 1 }, { "order": 687, - "name": "nandaalf", + "name": "reanthonyh", "count": 2, "languages": 1 }, { "order": 688, - "name": "vdroiid", + "name": "nandaalf", "count": 2, "languages": 1 }, { "order": 689, - "name": "aserranot", + "name": "vdroiid", "count": 2, "languages": 1 }, { "order": 690, - "name": "raulallue", + "name": "aserranot", "count": 2, "languages": 1 }, { "order": 691, - "name": "luciarf", + "name": "raulallue", "count": 2, "languages": 1 }, { "order": 692, - "name": "poetry0354", + "name": "luciarf", "count": 2, "languages": 1 }, { "order": 693, - "name": "rikar20", + "name": "poetry0354", "count": 2, "languages": 1 }, { "order": 694, - "name": "reaien", + "name": "rikar20", "count": 2, "languages": 1 }, { "order": 695, - "name": "elmarqueli", + "name": "reaien", "count": 2, "languages": 1 }, { "order": 696, - "name": "hawkbott", + "name": "elmarqueli", "count": 2, "languages": 1 }, { "order": 697, - "name": "tiaguiito3", + "name": "hawkbott", "count": 2, "languages": 1 }, { "order": 698, - "name": "bereverte", + "name": "tiaguiito3", "count": 2, "languages": 1 }, { "order": 699, - "name": "sdm29gh", + "name": "bereverte", "count": 2, "languages": 1 }, { "order": 700, - "name": "frannmv", + "name": "sdm29gh", "count": 2, "languages": 1 }, { "order": 701, - "name": "diegosilval", + "name": "frannmv", "count": 2, "languages": 1 }, { "order": 702, - "name": "ssanjua", + "name": "diegosilval", "count": 2, "languages": 1 }, { "order": 703, - "name": "zonnen69", + "name": "ssanjua", "count": 2, "languages": 1 }, { "order": 704, - "name": "angelargumedo", + "name": "zonnen69", "count": 2, "languages": 1 }, { "order": 705, - "name": "lordzzz777", + "name": "angelargumedo", "count": 2, "languages": 1 }, { "order": 706, - "name": "rrcoder", + "name": "lordzzz777", "count": 2, "languages": 1 }, { "order": 707, - "name": "jmichael39", + "name": "rrcoder", "count": 2, "languages": 1 }, { "order": 708, - "name": "juanmjimenezs", + "name": "jmichael39", "count": 2, "languages": 1 }, { "order": 709, - "name": "armentaangel", + "name": "juanmjimenezs", "count": 2, "languages": 1 }, { "order": 710, - "name": "vecinacoo", + "name": "armentaangel", "count": 2, "languages": 1 }, { "order": 711, - "name": "wijimenezz", - "count": 1, + "name": "vecinacoo", + "count": 2, "languages": 1 }, { "order": 712, - "name": "rafapg93", + "name": "wijimenezz", "count": 1, "languages": 1 }, { "order": 713, - "name": "vickalc", + "name": "rafapg93", "count": 1, "languages": 1 }, { "order": 714, - "name": "riukac", + "name": "vickalc", "count": 1, "languages": 1 }, { "order": 715, - "name": "rusian69", + "name": "riukac", "count": 1, "languages": 1 }, { "order": 716, - "name": "edgarmedranoa", + "name": "rusian69", "count": 1, "languages": 1 }, { "order": 717, - "name": "sve-nnn", + "name": "edgarmedranoa", "count": 1, "languages": 1 }, { "order": 718, - "name": "emiliordev", + "name": "sve-nnn", "count": 1, "languages": 1 }, { "order": 719, - "name": "acirdeveloper", + "name": "emiliordev", "count": 1, "languages": 1 }, { "order": 720, - "name": "orzefox", + "name": "acirdeveloper", "count": 1, "languages": 1 }, { "order": 721, - "name": "nicoloboo02", + "name": "orzefox", "count": 1, "languages": 1 }, { "order": 722, - "name": "jony-english22", + "name": "nicoloboo02", "count": 1, "languages": 1 }, { "order": 723, - "name": "deathbat00", + "name": "jony-english22", "count": 1, "languages": 1 }, { "order": 724, - "name": "rocha30", + "name": "deathbat00", "count": 1, "languages": 1 }, { "order": 725, - "name": "markayala13", + "name": "rocha30", "count": 1, "languages": 1 }, { "order": 726, - "name": "angeloro", + "name": "markayala13", "count": 1, "languages": 1 }, { "order": 727, - "name": "righelch", + "name": "angeloro", "count": 1, "languages": 1 }, { "order": 728, - "name": "albertovf", + "name": "righelch", "count": 1, "languages": 1 }, { "order": 729, - "name": "sergiopq", + "name": "albertovf", "count": 1, "languages": 1 }, { "order": 730, - "name": "marcosalvarezcalabria", + "name": "sergiopq", "count": 1, "languages": 1 }, { "order": 731, - "name": "ouendinga", + "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { "order": 732, - "name": "evilpodato04", + "name": "ouendinga", "count": 1, "languages": 1 }, { "order": 733, - "name": "agustinfccll", + "name": "evilpodato04", "count": 1, "languages": 1 }, { "order": 734, - "name": "miguel2rar", + "name": "agustinfccll", "count": 1, "languages": 1 }, { "order": 735, - "name": "anitandil", + "name": "miguel2rar", "count": 1, "languages": 1 }, { "order": 736, - "name": "neicervb", + "name": "anitandil", "count": 1, "languages": 1 }, { "order": 737, - "name": "eamartin", + "name": "neicervb", "count": 1, "languages": 1 }, { "order": 738, - "name": "miquelrr", + "name": "eamartin", "count": 1, "languages": 1 }, { "order": 739, - "name": "gabriel-dangelo", + "name": "miquelrr", "count": 1, "languages": 1 }, { "order": 740, - "name": "francomyburg", + "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { "order": 741, - "name": "josephinoo", + "name": "francomyburg", "count": 1, "languages": 1 }, { "order": 742, - "name": "mmariob", + "name": "josephinoo", "count": 1, "languages": 1 }, { "order": 743, - "name": "daichiko", + "name": "mmariob", "count": 1, "languages": 1 }, { "order": 744, - "name": "emanuelgauler", + "name": "daichiko", "count": 1, "languages": 1 }, { "order": 745, - "name": "willypaz243", + "name": "emanuelgauler", "count": 1, "languages": 1 }, { "order": 746, - "name": "rawc1nnamon", + "name": "willypaz243", "count": 1, "languages": 1 }, { "order": 747, - "name": "girngoma", + "name": "rawc1nnamon", "count": 1, "languages": 1 }, { "order": 748, - "name": "juampaweb", + "name": "girngoma", "count": 1, "languages": 1 }, { "order": 749, - "name": "marcos0803", + "name": "juampaweb", "count": 1, "languages": 1 }, { "order": 750, - "name": "anexo01", + "name": "marcos0803", "count": 1, "languages": 1 }, { "order": 751, - "name": "juli-m4", + "name": "anexo01", "count": 1, "languages": 1 }, { "order": 752, - "name": "jchernandez87", + "name": "juli-m4", "count": 1, "languages": 1 }, { "order": 753, - "name": "juan-cruz01", + "name": "jchernandez87", "count": 1, "languages": 1 }, { "order": 754, - "name": "kronoscba", + "name": "juan-cruz01", "count": 1, "languages": 1 }, { "order": 755, - "name": "claudios1980", + "name": "kronoscba", "count": 1, "languages": 1 }, { "order": 756, - "name": "natanaelzubiri", + "name": "claudios1980", "count": 1, "languages": 1 }, { "order": 757, - "name": "lizzymaken", + "name": "natanaelzubiri", "count": 1, "languages": 1 }, { "order": 758, - "name": "jereaguilar", + "name": "lizzymaken", "count": 1, "languages": 1 }, { "order": 759, - "name": "neshurtado", + "name": "jereaguilar", "count": 1, "languages": 1 }, { "order": 760, - "name": "masenace", + "name": "neshurtado", "count": 1, "languages": 1 }, { "order": 761, - "name": "idiegorojas", + "name": "masenace", "count": 1, "languages": 1 }, { "order": 762, - "name": "chema-dw", + "name": "idiegorojas", "count": 1, "languages": 1 }, { "order": 763, - "name": "latorredev", + "name": "chema-dw", "count": 1, "languages": 1 }, { "order": 764, - "name": "jandortiz", + "name": "latorredev", "count": 1, "languages": 1 }, { "order": 765, - "name": "demegorash", + "name": "jandortiz", "count": 1, "languages": 1 }, { "order": 766, - "name": "deivimiller", + "name": "demegorash", "count": 1, "languages": 1 }, { "order": 767, - "name": "snowcardenas", + "name": "deivimiller", "count": 1, "languages": 1 }, { "order": 768, - "name": "xalejandrow", + "name": "snowcardenas", "count": 1, "languages": 1 }, { "order": 769, - "name": "wallsified", + "name": "xalejandrow", "count": 1, "languages": 1 }, { "order": 770, - "name": "sherkla12e", + "name": "wallsified", "count": 1, "languages": 1 }, { "order": 771, - "name": "turudev1979", + "name": "sherkla12e", "count": 1, "languages": 1 }, { "order": 772, - "name": "miguelmancebo", + "name": "luiscalle17", "count": 1, "languages": 1 }, { "order": 773, - "name": "alejandro000", + "name": "turudev1979", "count": 1, "languages": 1 }, { "order": 774, - "name": "miguelangel861", + "name": "miguelmancebo", "count": 1, "languages": 1 }, { "order": 775, - "name": "obed-tc", + "name": "alejandro000", "count": 1, "languages": 1 }, { "order": 776, - "name": "krisipo", + "name": "miguelangel861", "count": 1, "languages": 1 }, { "order": 777, - "name": "davidgramiro", + "name": "obed-tc", "count": 1, "languages": 1 }, { "order": 778, - "name": "luceldasilva", + "name": "krisipo", "count": 1, "languages": 1 }, { "order": 779, - "name": "m4xxdev", + "name": "davidgramiro", "count": 1, "languages": 1 }, { "order": 780, - "name": "jrgranadosb", + "name": "luceldasilva", "count": 1, "languages": 1 }, { "order": 781, - "name": "90dread", + "name": "m4xxdev", "count": 1, "languages": 1 }, { "order": 782, - "name": "dimanu-py", + "name": "jrgranadosb", "count": 1, "languages": 1 }, { "order": 783, - "name": "marcelinoarias369", + "name": "90dread", "count": 1, "languages": 1 }, { "order": 784, - "name": "gmedinat911", + "name": "dimanu-py", "count": 1, "languages": 1 }, { "order": 785, - "name": "alejarandro", + "name": "marcelinoarias369", "count": 1, "languages": 1 }, { "order": 786, - "name": "e-xtian", + "name": "gmedinat911", "count": 1, "languages": 1 }, { "order": 787, - "name": "tashidian", + "name": "alejarandro", "count": 1, "languages": 1 }, { "order": 788, - "name": "eljavi0", + "name": "e-xtian", "count": 1, "languages": 1 }, { "order": 789, - "name": "xtinarita", + "name": "tashidian", "count": 1, "languages": 1 }, { "order": 790, - "name": "pr1de-23", + "name": "eljavi0", "count": 1, "languages": 1 }, { "order": 791, - "name": "diegogomezcor4", + "name": "xtinarita", "count": 1, "languages": 1 }, { "order": 792, - "name": "v0l0v", + "name": "pr1de-23", "count": 1, "languages": 1 }, { "order": 793, - "name": "carlostoledoe", + "name": "diegogomezcor4", "count": 1, "languages": 1 }, { "order": 794, - "name": "pablom-2015", + "name": "v0l0v", "count": 1, "languages": 1 }, { "order": 795, - "name": "jafuma0320", + "name": "carlostoledoe", "count": 1, "languages": 1 }, { "order": 796, - "name": "yamiyugi25", + "name": "pablom-2015", "count": 1, "languages": 1 }, { "order": 797, - "name": "bassalex27", + "name": "jafuma0320", "count": 1, "languages": 1 }, { "order": 798, - "name": "devkenn", + "name": "yamiyugi25", "count": 1, "languages": 1 }, { "order": 799, - "name": "vmarialuzm", + "name": "bassalex27", "count": 1, "languages": 1 }, { "order": 800, - "name": "francgci", + "name": "devkenn", "count": 1, "languages": 1 }, { "order": 801, - "name": "yetlanezils", + "name": "vmarialuzm", "count": 1, "languages": 1 }, { "order": 802, - "name": "judithernandez", + "name": "francgci", "count": 1, "languages": 1 }, { "order": 803, - "name": "cris10026", + "name": "yetlanezils", "count": 1, "languages": 1 }, { "order": 804, - "name": "dakkaj", + "name": "judithernandez", "count": 1, "languages": 1 }, { "order": 805, - "name": "ferngpv", + "name": "cris10026", "count": 1, "languages": 1 }, { "order": 806, - "name": "mamartinez14", + "name": "dakkaj", "count": 1, "languages": 1 }, { "order": 807, - "name": "emmanuelmmontesinos ", + "name": "ferngpv", "count": 1, "languages": 1 }, { "order": 808, - "name": "experthacker444", + "name": "mamartinez14", "count": 1, "languages": 1 }, { "order": 809, - "name": "pushodev", + "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { "order": 810, - "name": "ignacioskm", + "name": "experthacker444", "count": 1, "languages": 1 }, { "order": 811, - "name": "luisangeles20", + "name": "pushodev", "count": 1, "languages": 1 }, { "order": 812, - "name": "xcortes", + "name": "ignacioskm", "count": 1, "languages": 1 }, { "order": 813, - "name": "isaacdci", + "name": "luisangeles20", "count": 1, "languages": 1 }, { "order": 814, - "name": "yeisongil", + "name": "xcortes", "count": 1, "languages": 1 }, { "order": 815, - "name": "jalonso76", + "name": "isaacdci", "count": 1, "languages": 1 }, { "order": 816, - "name": "maxirica", + "name": "yeisongil", "count": 1, "languages": 1 }, { "order": 817, - "name": "devjerez", + "name": "jalonso76", "count": 1, "languages": 1 }, { "order": 818, - "name": "betulioo", + "name": "devjerez", "count": 1, "languages": 1 }, { "order": 819, - "name": "neftalyr", + "name": "betulioo", "count": 1, "languages": 1 }, { "order": 820, - "name": "josuelopez5", + "name": "neftalyr", "count": 1, "languages": 1 }, { "order": 821, - "name": "vickalck", + "name": "josuelopez5", "count": 1, "languages": 1 }, { "order": 822, - "name": "xhinto", + "name": "vickalck", "count": 1, "languages": 1 }, { "order": 823, - "name": "jgregoris", + "name": "xhinto", "count": 1, "languages": 1 }, { "order": 824, - "name": "sofiamfernandez", + "name": "jgregoris", "count": 1, "languages": 1 }, { "order": 825, - "name": "g4nd4lf", + "name": "sofiamfernandez", "count": 1, "languages": 1 }, { "order": 826, - "name": "manueldenisdev", + "name": "g4nd4lf", "count": 1, "languages": 1 }, { "order": 827, - "name": "kshields51", + "name": "manueldenisdev", "count": 1, "languages": 1 }, { "order": 828, - "name": "omar8102", + "name": "kshields51", "count": 1, "languages": 1 }, { "order": 829, - "name": "lluistech", + "name": "omar8102", "count": 1, "languages": 1 }, { "order": 830, - "name": "vicvilla30", + "name": "lluistech", "count": 1, "languages": 1 }, { "order": 831, - "name": "gilbertho502", + "name": "vicvilla30", "count": 1, "languages": 1 }, { "order": 832, - "name": "13sauca13", + "name": "gilbertho502", "count": 1, "languages": 1 }, { "order": 833, - "name": "cd1974", + "name": "13sauca13", "count": 1, "languages": 1 }, { "order": 834, - "name": "salas89", + "name": "cd1974", "count": 1, "languages": 1 }, { "order": 835, - "name": "eatsangels", + "name": "salas89", "count": 1, "languages": 1 }, { "order": 836, - "name": "sergiomhernandez", + "name": "eatsangels", "count": 1, "languages": 1 }, { "order": 837, - "name": "carlosbb70", + "name": "sergiomhernandez", "count": 1, "languages": 1 }, { "order": 838, - "name": "mjordanaam", + "name": "carlosbb70", "count": 1, "languages": 1 }, { "order": 839, - "name": "howlett9999", + "name": "mjordanaam", "count": 1, "languages": 1 }, { "order": 840, - "name": "copamire", + "name": "howlett9999", "count": 1, "languages": 1 }, { "order": 841, - "name": "erickcis", + "name": "copamire", "count": 1, "languages": 1 }, { "order": 842, - "name": "and-y21", + "name": "erickcis", "count": 1, "languages": 1 }, { "order": 843, - "name": "leo18q", + "name": "and-y21", "count": 1, "languages": 1 }, { "order": 844, - "name": "adcarret", + "name": "leo18q", "count": 1, "languages": 1 }, { "order": 845, - "name": "arturodlapaz17", + "name": "adcarret", "count": 1, "languages": 1 }, { "order": 846, - "name": "danidan1214", + "name": "arturodlapaz17", "count": 1, "languages": 1 }, { "order": 847, - "name": "julioorozco05", + "name": "danidan1214", "count": 1, "languages": 1 }, { "order": 848, - "name": "juanalbornoz32", + "name": "julioorozco05", "count": 1, "languages": 1 }, { "order": 849, - "name": "ambrociojrdelacruz", + "name": "juanalbornoz32", "count": 1, "languages": 1 }, { "order": 850, - "name": "manuu42", + "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { "order": 851, - "name": "sergiovelayos", + "name": "manuu42", "count": 1, "languages": 1 }, { "order": 852, - "name": "snowale", + "name": "sergiovelayos", "count": 1, "languages": 1 }, { "order": 853, - "name": "gl-informatica", + "name": "snowale", "count": 1, "languages": 1 }, { "order": 854, - "name": "dacaldev", + "name": "gl-informatica", "count": 1, "languages": 1 }, { "order": 855, - "name": "javirr4", + "name": "dacaldev", "count": 1, "languages": 1 }, { "order": 856, - "name": "amitchellg", + "name": "javirr4", "count": 1, "languages": 1 }, { "order": 857, - "name": "henrydavidprimera", + "name": "amitchellg", "count": 1, "languages": 1 }, { "order": 858, - "name": "cristianvergaraf", + "name": "henrydavidprimera", "count": 1, "languages": 1 }, { "order": 859, - "name": "geridage", + "name": "cristianvergaraf", "count": 1, "languages": 1 }, { "order": 860, - "name": "osneidert", + "name": "geridage", "count": 1, "languages": 1 }, { "order": 861, - "name": "perla-zg", + "name": "osneidert", "count": 1, "languages": 1 }, { "order": 862, - "name": "zeraven09", + "name": "perla-zg", "count": 1, "languages": 1 }, { "order": 863, - "name": "acobo3", + "name": "zeraven09", "count": 1, "languages": 1 }, { "order": 864, - "name": "fergz1988", + "name": "acobo3", "count": 1, "languages": 1 }, { "order": 865, - "name": "johao23", + "name": "fergz1988", "count": 1, "languages": 1 }, { "order": 866, - "name": "hnaranjog", + "name": "johao23", "count": 1, "languages": 1 }, { "order": 867, - "name": "giovanni-schmaily", + "name": "hnaranjog", "count": 1, "languages": 1 }, { "order": 868, - "name": "jgarteag", + "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { "order": 869, - "name": "ndepaul82", + "name": "jgarteag", "count": 1, "languages": 1 }, { "order": 870, - "name": "neusier101", + "name": "ndepaul82", "count": 1, "languages": 1 }, { "order": 871, - "name": "wilsonbarrera", + "name": "neusier101", "count": 1, "languages": 1 }, { "order": 872, - "name": "mrf1989", + "name": "wilsonbarrera", "count": 1, "languages": 1 }, { "order": 873, - "name": "charly024", + "name": "mrf1989", "count": 1, "languages": 1 }, { "order": 874, - "name": "nico70012", + "name": "charly024", "count": 1, "languages": 1 }, { "order": 875, - "name": "gersonoroz", + "name": "nico70012", "count": 1, "languages": 1 }, { "order": 876, - "name": "johannmanrique", + "name": "gersonoroz", "count": 1, "languages": 1 }, { "order": 877, - "name": "facundorsabia", + "name": "johannmanrique", "count": 1, "languages": 1 }, { "order": 878, - "name": "cisneros2404", + "name": "facundorsabia", "count": 1, "languages": 1 }, { "order": 879, - "name": "josem17-cyber", + "name": "cisneros2404", "count": 1, "languages": 1 }, { "order": 880, - "name": "sbngl", + "name": "josem17-cyber", "count": 1, "languages": 1 }, { "order": 881, - "name": "x3mboy", + "name": "sbngl", "count": 1, "languages": 1 }, { "order": 882, - "name": "van-02", + "name": "x3mboy", "count": 1, "languages": 1 }, { "order": 883, - "name": "franciscokarriere", + "name": "van-02", "count": 1, "languages": 1 }, { "order": 884, - "name": "jd-gm", + "name": "franciscokarriere", "count": 1, "languages": 1 }, { "order": 885, - "name": "fzcarlitos", + "name": "jd-gm", "count": 1, "languages": 1 }, { "order": 886, - "name": "dmhenaopa", + "name": "fzcarlitos", "count": 1, "languages": 1 }, { "order": 887, - "name": "gerespinosa", + "name": "dmhenaopa", "count": 1, "languages": 1 }, { "order": 888, - "name": "alexis0717", + "name": "gerespinosa", "count": 1, "languages": 1 }, { "order": 889, - "name": "rojasvargas", + "name": "alexis0717", "count": 1, "languages": 1 }, { "order": 890, - "name": "alexxawada", + "name": "rojasvargas", "count": 1, "languages": 1 }, { "order": 891, - "name": "lopesteban", + "name": "alexxawada", "count": 1, "languages": 1 }, { "order": 892, - "name": "lytsar", + "name": "lopesteban", "count": 1, "languages": 1 }, { "order": 893, - "name": "jsruedatorres", + "name": "lytsar", "count": 1, "languages": 1 }, { "order": 894, - "name": "fullstackarlo", + "name": "jsruedatorres", "count": 1, "languages": 1 }, { "order": 895, - "name": "brayancordova1", + "name": "fullstackarlo", "count": 1, "languages": 1 }, { "order": 896, - "name": "francescoalterio", + "name": "brayancordova1", "count": 1, "languages": 1 }, { "order": 897, - "name": "francomoreira", + "name": "francescoalterio", "count": 1, "languages": 1 }, { "order": 898, - "name": "kenzambrano", + "name": "francomoreira", "count": 1, "languages": 1 }, { "order": 899, - "name": "edperez07", + "name": "kenzambrano", "count": 1, "languages": 1 }, { "order": 900, - "name": "edgonzz", + "name": "edperez07", "count": 1, "languages": 1 }, { "order": 901, - "name": "siuldev", + "name": "edgonzz", "count": 1, "languages": 1 }, { "order": 902, - "name": "vmga09", + "name": "siuldev", "count": 1, "languages": 1 }, { "order": 903, - "name": "frcan89", + "name": "vmga09", "count": 1, "languages": 1 }, { "order": 904, - "name": "jpiacaruso", + "name": "frcan89", "count": 1, "languages": 1 }, { "order": 905, - "name": "m4xisil", + "name": "jpiacaruso", "count": 1, "languages": 1 }, { "order": 906, - "name": "leydimadrid", + "name": "m4xisil", "count": 1, "languages": 1 }, { "order": 907, - "name": "albabp", + "name": "leydimadrid", "count": 1, "languages": 1 }, { "order": 908, - "name": "juanpablo-a", + "name": "albabp", "count": 1, "languages": 1 }, { "order": 909, - "name": "cgomezadolfo", + "name": "juanpablo-a", "count": 1, "languages": 1 }, { "order": 910, - "name": "lfam200", + "name": "cgomezadolfo", "count": 1, "languages": 1 }, { "order": 911, - "name": "kocho03", + "name": "lfam200", "count": 1, "languages": 1 }, { "order": 912, - "name": "yessikamichelle", + "name": "kocho03", "count": 1, "languages": 1 }, { "order": 913, - "name": "fernandofl", + "name": "yessikamichelle", "count": 1, "languages": 1 }, { "order": 914, - "name": "peticas", + "name": "fernandofl", "count": 1, "languages": 1 }, { "order": 915, - "name": "royhuamanavila", + "name": "peticas", "count": 1, "languages": 1 }, { "order": 916, - "name": "afl0r3s", + "name": "royhuamanavila", "count": 1, "languages": 1 }, { "order": 917, - "name": "abengl", + "name": "afl0r3s", "count": 1, "languages": 1 }, { "order": 918, - "name": "isnatthy", + "name": "abengl", "count": 1, "languages": 1 }, { "order": 919, - "name": "lfwzk", + "name": "isnatthy", "count": 1, "languages": 1 }, { "order": 920, - "name": "denisortega", + "name": "lfwzk", "count": 1, "languages": 1 }, { "order": 921, - "name": "johnniew81", + "name": "denisortega", "count": 1, "languages": 1 }, { "order": 922, - "name": "sergioab7", + "name": "johnniew81", "count": 1, "languages": 1 }, { "order": 923, - "name": "joseperesini", + "name": "sergioab7", "count": 1, "languages": 1 }, { "order": 924, - "name": "aleclto7", + "name": "joseperesini", "count": 1, "languages": 1 }, { "order": 925, - "name": "pierre-ol", + "name": "aleclto7", "count": 1, "languages": 1 }, { "order": 926, - "name": "sixtodev", + "name": "pierre-ol", "count": 1, "languages": 1 }, { "order": 927, - "name": "nnunezmedina", + "name": "sixtodev", "count": 1, "languages": 1 }, { "order": 928, - "name": "conrado85", + "name": "nnunezmedina", "count": 1, "languages": 1 }, { "order": 929, - "name": "patricioguerra30", + "name": "conrado85", "count": 1, "languages": 1 }, { "order": 930, - "name": "walkerlyna", + "name": "patricioguerra30", "count": 1, "languages": 1 }, { "order": 931, - "name": "augustbs", + "name": "walkerlyna", "count": 1, "languages": 1 }, { "order": 932, - "name": "gc796", + "name": "augustbs", "count": 1, "languages": 1 }, { "order": 933, - "name": "diegoxxd", + "name": "gc796", "count": 1, "languages": 1 }, { "order": 934, - "name": "ronnieruuz", + "name": "diegoxxd", "count": 1, "languages": 1 }, { "order": 935, - "name": "nozodev", + "name": "ronnieruuz", "count": 1, "languages": 1 }, { "order": 936, - "name": "pointfs", + "name": "nozodev", "count": 1, "languages": 1 }, { "order": 937, - "name": "saintsluis", + "name": "pointfs", "count": 1, "languages": 1 }, { "order": 938, - "name": "cliverjimny123", + "name": "saintsluis", "count": 1, "languages": 1 }, { "order": 939, - "name": "mekanicas", + "name": "cliverjimny123", "count": 1, "languages": 1 }, { "order": 940, - "name": "vainsito1", + "name": "mekanicas", "count": 1, "languages": 1 }, { "order": 941, - "name": "kouski", + "name": "vainsito1", "count": 1, "languages": 1 }, { "order": 942, - "name": "ricarsur", + "name": "kouski", "count": 1, "languages": 1 }, { "order": 943, - "name": "s9code", + "name": "ricarsur", "count": 1, "languages": 1 }, { "order": 944, - "name": "jacobrwx", + "name": "s9code", "count": 1, "languages": 1 }, { "order": 945, - "name": "dianelis1", + "name": "jacobrwx", "count": 1, "languages": 1 }, { "order": 946, - "name": "oscarletelier", + "name": "dianelis1", "count": 1, "languages": 1 }, { "order": 947, - "name": "l3v1xx", + "name": "oscarletelier", "count": 1, "languages": 1 }, { "order": 948, - "name": "codejoss", + "name": "l3v1xx", "count": 1, "languages": 1 }, { "order": 949, - "name": "miguelsarm", + "name": "codejoss", "count": 1, "languages": 1 }, { "order": 950, - "name": "romanocoder", + "name": "miguelsarm", "count": 1, "languages": 1 }, { "order": 951, - "name": "carlosdiaz-dev", + "name": "romanocoder", "count": 1, "languages": 1 }, { "order": 952, - "name": "flarien", + "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { "order": 953, - "name": "abraham9804", + "name": "hfvaronb", "count": 1, "languages": 1 }, { "order": 954, - "name": "sejotaz", + "name": "flarien", "count": 1, "languages": 1 }, { "order": 955, - "name": "gustavoguerrero", + "name": "abraham9804", "count": 1, "languages": 1 }, { "order": 956, - "name": "javieradev", + "name": "sejotaz", "count": 1, "languages": 1 }, { "order": 957, - "name": "frannm29", + "name": "gustavoguerrero", "count": 1, "languages": 1 }, { "order": 958, - "name": "mvillegas18", + "name": "javieradev", "count": 1, "languages": 1 }, { "order": 959, - "name": "antonioverdugo", + "name": "frannm29", "count": 1, "languages": 1 }, { "order": 960, - "name": "kronomio", + "name": "mvillegas18", "count": 1, "languages": 1 }, { "order": 961, - "name": "quirogapau", + "name": "antonioverdugo", "count": 1, "languages": 1 }, { "order": 962, - "name": "ercky1980", + "name": "kronomio", "count": 1, "languages": 1 }, { "order": 963, - "name": "madelefonb", + "name": "quirogapau", "count": 1, "languages": 1 }, { "order": 964, - "name": "imista", + "name": "ercky1980", "count": 1, "languages": 1 }, { "order": 965, - "name": "mhrosariom", + "name": "madelefonb", "count": 1, "languages": 1 }, { "order": 966, - "name": "mdemena", + "name": "imista", "count": 1, "languages": 1 }, { "order": 967, - "name": "luchof5", + "name": "mhrosariom", "count": 1, "languages": 1 }, { "order": 968, - "name": "nicorey89", + "name": "mdemena", "count": 1, "languages": 1 }, { "order": 969, - "name": "santaravena", + "name": "luchof5", "count": 1, "languages": 1 }, { "order": 970, - "name": "xnomada", + "name": "nicorey89", "count": 1, "languages": 1 }, { "order": 971, - "name": "yaojema", + "name": "santaravena", "count": 1, "languages": 1 }, { "order": 972, - "name": "diego-santana23", + "name": "xnomada", "count": 1, "languages": 1 }, { "order": 973, - "name": "aidicoop", + "name": "yaojema", "count": 1, "languages": 1 }, { "order": 974, - "name": "agus-ig", + "name": "diego-santana23", "count": 1, "languages": 1 }, { "order": 975, - "name": "dacronik", + "name": "aidicoop", "count": 1, "languages": 1 }, { "order": 976, - "name": "alemar16", + "name": "agus-ig", "count": 1, "languages": 1 }, { "order": 977, - "name": "alvarommedia", + "name": "dacronik", "count": 1, "languages": 1 }, { "order": 978, - "name": "rodmiggithub", + "name": "alemar16", "count": 1, "languages": 1 }, { "order": 979, - "name": "lucianogriffa", + "name": "alvarommedia", "count": 1, "languages": 1 }, { "order": 980, - "name": "datrujillog", + "name": "rodmiggithub", "count": 1, "languages": 1 }, { "order": 981, - "name": "kevinramirez28", + "name": "lucianogriffa", "count": 1, "languages": 1 }, { "order": 982, - "name": "chriszaldana", + "name": "datrujillog", "count": 1, "languages": 1 }, { "order": 983, - "name": "1978acb", + "name": "kevinramirez28", "count": 1, "languages": 1 }, { "order": 984, - "name": "maximotoro", + "name": "chriszaldana", "count": 1, "languages": 1 }, { "order": 985, - "name": "bjchavez", + "name": "1978acb", "count": 1, "languages": 1 }, { "order": 986, - "name": "seigigim", + "name": "maximotoro", "count": 1, "languages": 1 }, { "order": 987, - "name": "gizelads", + "name": "bjchavez", "count": 1, "languages": 1 }, { "order": 988, - "name": "mauricioyair", + "name": "seigigim", "count": 1, "languages": 1 }, { "order": 989, - "name": "is2095", + "name": "gizelads", "count": 1, "languages": 1 }, { "order": 990, - "name": "axelwestman", + "name": "mauricioyair", "count": 1, "languages": 1 }, { "order": 991, - "name": "manugonzalito", + "name": "is2095", "count": 1, "languages": 1 }, { "order": 992, - "name": "coletonosh", + "name": "axelwestman", "count": 1, "languages": 1 }, { "order": 993, - "name": "deaconst", + "name": "manugonzalito", "count": 1, "languages": 1 }, { "order": 994, - "name": "cibacoa", + "name": "coletonosh", "count": 1, "languages": 1 }, { "order": 995, - "name": "feliaguirre7", + "name": "deaconst", "count": 1, "languages": 1 }, { "order": 996, - "name": "rulo77", + "name": "cibacoa", "count": 1, "languages": 1 }, { "order": 997, - "name": "marcosapodaca", + "name": "feliaguirre7", "count": 1, "languages": 1 }, { "order": 998, - "name": "manuhssj", + "name": "rulo77", "count": 1, "languages": 1 }, { "order": 999, - "name": "serg032", + "name": "marcosapodaca", "count": 1, "languages": 1 }, { "order": 1000, - "name": "lucc4sz", + "name": "manuhssj", "count": 1, "languages": 1 }, { "order": 1001, - "name": "jancalos", + "name": "serg032", "count": 1, "languages": 1 }, { "order": 1002, - "name": "javodevon", + "name": "lucc4sz", "count": 1, "languages": 1 }, { "order": 1003, - "name": "astriebeck", + "name": "jancalos", "count": 1, "languages": 1 }, { "order": 1004, - "name": "ishimaku", + "name": "javodevon", "count": 1, "languages": 1 }, { "order": 1005, - "name": "afacorroloscos", + "name": "astriebeck", "count": 1, "languages": 1 }, { "order": 1006, - "name": "ledyam", + "name": "ishimaku", "count": 1, "languages": 1 }, { "order": 1007, - "name": "jatomas", + "name": "afacorroloscos", "count": 1, "languages": 1 }, { "order": 1008, - "name": "marqitos", + "name": "ledyam", "count": 1, "languages": 1 }, { "order": 1009, - "name": "marvinagui", + "name": "jatomas", "count": 1, "languages": 1 }, { "order": 1010, - "name": "lobogeekmx", + "name": "marqitos", "count": 1, "languages": 1 }, { "order": 1011, - "name": "rocadev2714", + "name": "marvinagui", "count": 1, "languages": 1 }, { "order": 1012, - "name": "rootqui", + "name": "lobogeekmx", "count": 1, "languages": 1 }, { "order": 1013, - "name": "miguelgargallo", + "name": "rocadev2714", "count": 1, "languages": 1 }, { "order": 1014, - "name": "sandrarg85", + "name": "rootqui", "count": 1, "languages": 1 }, { "order": 1015, - "name": "protpus98", + "name": "miguelgargallo", "count": 1, "languages": 1 }, { "order": 1016, - "name": "pkmaventura", + "name": "sandrarg85", "count": 1, "languages": 1 }, { "order": 1017, - "name": "jcrobles99", + "name": "protpus98", "count": 1, "languages": 1 }, { "order": 1018, - "name": "nunezlagos", + "name": "pkmaventura", "count": 1, "languages": 1 }, { "order": 1019, - "name": "chrisfelixgil", + "name": "jcrobles99", "count": 1, "languages": 1 }, { "order": 1020, - "name": "deimoshall", + "name": "nunezlagos", "count": 1, "languages": 1 }, { "order": 1021, - "name": "fede6299", + "name": "chrisfelixgil", "count": 1, "languages": 1 }, { "order": 1022, - "name": "darkohokage", + "name": "deimoshall", "count": 1, "languages": 1 }, { "order": 1023, - "name": "pablo-lnx", + "name": "fede6299", "count": 1, "languages": 1 }, { "order": 1024, - "name": "kevin05m", + "name": "darkohokage", "count": 1, "languages": 1 }, { "order": 1025, - "name": "diegomm27", + "name": "pablo-lnx", "count": 1, "languages": 1 }, { "order": 1026, - "name": "joferpg", + "name": "kevin05m", "count": 1, "languages": 1 }, { "order": 1027, - "name": "mbmaeso", + "name": "diegomm27", "count": 1, "languages": 1 }, { "order": 1028, - "name": "braiso-22", + "name": "joferpg", "count": 1, "languages": 1 }, { "order": 1029, - "name": "deiiviitdev", + "name": "mbmaeso", "count": 1, "languages": 1 }, { "order": 1030, - "name": "alvarominarro", + "name": "braiso-22", "count": 1, "languages": 1 }, { "order": 1031, - "name": "borjadelgadodev", + "name": "deiiviitdev", "count": 1, "languages": 1 }, { "order": 1032, - "name": "elpeque29", + "name": "alvarominarro", "count": 1, "languages": 1 }, { "order": 1033, - "name": "jaennova", + "name": "borjadelgadodev", "count": 1, "languages": 1 }, { "order": 1034, - "name": "luisalberto22", + "name": "elpeque29", "count": 1, "languages": 1 }, { "order": 1035, - "name": "daniel-cas", + "name": "jaennova", "count": 1, "languages": 1 }, { "order": 1036, - "name": "davidcv-dev", + "name": "luisalberto22", "count": 1, "languages": 1 }, { "order": 1037, - "name": "francisleble", + "name": "daniel-cas", "count": 1, "languages": 1 }, { "order": 1038, - "name": "jhordanluyo", + "name": "davidcv-dev", "count": 1, "languages": 1 }, { "order": 1039, - "name": "acirdevelper", + "name": "francisleble", "count": 1, "languages": 1 }, { "order": 1040, - "name": "marcosjarrin", + "name": "jhordanluyo", "count": 1, "languages": 1 }, { "order": 1041, - "name": "implevacui", + "name": "acirdevelper", "count": 1, "languages": 1 }, { "order": 1042, - "name": "jandresalvar", + "name": "marcosjarrin", "count": 1, "languages": 1 }, { "order": 1043, - "name": "ca2puntosv", + "name": "implevacui", "count": 1, "languages": 1 }, { "order": 1044, - "name": "angelcruzg23", + "name": "jandresalvar", "count": 1, "languages": 1 }, { "order": 1045, - "name": "corvo-99", + "name": "ca2puntosv", "count": 1, "languages": 1 }, { "order": 1046, - "name": "devm0nk3y", + "name": "angelcruzg23", "count": 1, "languages": 1 }, { "order": 1047, - "name": "danielcastillo1112", + "name": "corvo-99", "count": 1, "languages": 1 }, { "order": 1048, - "name": "sirvega83", + "name": "devm0nk3y", "count": 1, "languages": 1 }, { "order": 1049, - "name": "franpua", + "name": "danielcastillo1112", "count": 1, "languages": 1 }, { "order": 1050, - "name": "malkarmah", + "name": "sirvega83", "count": 1, "languages": 1 }, { "order": 1051, - "name": "palons29", + "name": "franpua", "count": 1, "languages": 1 }, { "order": 1052, - "name": "diegopardomontero", + "name": "malkarmah", "count": 1, "languages": 1 }, { "order": 1053, - "name": "robermejia", + "name": "palons29", "count": 1, "languages": 1 }, { "order": 1054, - "name": "zyn7e", + "name": "diegopardomontero", "count": 1, "languages": 1 }, { "order": 1055, - "name": "javiir", + "name": "robermejia", "count": 1, "languages": 1 }, { "order": 1056, - "name": "antoniojzp86", + "name": "zyn7e", "count": 1, "languages": 1 }, { "order": 1057, - "name": "v1k770r", + "name": "javiir", "count": 1, "languages": 1 }, { "order": 1058, - "name": "clespinosa2024", + "name": "antoniojzp86", "count": 1, "languages": 1 }, { "order": 1059, - "name": "gianellannie", + "name": "v1k770r", "count": 1, "languages": 1 }, { "order": 1060, - "name": "dany3gs", + "name": "clespinosa2024", "count": 1, "languages": 1 }, { "order": 1061, - "name": "queralesdev", + "name": "gianellannie", "count": 1, "languages": 1 }, { "order": 1062, - "name": "bycris13", + "name": "dany3gs", "count": 1, "languages": 1 }, { "order": 1063, - "name": "reneguzman7", + "name": "queralesdev", "count": 1, "languages": 1 }, { "order": 1064, - "name": "adriansaint07", + "name": "bycris13", "count": 1, "languages": 1 }, { "order": 1065, - "name": "dovinhoyos", + "name": "reneguzman7", "count": 1, "languages": 1 }, { "order": 1066, - "name": "fredylopez01", + "name": "adriansaint07", "count": 1, "languages": 1 }, { "order": 1067, - "name": "lautimorales", + "name": "dovinhoyos", "count": 1, "languages": 1 }, { "order": 1068, - "name": "jlrojano", + "name": "fredylopez01", "count": 1, "languages": 1 }, { "order": 1069, - "name": "jrgim", + "name": "lautimorales", "count": 1, "languages": 1 }, { "order": 1070, + "name": "jlrojano", + "count": 1, + "languages": 1 + }, + { + "order": 1071, + "name": "jrgim", + "count": 1, + "languages": 1 + }, + { + "order": 1072, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1073, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1074, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1075, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1076, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1077, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1078, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1079, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1080, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1081, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1082, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1083, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1084, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1085, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1086, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1087, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1088, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1089, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1090, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1091, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1092, "name": "ivanserran", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1093, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1094, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1095, "name": "nolemoon", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1096, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1095, + "order": 1097, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1096, + "order": 1098, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1099, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1100, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1101, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1102, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1103, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1104, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1105, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1106, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1107, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1108, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1109, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1110, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1111, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1112, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1113, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1114, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1115, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1116, "name": "trollface77", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1117, "name": "brunom-93", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1118, "name": "jhonnfl", "count": 1, "languages": 1 }, { - "order": 1117, + "order": 1119, "name": "alejandroruiz23", "count": 1, "languages": 1 }, { - "order": 1118, + "order": 1120, "name": "jaimesoftdev", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1121, "name": "jarzatedev", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1122, "name": "edm1ya", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1123, "name": "serg-pq", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1124, "name": "tartabullroberto", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1125, "name": "alexisbarradev", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1126, "name": "lara-vel-dev", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1127, "name": "kelvincb", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1128, "name": "armm77", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1129, "name": "paluzz", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1130, "name": "arathhh8", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1131, "name": "1cel4nc3", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1132, "name": "theposi", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1133, "name": "vinyoles", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1134, "name": "omarroman29", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1135, "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1136, "name": "tetotille", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1137, "name": "luisgarm", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1138, "name": "pipeyz21", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1139, "name": "santiagomac", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1140, "name": "vorosdev", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1141, "name": "mickysoft", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1142, "name": "melonconyogurt", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1143, "name": "cdryampi", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1144, "name": "bellodeveloper", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1145, "name": "nachitoe", "count": 1, "languages": 1 }, { - "order": 1144, + "order": 1146, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1145, + "order": 1147, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1148, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1149, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1148, + "order": 1150, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1149, + "order": 1151, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1150, + "order": 1152, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1151, + "order": 1153, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1152, + "order": 1154, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1153, + "order": 1155, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1154, + "order": 1156, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1155, + "order": 1157, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1156, + "order": 1158, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1157, + "order": 1159, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1158, + "order": 1160, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1159, + "order": 1161, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1160, + "order": 1162, "name": "qwik-zghieb", "count": 1, "languages": 1 }, { - "order": 1161, + "order": 1163, "name": "gonzalinuz18", "count": 1, "languages": 1 }, { - "order": 1162, + "order": 1164, "name": "tilordqwerty", "count": 1, "languages": 1 }, { - "order": 1163, + "order": 1165, "name": "dgquintero", "count": 1, "languages": 1 }, { - "order": 1164, + "order": 1166, "name": "torvicv", "count": 1, "languages": 1 }, { - "order": 1165, + "order": 1167, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1166, + "order": 1168, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1167, + "order": 1169, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1168, + "order": 1170, "name": "mvidab", "count": 1, "languages": 1 }, { - "order": 1169, + "order": 1171, "name": "leonardo-henao", "count": 1, "languages": 1 }, { - "order": 1170, + "order": 1172, "name": "pwrxman", "count": 1, "languages": 1 }, { - "order": 1171, + "order": 1173, "name": "c-blskv", "count": 1, "languages": 1 }, { - "order": 1172, + "order": 1174, "name": "emaerniquez", "count": 1, "languages": 1 }, { - "order": 1173, + "order": 1175, "name": "carolhs92", "count": 1, "languages": 1 }, { - "order": 1174, + "order": 1176, "name": "juancamilofvx", "count": 1, "languages": 1 }, { - "order": 1175, + "order": 1177, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1176, + "order": 1178, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1177, + "order": 1179, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1178, + "order": 1180, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1179, + "order": 1181, "name": "matinbohorquez", "count": 1, "languages": 1 }, { - "order": 1180, + "order": 1182, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1181, + "order": 1183, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1182, + "order": 1184, "name": "alecraft8", "count": 1, "languages": 1 }, { - "order": 1183, + "order": 1185, "name": "arperezinf", "count": 1, "languages": 1 }, { - "order": 1184, + "order": 1186, "name": "nightmare79", "count": 1, "languages": 1 }, { - "order": 1185, + "order": 1187, "name": "vikernes27666", "count": 1, "languages": 1 }, { - "order": 1186, + "order": 1188, "name": "cub-tor", "count": 1, "languages": 1 }, { - "order": 1187, + "order": 1189, "name": "carlosmperezm", "count": 1, "languages": 1 }, { - "order": 1188, + "order": 1190, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1189, + "order": 1191, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1190, + "order": 1192, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1191, + "order": 1193, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1192, + "order": 1194, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1193, + "order": 1195, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1194, + "order": 1196, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1195, + "order": 1197, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1196, + "order": 1198, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1197, + "order": 1199, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1198, + "order": 1200, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1199, + "order": 1201, "name": "ddaniel27", "count": 1, "languages": 1 From c713fb206ba7910a94ebb3c564fc07f3c50a705c Mon Sep 17 00:00:00 2001 From: Andres Pantigoso Date: Fri, 20 Sep 2024 20:38:19 -0400 Subject: [PATCH 445/539] #01 - python --- .../python/andreessj.py | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/andreessj.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/andreessj.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/andreessj.py new file mode 100644 index 0000000000..7960d817ee --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/andreessj.py @@ -0,0 +1,88 @@ +# Operadores +print("OPERADORES ARITMETICOS\n") + +print(f"Suma 2+2 = {2+2}") +print(f"Resta 2-2 = {2-2}") +print(f"Multiplicacion 2*2 = {2*2}") +print(f"Exponente 2**2 = {2**2}") +print(f"Division 2/2 = {2/2}") +print(f"Division entera 2//2 = {2//2}") +print(f"Resto 2%2 = {2%2}") + +print("\nOPERADORES DE COMPARACION\n") + +print(f"Igualdad 5 == 5 es {5==5}") # true +print(f"Igualdad 2 < 5 es {5==5}") # true +print(f"Igualdad 5 > 3 es {5==5}") # true +print(f"Igualdad 5 >= 5 es {5==5}") # true +print(f"Igualdad 5 <= 5 es {5==5}") # true + +print("\nOPERADORES LOGICOS\n ") + +print(f"AND 4 <= 5 and 5 > 1 es = {4<=5 & 5 > 1}") +print(f"OR 6 <= 5 or 0 > 1 es = {6<=5 | 0 > 1}") +print(f"NOT 6 <= 5 es = {not 6<=5}") # true +print(f"NOT 5 <= 5 es = {not 5<=5}") # false + +print("\nOPERADORES DE ASIGNACION\n ") + +number = 5 +number += 2 # 7 + +number2 = 4 +number2 -= 2 # 2 + +number3 = 6 +number3 *= 2 # 12 + +number4 = 8 +number4 //= 2 + +print( + f"Suma = {number}\nResta = {number2}\nMultplicacion = {number3}\nDivision = {number4}" +) + +print("\nOPERADORES DE PERTENENCIA\n ") + +print(f"'P' in Password? = {'P' in 'Password'}") +print(f"'P' in Password? = {'P' not in 'Password'}") + +print("\nCONDICIONALES\n ") + +name = "Andres" + +if len(name) >= 5: + print("Tu nombre tiene mas de 5 caracteres") +elif len(name) < 5 and len(name) >= 1: + print("Nombre corto") +else: + print("No hay nombre") + + +print("\nITERADORES\n") + +index = 0 + +print("\nFor:\n") +for item in range(5): + print(f"Numero [{item + 1}]") + +print("\nWhile:\n") +while index < 5: + print(f"Numero [{index + 1}]") + index += 1 + +print("\nEXCEPCIONES\n") + +try: + print(2 / 0) +except: + print("Se ha producido un error") +finally: + print("Fin del programa") + +print("\nEXTRA\n") + +for i in range(10, 56): + if i % 2 == 0 and i != 16 and i % 3 != 0: + print(i) From d64d96dd57a7f1a2e709ac100f3331ab8577af1d Mon Sep 17 00:00:00 2001 From: hozlucas28 Date: Sat, 21 Sep 2024 00:42:56 -0300 Subject: [PATCH 446/539] Solution 37 - Python --- .../python/hozlucas28.py | 277 ++++++++++++++++++ 1 file changed, 277 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/hozlucas28.py diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/hozlucas28.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/hozlucas28.py new file mode 100644 index 0000000000..ad02f7d06d --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/hozlucas28.py @@ -0,0 +1,277 @@ +# pylint: disable=missing-module-docstring,missing-function-docstring,broad-exception-raised + +from typing import Any +import requests as request + + +# ---------------------------------------------------------------------------- # +# ENV # +# ---------------------------------------------------------------------------- # + + +SPOTIFY_API_CLIENT_ID: str = "******" +SPOTIFY_API_CLIENT_SECRET: str = "******" + + +# ---------------------------------------------------------------------------- # +# FUNCTIONS # +# ---------------------------------------------------------------------------- # + + +def get_artist_data(*, _id: str, token: str) -> dict[Any, Any]: + url: str = f"https://api.spotify.com/v1/artists/{_id}" + + headers: dict[str, str] = { + "Authorization": f"Bearer {token}", + } + + response: request.Response = request.get(url=url, headers=headers, timeout=10) + data: dict[Any, Any] = response.json() + + if response.status_code != 200: + raise Exception(data) + + return data + + +def search_artist( + *, + fullName: str, + token: str, +) -> dict[Any, Any]: + url: str = f"https://api.spotify.com/v1/search?q={fullName}&type=artist&limit=1" + + headers: dict[str, str] = { + "Authorization": f"Bearer {token}", + } + + response: request.Response = request.get(url=url, headers=headers, timeout=10) + data: dict[Any, Any] = response.json() + + if response.status_code != 200: + raise Exception(data) + + return data["artists"]["items"][0] + + +def get_artist( + *, + _id: str, + token: str, +) -> dict[Any, Any]: + url: str = f"https://api.spotify.com/v1/artists/{_id}" + + headers: dict[str, str] = { + "Authorization": f"Bearer {token}", + } + + response: request.Response = request.get(url=url, headers=headers, timeout=10) + data: dict[Any, Any] = response.json() + + if response.status_code != 200: + raise Exception(data) + + return data + + +def get_artist_top_tracks( + *, + _id: str, + token: str, +) -> dict[Any, Any]: + url: str = f"https://api.spotify.com/v1/artists/{_id}/top-tracks" + + headers: dict[str, str] = { + "Authorization": f"Bearer {token}", + } + + response: request.Response = request.get(url=url, headers=headers, timeout=10) + data: dict[Any, Any] = response.json() + + if response.status_code != 200: + raise Exception(data) + + return data + + +def get_spotify_token() -> dict[Any, Any]: + url: str = "https://accounts.spotify.com/api/token" + + headers: dict[str, str] = { + "Content-Type": "application/x-www-form-urlencoded", + } + + data: str = ( + f"grant_type=client_credentials" + f"&client_id={SPOTIFY_API_CLIENT_ID}" + f"&client_secret={SPOTIFY_API_CLIENT_SECRET}" + ) + + response: request.Response = request.post( + url=url, headers=headers, data=data, timeout=10 + ) + + if response.status_code != 200: + raise Exception(response.json()) + + return response.json() + + +# ---------------------------------------------------------------------------- # +# MAIN # +# ---------------------------------------------------------------------------- # + + +spotify_token: dict[Any, Any] = get_spotify_token() + +band_names: dict[Any, Any] = { + "first": "oasis", + "second": "linkin park", +} + +first_band: dict[Any, Any] = search_artist( + fullName=band_names["first"], + token=spotify_token["access_token"], +) + +first_band_data: dict[Any, Any] = get_artist_data( + _id=first_band["id"], + token=spotify_token["access_token"], +) + +first_band_top_tracks: dict[Any, Any] = get_artist_top_tracks( + _id=first_band["id"], + token=spotify_token["access_token"], +) + +first_band_top_track: dict[Any, Any] = max( + first_band_top_tracks["tracks"], key=lambda track: track["popularity"] +) + +second_band: dict[Any, Any] = search_artist( + fullName=band_names["second"], + token=spotify_token["access_token"], +) + +second_band_data: dict[Any, Any] = get_artist_data( + _id=second_band["id"], + token=spotify_token["access_token"], +) + +second_band_top_tracks: dict[Any, Any] = get_artist_top_tracks( + _id=second_band["id"], + token=spotify_token["access_token"], +) + +second_band_top_track: dict[Any, Any] = max( + second_band_top_tracks["tracks"], key=lambda track: track["popularity"] +) + +points_per_band: dict[str, int] = { + "first": 0, + "second": 0, +} + +print( + f"> Which band is more popular ({first_band_data['name']}, or {second_band_data['name']})?" +) + +print("\n> Comparison of popularity...") +print( + f"\n> Popularity of {first_band_data['name']}: {first_band_data['popularity']} " + f"points of popularity." +) +print( + f"> Popularity of {second_band_data['name']}: {second_band_data['popularity']} " + f"points of popularity." +) + +if first_band_data["popularity"] > second_band_data["popularity"]: + print( + f"> {first_band_data['name']} has more popularity points than {second_band_data['name']}." + ) + points_per_band["first"] += 1 +elif first_band_data["popularity"] < second_band_data["popularity"]: + print( + f"> {second_band_data['name']} has more popularity points than {first_band_data['name']}." + ) + points_per_band["second"] += 1 +else: + print( + f"> {first_band_data['name']} has the same popularity points than " + f"{second_band_data['name']}." + ) + + +print("\n> Comparison of followers...") +print( + f"\n> Followers of {first_band_data['name']}: {first_band_data['followers']['total']} " + f"followers." +) +print( + f"> Followers of {second_band_data['name']}: {second_band_data['followers']['total']} " + f"followers." +) + +if first_band_data["followers"]["total"] > second_band_data["followers"]["total"]: + print( + f"> {first_band_data['name']} has more followers than {second_band_data['name']}." + ) + points_per_band["first"] += 1 +elif first_band_data["followers"]["total"] < second_band_data["followers"]["total"]: + print( + f"> {second_band_data['name']} has more followers than {first_band_data['name']}." + ) + points_per_band["second"] += 1 +else: + print( + f"> {first_band_data['name']} has the same number of followers than " + f"{second_band_data['name']}." + ) + + +print("\n> Comparison of top track of each band...") +print( + f"\n> Top track of {first_band_data['name']} (name, and popularity): " + f"{first_band_top_track['name']} " + f"(${first_band_top_track['popularity']} points of popularity)." +) +print( + f"> Top track of {second_band_data['name']} (name, and popularity): " + f"{second_band_top_track['name']} (${second_band_top_track['popularity']} " + f"points of popularity)." +) + +if first_band_top_track["popularity"] > second_band_top_track["popularity"]: + print( + f"> {first_band_top_track['name']} of {first_band_data['name']} band is more popular " + f"than {second_band_top_track['name']} of {second_band_data['name']} band." + ) + points_per_band["first"] += 1 +elif first_band_top_track["popularity"] < second_band_top_track["popularity"]: + print( + f"> {second_band_top_track['name']} of {second_band_data['name']} band is more " + f"popular than {first_band_top_track['name']} of {first_band_data['name']} band." + ) + points_per_band["second"] += 1 +else: + print( + f"> {second_band_top_track['name']} of {second_band_data['name']} band has the same " + f"popularity points than {first_band_top_track['name']} of {first_band_data['name']} band." + ) + + +print("\n> In conclusion...") + +if points_per_band["first"] > points_per_band["second"]: + print( + f"\n> {first_band_data['name']} band is more popular than {second_band_data['name']} band" + ) +elif points_per_band["first"] < points_per_band["second"]: + print( + f"\n> {second_band_data['name']} band is more popular than {first_band_data['name']} band" + ) +else: + print( + f"\n> {first_band_data['name']} band is as popular as {second_band_data['name']} band." + ) From b917d4602438b5b522b92f9328f60fb210e41316 Mon Sep 17 00:00:00 2001 From: johnalexguerrero Date: Fri, 20 Sep 2024 22:45:35 -0500 Subject: [PATCH 447/539] #38-python --- .../python/JohnAlexGuerrero.py | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/JohnAlexGuerrero.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/JohnAlexGuerrero.py b/Roadmap/38 - MOUREDEV PRO/python/JohnAlexGuerrero.py new file mode 100644 index 0000000000..68115b0460 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/JohnAlexGuerrero.py @@ -0,0 +1,73 @@ + +"""#38-mourodev-pro.ipynb + +Automatically generated by Colab. + +Original file is located at + https://colab.research.google.com/drive/1QD6r-2pvRV1RgmkqXQWAlZJc-knZLOkg + +/* + * EJERCICIO: + * He presentado mi proyecto más importante del año: mouredev pro. + * Un campus para la comunidad, que lanzaré en octubre, donde estudiar + * programación de una manera diferente. + * Cualquier persona suscrita a la newsletter de https://mouredev.pro + * accederá a sorteos mensuales de suscripciones, regalos y descuentos. + * + * Desarrolla un programa que lea los registros de un fichero .csv y + * seleccione de manera aleatoria diferentes ganadores. + * Requisitos: + * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + * o "inactivo" (y datos ficticios). + * Ejemplo: 1 | test@test.com | activo + * 2 | test2@test.com | inactivo + * (El .csv no debe subirse como parte de la corrección) + * 2. Recupera los datos desde el programa y selecciona email aleatorios. + * Acciones: + * 1. Accede al fichero .csv y selecciona de manera aleatoria un email + * ganador de una suscripción, otro ganador de un descuento y un último + * ganador de un libro (sólo si tiene status "activo" y no está repetido). + * 2. Muestra los emails ganadores y su id. + * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + * no debe tenerse en cuenta. + */ +''' +""" + +import pandas as pd +import random + +fichero = pd.read_csv('./test.csv') + +def seleccionar_ganador(archivo): + df_activos = archivo[archivo['status'] == 'activo'] + if not df_activos.empty: + ganador_indice = random.randint(0, len(df_activos) - 1) + ganador = df_activos.iloc[ganador_indice] + return ganador['id'], ganador['email'] + else: + return None, None + + +ganador_suscripcion_id, ganador_suscripcion_email = seleccionar_ganador(fichero) +ganador_descuento_id, ganador_descuento_email = seleccionar_ganador(fichero) +ganador_libro_id, ganador_libro_email = seleccionar_ganador(fichero) + + +print("Ganador de suscripción:") +if ganador_suscripcion_email: + print("ID:", ganador_suscripcion_id, ", Email:", ganador_suscripcion_email) +else: + print("No hay ganadores activos.") + +print("\nGanador de descuento:") +if ganador_descuento_email: + print("ID:", ganador_descuento_id, ", Email:", ganador_descuento_email) +else: + print("No hay ganadores activos.") + +print("\nGanador de libro:") +if ganador_libro_email: + print("ID:", ganador_libro_id, ", Email:", ganador_libro_email) +else: + print("No hay ganadores activos.") \ No newline at end of file From 23c18848ce89a6966b054548fdd42b2f9a30df4d Mon Sep 17 00:00:00 2001 From: Dkp-Dev Date: Fri, 20 Sep 2024 23:27:24 -0600 Subject: [PATCH 448/539] #02 Python --- .../python/Dkp-Dev.py | 161 ++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/python/Dkp-Dev.py diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/python/Dkp-Dev.py b/Roadmap/02 - FUNCIONES Y ALCANCE/python/Dkp-Dev.py new file mode 100644 index 0000000000..cf61f4adc0 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/python/Dkp-Dev.py @@ -0,0 +1,161 @@ +"""EJERCICIO: + * - Crea ejemplos de funciones básicas que representen las diferentes + * posibilidades del lenguaje: + * Sin parámetros ni retorno, con uno o varios parámetros, con retorno... + * - Comprueba si puedes crear funciones dentro de funciones. + * - Utiliza algún ejemplo de funciones ya creadas en el lenguaje. + * - Pon a prueba el concepto de variable LOCAL y GLOBAL. + * - Debes hacer print por consola del resultado de todos los ejemplos. + * (y tener en cuenta que cada lenguaje puede poseer más o menos posibilidades) + """ + +""" +Funciones definidas por el usuario +""" + +# Funciones Simples + +def greet(): + print("Hola Dkp!") + +greet() + +# Con retorno + +def return_greet(): + return "Hola Dkp2!" + +print(return_greet()) + +# Con un argumento + +def arg_greet(name): + print(f"Hola {name}!") + +arg_greet("Perrito") + +# Con argumentos + +def args_greet(greet, name, name2): + print(f"{greet} {name} y {name2}!") + +args_greet("Hola","perrito","gato" ) + +# Con un argumento predeterminado + +def default_arg_greet(name = "Conejo"): + print(f"Hola {name}!") + +default_arg_greet("Perrito") +default_arg_greet() + +# Con argumentos, uno predeterminado y con cambios de posicion + +def def_args_greet(greet, name, name2="conejo"): + print(f"{greet} {name} y {name2}!") + +def_args_greet("Hola","perrito") +def_args_greet(name2="gato",name="perrito",greet="Hola") + +# Con argumentos y return + +def return_arg_greet(greet,name): + return f"{greet} {name}!!" + +print(return_arg_greet(name="conejo",greet="Holaa")) + +# Con retorno de varios valores + +def multiple_return_greet(): + return "Hola","perrito" + +greet, name = multiple_return_greet() +print(greet) +print(name) + +# Con un numero variable de argumentos + +def variable_args_greet(*names): + for name in names: + print(f"Hola {name}!!") + +variable_args_greet("Perrito","Gato","Conejo","Tortuga") + +# Con un numero variable de argumentos con palabra clave + +def variable_key_args_greet(**names): + for key, value in names.items(): + print(f"Hola {value} eres un ({key})!!") + +variable_key_args_greet( + canino="Perrito", + felino="Gato", + roedor="Conejo", + anfibio="Tortuga" +) + +""" +Funciones dentro de funciones +""" + +def outer_function(): + def inner_function(): + print("Funcion interna") + inner_function() + +outer_function() + +""" +Funciones dentro del lenguaje (built in) +""" + +print("Hola Dkp") +print(len("Dkp")) +print(type("Dkp")) +print(type(29)) + +""" +Variables locales y globales +""" + +global_variable = "Globo" + +print(global_variable) + +def greet(): + local_var = "Holaa" + print(f"{local_var} {global_variable}!!") + +greet() + +print("Fin del ejercicio") + +""" +DIFICULTAD EXTRA (opcional): + * Crea una función que reciba dos parámetros de tipo cadena de texto y retorne un número. + * - La función imprime todos los números del 1 al 100. Teniendo en cuenta que: + * - Si el número es múltiplo de 3, muestra la cadena de texto del primer parámetro. + * - Si el número es múltiplo de 5, muestra la cadena de texto del segundo parámetro. + * - Si el número es múltiplo de 3 y de 5, muestra las dos cadenas de texto concatenadas. + * - La función retorna el número de veces que se ha impreso el número en lugar de los textos. + * + * Presta especial atención a la sintaxis que debes utilizar en cada uno de los casos. + * Cada lenguaje sigue una convenciones que debes de respetar para que el código se entienda. +""" + +def extra(cadena1, cadena2) -> int: + contador = 0 + for var in range(1,101): + if var % 3 == 0 and var % 5 == 0: + print(cadena1 + cadena2) + elif var % 3 == 0: + print(cadena1) + elif var % 5 == 0: + print(cadena2) + else: + print(var) + contador += 1 + return contador + + +print(extra("Perro","Gato")) From 4fbe20fabaf5942c6ecdffa487bd1cc3a631c923 Mon Sep 17 00:00:00 2001 From: hozlucas28 Date: Sat, 21 Sep 2024 03:31:29 -0300 Subject: [PATCH 449/539] Solution 37 - Go --- .../go/hozlucas28.go | 336 ++++++++++++++++++ 1 file changed, 336 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/go/hozlucas28.go diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/go/hozlucas28.go b/Roadmap/37 - OASIS VS LINKIN PARK/go/hozlucas28.go new file mode 100644 index 0000000000..23e605f140 --- /dev/null +++ b/Roadmap/37 - OASIS VS LINKIN PARK/go/hozlucas28.go @@ -0,0 +1,336 @@ +package main + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" +) + +/* -------------------------------------------------------------------------- */ +/* STRUCTS */ +/* -------------------------------------------------------------------------- */ + +type Artist struct { + ID string `json:"id"` + Name string `json:"name"` + _ struct{} +} + +type ArtistData struct { + Followers Followers `json:"followers"` + Id string `json:"id"` + Name string `json:"name"` + Popularity int `json:"popularity"` + _ struct{} +} + +type ArtistTopTracks struct { + Tracks []Track `json:"tracks"` +} + +type Followers struct { + Total int `json:"total"` + _ struct{} +} + +type Search struct { + Artists struct { + Items []Artist `json:"Items"` + } `json:"Artists"` + _ struct{} +} + +type Token struct { + AccessToken string `json:"access_token"` + TokenType string `json:"token_type"` + ExpiresIn int `json:"expires_in"` + _ struct{} +} + +type Track struct { + Name string `json:"name"` + Popularity int `json:"popularity"` + _ struct{} +} + +/* -------------------------------------------------------------------------- */ +/* FUNCTIONS */ +/* -------------------------------------------------------------------------- */ + +func SearchArtist(fullName string, accessToken string) (Artist, error) { + var artist Artist + + queries := url.Values{ + "q": {fullName}, + "type": {"artist"}, + "limit": {"1"}, + } + + var endPoint string = "https://api.spotify.com/v1/search?" + queries.Encode() + + request, err := http.NewRequest("GET", endPoint, nil) + if err != nil { + return artist, err + } + + request.Header = map[string][]string{ + "Authorization": {fmt.Sprintf("Bearer %s", accessToken)}, + } + + client := &http.Client{} + response, err := client.Do(request) + if err != nil { + return artist, err + } + + if response.StatusCode == http.StatusOK { + body, err := io.ReadAll(response.Body) + if err != nil { + return artist, err + } + + var search Search + err = json.Unmarshal(body, &search) + if err != nil { + return artist, err + } + + artist = search.Artists.Items[0] + } else { + var errMsg string = fmt.Sprintf("%s: %v", request.Response.Status, request.Response.Body) + return artist, errors.New(errMsg) + } + + return artist, nil +} + +func GetArtistData(id string, accessToken string) (ArtistData, error) { + var artistData ArtistData + + var url string = fmt.Sprintf("https://api.spotify.com/v1/artists/%s", id) + + request, err := http.NewRequest("GET", url, nil) + if err != nil { + return artistData, err + } + + request.Header = map[string][]string{ + "Authorization": {fmt.Sprintf("Bearer %s", accessToken)}, + } + + client := &http.Client{} + response, err := client.Do(request) + if err != nil { + return artistData, err + } + + if response.StatusCode == http.StatusOK { + body, err := io.ReadAll(response.Body) + if err != nil { + return artistData, err + } + + err = json.Unmarshal(body, &artistData) + if err != nil { + return artistData, err + } + } else { + var errMsg string = fmt.Sprintf("%s: %v", request.Response.Status, request.Response.Body) + return artistData, errors.New(errMsg) + } + + return artistData, nil +} + +func GetTopTrack(tracks []Track) Track { + var topTrack Track = tracks[0] + + for _, track := range tracks[1:] { + if track.Popularity > topTrack.Popularity { + topTrack = track + } + } + + return topTrack +} + +func GetArtistTopTracks(id string, accessToken string) (ArtistTopTracks, error) { + var topTracks ArtistTopTracks + + var url string = fmt.Sprintf("https://api.spotify.com/v1/artists/%s/top-tracks", id) + + request, err := http.NewRequest("GET", url, nil) + if err != nil { + return topTracks, err + } + + request.Header = map[string][]string{ + "Authorization": {fmt.Sprintf("Bearer %s", accessToken)}, + } + + client := &http.Client{} + response, err := client.Do(request) + if err != nil { + return topTracks, err + } + + if response.StatusCode == http.StatusOK { + body, err := io.ReadAll(response.Body) + if err != nil { + return topTracks, err + } + + err = json.Unmarshal(body, &topTracks) + if err != nil { + return topTracks, err + } + } else { + var errMsg string = fmt.Sprintf("%s: %v", request.Response.Status, request.Response.Body) + return topTracks, errors.New(errMsg) + } + + return topTracks, nil +} + +func GetSpotifyToken() (Token, error) { + var token Token + + var clientID string = "*****" + var clientSecret string = "*****" + + var url string = "https://accounts.spotify.com/api/token" + var contentType string = "application/x-www-form-urlencoded" + var body string = fmt.Sprintf("grant_type=client_credentials&client_id=%s&client_secret=%s", clientID, clientSecret) + + response, err := http.Post(url, contentType, bytes.NewBufferString(body)) + if err != nil { + return token, err + } + + if response.StatusCode == http.StatusOK { + body, err := io.ReadAll(response.Body) + if err != nil { + return token, err + } + + err = json.Unmarshal(body, &token) + if err != nil { + return token, err + } + } else { + var errMsg string = fmt.Sprintf("%s: %v", response.Status, response.Body) + return token, errors.New(errMsg) + } + + return token, nil +} + +/* -------------------------------------------------------------------------- */ +/* MAIN */ +/* -------------------------------------------------------------------------- */ + +func main() { + spotifyToken, err := GetSpotifyToken() + if err != nil { + panic(err) + } + + var bandNames map[string]string = map[string]string{"first": "oasis", "second": "linkin park"} + + firstBand, err := SearchArtist(bandNames["first"], spotifyToken.AccessToken) + if err != nil { + panic(err) + } + + firstBandData, err := GetArtistData(firstBand.ID, spotifyToken.AccessToken) + if err != nil { + panic(err) + } + + firstBandTopTracks, err := GetArtistTopTracks(firstBand.ID, spotifyToken.AccessToken) + if err != nil { + panic(err) + } + + var firstBandTopTrack Track = GetTopTrack(firstBandTopTracks.Tracks) + + secondBand, err := SearchArtist(bandNames["second"], spotifyToken.AccessToken) + if err != nil { + panic(err) + } + + secondBandData, err := GetArtistData(secondBand.ID, spotifyToken.AccessToken) + if err != nil { + panic(err) + } + + secondBandTopTracks, err := GetArtistTopTracks(secondBand.ID, spotifyToken.AccessToken) + if err != nil { + panic(err) + } + + var secondBandTopTrack Track = GetTopTrack(secondBandTopTracks.Tracks) + + var pointsPerBand map[string]int = map[string]int{"first": 0, "second": 0} + + fmt.Printf("> Which band is more popular (%s, or %s)?\n", firstBandData.Name, secondBandData.Name) + + fmt.Println("\n> Comparison of popularity...") + fmt.Printf("\n> Popularity of %s: %d points of popularity.\n", firstBandData.Name, firstBandData.Popularity) + fmt.Printf("> Popularity of %s: %d points of popularity.\n", secondBandData.Name, secondBandData.Popularity) + + if firstBandData.Popularity > secondBandData.Popularity { + fmt.Printf("> %s has more popularity points than %s.\n", firstBandData.Name, secondBandData.Name) + pointsPerBand["first"]++ + } else if firstBandData.Popularity < secondBandData.Popularity { + fmt.Printf("> %s has more popularity points than %s.\n", secondBandData.Name, firstBandData.Name) + pointsPerBand["second"]++ + } else { + fmt.Printf("> %s has the same popularity points than %s.\n", firstBandData.Name, secondBandData.Name) + } + + fmt.Println("\n> Comparison of followers...") + fmt.Printf("\n> Followers of %s: %d followers.\n", firstBandData.Name, firstBandData.Followers.Total) + fmt.Printf("> Followers of %s: %d followers.\n", secondBandData.Name, secondBandData.Followers.Total) + + if firstBandData.Followers.Total > secondBandData.Followers.Total { + fmt.Printf("> %s has more followers than %s.\n", firstBandData.Name, secondBandData.Name) + pointsPerBand["first"]++ + } else if firstBandData.Followers.Total < secondBandData.Followers.Total { + fmt.Printf("> %s has more followers than %s.\n", secondBandData.Name, firstBandData.Name) + pointsPerBand["second"]++ + } else { + fmt.Printf("> %s has the same number of followers than %s.\n", firstBandData.Name, secondBandData.Name) + } + + fmt.Println("\n> Comparison of top track of each band...") + fmt.Printf("\n> Top track of %s (name, and popularity): %s (%d points of popularity).\n", firstBandData.Name, firstBandTopTrack.Name, firstBandTopTrack.Popularity) + fmt.Printf("> Top track of %s (name, and popularity): %s (%d points of popularity).\n", secondBandData.Name, secondBandTopTrack.Name, secondBandTopTrack.Popularity) + + if firstBandTopTrack.Popularity > secondBandTopTrack.Popularity { + fmt.Printf( + "> %s of %s band is more popular than %s of %s band.\n", firstBandTopTrack.Name, firstBandData.Name, secondBandTopTrack.Name, secondBandData.Name) + pointsPerBand["first"]++ + } else if firstBandTopTrack.Popularity < secondBandTopTrack.Popularity { + fmt.Printf( + "> %s of %s band is more popular than %s of %s band.\n", secondBandTopTrack.Name, secondBandData.Name, firstBandTopTrack.Name, firstBandData.Name) + pointsPerBand["second"]++ + } else { + fmt.Printf( + "> %s of %s band has the same popularity points than %s of %s band.\n", secondBandTopTrack.Name, secondBandData.Name, firstBandTopTrack.Name, firstBandData.Name) + } + + fmt.Println("\n> In conclusion...") + + if pointsPerBand["first"] > pointsPerBand["second"] { + fmt.Printf("\n> %s band is more popular than %s band.\n", firstBandData.Name, secondBandData.Name) + } else if pointsPerBand["first"] < pointsPerBand["second"] { + fmt.Printf("\n> %s band is more popular than %s band.\n", secondBandData.Name, firstBandData.Name) + } else { + fmt.Printf("\n> %s band is as popular as %s band.\n", firstBandData.Name, secondBandData.Name) + } +} From 046501edc4b6f05a5ab40d37dc9195e1c5078e46 Mon Sep 17 00:00:00 2001 From: jtovart Date: Sat, 21 Sep 2024 02:06:30 -0500 Subject: [PATCH 450/539] #00 - Java --- .../java/llonardo798.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/llonardo798.java diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/llonardo798.java b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/llonardo798.java new file mode 100644 index 0000000000..5f39e3ee15 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/llonardo798.java @@ -0,0 +1,27 @@ +public class llonardo798 { + + public static void main(String[] args) { + + // 1. https://www.java.com/ + + // 2. // Para comentarios de una sola línea, /* */ para comentarios de varias líneas, /** */ para comentarios de documentación (JavaDoc). + + // 3. Vairables y Constantes. + String nombre = "Leonardo Aedo Jimenez"; + final int numeros = 21; + + // 4. Tipos de datos primitivos. + byte edad = 30; // 8 bits, rango de valores permitidos -128 hasta 127 + short anoNacimiento = 1990; // 16 bits, rango de valores permitidos -32768 hasta 32767 + int poblacionCiudad = 5000000; // 32 bits, rango de valores permitidos -2147483648 hasta 2147483647 + long distanciaTierraSol = 149600000000L; // 64 bits, rango de valores permitidos -9223372036854775808 hasta 9223372036854775807 + float precioProducto = 19.99f; // 32 bits, rango de valores permitidos 1.4e-045 hasta 3.4e+038 + double gravedadTierra = 9.80665; // 64 bits, rango de valores permitidos -1.79769313486232e308 hasta 1.79769313486232e308 + char primeraLetra = 'L'; // 16 bits, rango de valores permitidos '\u000' hasta '\uffff' (Caracteres Unicode) + + // 5. Imprimir en consola. + System.out.println("Hola, Java!"); + + } + +} From 19f819a55cb7631eca45db37636766b9aa81db7d Mon Sep 17 00:00:00 2001 From: jtovart Date: Sat, 21 Sep 2024 02:23:42 -0500 Subject: [PATCH 451/539] #00 - Java --- .../java/llonardo798.java | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/llonardo798.java b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/llonardo798.java index 5f39e3ee15..0b592cb458 100644 --- a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/llonardo798.java +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/llonardo798.java @@ -2,22 +2,36 @@ public class llonardo798 { public static void main(String[] args) { - // 1. https://www.java.com/ + // 1. Documentación oficial en https://www.java.com/ - // 2. // Para comentarios de una sola línea, /* */ para comentarios de varias líneas, /** */ para comentarios de documentación (JavaDoc). + // 2. Tipos de comentarios. + + // Para comentarios de una sola línea + + /* + * para comentarios de + * varias líneas + */ + + /** + * para comentarios de + * varias lineas pero es + * formato de documentación + * (JavaDoc). + */ // 3. Vairables y Constantes. String nombre = "Leonardo Aedo Jimenez"; final int numeros = 21; // 4. Tipos de datos primitivos. - byte edad = 30; // 8 bits, rango de valores permitidos -128 hasta 127 - short anoNacimiento = 1990; // 16 bits, rango de valores permitidos -32768 hasta 32767 - int poblacionCiudad = 5000000; // 32 bits, rango de valores permitidos -2147483648 hasta 2147483647 - long distanciaTierraSol = 149600000000L; // 64 bits, rango de valores permitidos -9223372036854775808 hasta 9223372036854775807 - float precioProducto = 19.99f; // 32 bits, rango de valores permitidos 1.4e-045 hasta 3.4e+038 - double gravedadTierra = 9.80665; // 64 bits, rango de valores permitidos -1.79769313486232e308 hasta 1.79769313486232e308 - char primeraLetra = 'L'; // 16 bits, rango de valores permitidos '\u000' hasta '\uffff' (Caracteres Unicode) + byte edad = 30; // 8 bits, rango de valores permitidos -128 hasta 127 + short anoNacimiento = 1990; // 16 bits, rango de valores permitidos -32768 hasta 32767 + int poblacionCiudad = 5000000; // 32 bits, rango de valores permitidos -2147483648 hasta 2147483647 + long distanciaTierraSol = 149600000000L; // 64 bits, rango de valores permitidos -9223372036854775808 hasta 9223372036854775807 + float precioProducto = 19.99f; // 32 bits, rango de valores permitidos 1.4e-045 hasta 3.4e+038 + double gravedadTierra = 9.80665; // 64 bits, rango de valores permitidos -1.79769313486232e308 hasta 1.79769313486232e308 + char primeraLetra = 'L'; // 16 bits, rango de valores permitidos '\u000' hasta '\uffff' (Caracteres Unicode) // 5. Imprimir en consola. System.out.println("Hola, Java!"); From 47bd5ec3ee6d05c25aaca674660fa8030a73788c Mon Sep 17 00:00:00 2001 From: jtovart Date: Sat, 21 Sep 2024 02:59:38 -0500 Subject: [PATCH 452/539] #00 - JavaScript --- .../javascript/llonardo798.js | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/llonardo798.js diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/llonardo798.js b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/llonardo798.js new file mode 100644 index 0000000000..460c4bd5c7 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/llonardo798.js @@ -0,0 +1,39 @@ +// 1. URL del sitio web oficial de JavaScript: https://developer.mozilla.org/en-US/docs/Web/JavaScript + +// 2. Sintaxis de comentarios en JavaScript: + +// Comentario de una línea + +/* + * Comentario de + * varias líneas + */ + +/** + * Comentario de varias líneas + * en formato de documentación + * (JSDoc) + * + * @param {string} param1 - Descripción del parámetro + * @returns {number} - Descripción del valor de retorno + */ + +// 3. Creación de variables y constantes en JavaScript: +let variable = 'Variable en JavaScript!'; + +const constante = '¡Constantes en JavaScript!'; + +// 4. Tipos de datos primitivos en JavaScript: + +let cadena = 'Cadena de texto'; // String (cadenas de texto) - Comillas simples +let otraCadena = "Otra cadena de texto"; // String (cadenas de texto) - Comillas dobles +let numero = 42; // Number (números) - Numeros enteros +let decimal = 3.14; // Decimal (números) - Números decimales o de punto flotante +let bigInt = BigInt(9007199254740992); // BigInt (números) - Números enteros que son más grandes que el límite que puede manejar number +let booleano = true; // Boolean (valores booleanos) - true o false +let valorNoDefinido; // Undefined (valor no definido) - Variable que no ha sido asignada +let valorNulo = null; // Null (valor nulo) - Valor nulo +let id = Symbol("id"); // Symbol (símbolos) - Valor único e inmutable que puede ser utilizado como clave de una propiedad de un objeto + +// 5. Imprimir por consola +console.log(`¡Hola, JavaScript!`); \ No newline at end of file From 658d1e5f084459e80cfeab54578277543ceaf975 Mon Sep 17 00:00:00 2001 From: hozlucas28 Date: Sat, 21 Sep 2024 04:59:38 -0300 Subject: [PATCH 453/539] Solution 38 - TypeScript --- .../typescript/hozlucas28.ts | 163 ++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/typescript/hozlucas28.ts diff --git a/Roadmap/38 - MOUREDEV PRO/typescript/hozlucas28.ts b/Roadmap/38 - MOUREDEV PRO/typescript/hozlucas28.ts new file mode 100644 index 0000000000..4ddb613d69 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/typescript/hozlucas28.ts @@ -0,0 +1,163 @@ +import fs from 'node:fs/promises' + +/* -------------------------------------------------------------------------- */ +/* TYPES */ +/* -------------------------------------------------------------------------- */ + +type Status = 'active' | 'inactive' + +interface User { + id: number + email: `${string}@${string}.com` + status: Status +} + +/* -------------------------------------------------------------------------- */ +/* FUNCTIONS */ +/* -------------------------------------------------------------------------- */ + +interface CreateCSVParams { + data: T[] + path: `${string}.csv` +} + +async function createCSV({path, data}: CreateCSVParams) { + const columns: string[] = Object.keys(data[0]) + const rows: string[] = [columns.join(',')] + + for (const element of data) { + const row: string = Object.values(element).join(',') + rows.push(row) + } + + await fs.writeFile(path, rows.join('\n'), {encoding: 'utf-8'}) +} + +interface GetChoicesParams { + amount: number + choices: T[] + uniqueKey?: keyof T +} + +function getChoices({amount, choices, uniqueKey}: GetChoicesParams): T[] { + const selectedChoices: T[] = [] + + while (selectedChoices.length < amount) { + const randomIndex: number = Math.floor(Math.random() * choices.length) + const choiceSelected: T = choices[randomIndex] + + const cmpFn = (value: T) => { + return uniqueKey + ? value[uniqueKey] === choiceSelected[uniqueKey] + : value === choiceSelected + } + + if (selectedChoices.findIndex(cmpFn) != -1) continue + selectedChoices.push(choiceSelected) + } + + return selectedChoices +} + +interface GetCSVParams { + path: `${string}.csv` +} + +async function getCSV({path}: GetCSVParams): Promise { + const data: T[] = [] + + const csvContent = await fs.readFile(path, {encoding: 'utf-8'}) + + const csvContentArr: string[] = csvContent.split('\n') + const csvColumnsArr: string[] = csvContentArr[0].split(',') + const csvRowsArr: string[] = csvContentArr.slice(1) + + for (const row of csvRowsArr) { + const rowArr = row.split(',') + + const newData: any = {} + for (let j = 0; j < csvColumnsArr.length; j++) { + const column: string = csvColumnsArr[j] + newData[column] = rowArr[j] + } + + data.push(newData) + } + + return data +} + +/* -------------------------------------------------------------------------- */ +/* MAIN */ +/* -------------------------------------------------------------------------- */ + +;(async () => { + const users: User[] = [ + { + email: 'test01@gmail.com', + id: 1, + status: 'active', + }, + { + email: 'test02@gmail.com', + id: 2, + status: 'inactive', + }, + { + email: 'test03@gmail.com', + id: 3, + status: 'inactive', + }, + { + email: 'test04@gmail.com', + id: 4, + status: 'active', + }, + { + email: 'test05@gmail.com', + id: 5, + status: 'inactive', + }, + { + email: 'test06@gmail.com', + id: 6, + status: 'active', + }, + { + email: 'test07@gmail.com', + id: 7, + status: 'active', + }, + { + email: 'test08@gmail.com', + id: 8, + status: 'active', + }, + ] + + await createCSV({data: users, path: './users.csv'}) + const csvUsers: User[] = await getCSV({path: './users.csv'}) + + const activeUsers = csvUsers.filter((user) => user.status === 'active') + + const winners: User[] = getChoices({ + amount: 3, + choices: activeUsers, + uniqueKey: 'id', + }) + + console.log('> The first winner is...') + console.log( + `> Congratulations ${winners[0].email} with id ${winners[0].id}, you won a subscription!` + ) + + console.log('\n> The second winner is...') + console.log( + `> Congratulations ${winners[1].email} with id ${winners[1].id}, you won a discount!` + ) + + console.log('\n> The third winner is...') + console.log( + `> Congratulations ${winners[2].email} with id ${winners[2].id}, you won a book!` + ) +})() From 3b49d6b0d18026baf36f50ae91220cfdaaf9c23d Mon Sep 17 00:00:00 2001 From: jtovart Date: Sat, 21 Sep 2024 03:28:57 -0500 Subject: [PATCH 454/539] #00 - Phyton --- .../python/llonardo798.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/llonardo798.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/llonardo798.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/llonardo798.py new file mode 100644 index 0000000000..51793b754a --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/llonardo798.py @@ -0,0 +1,31 @@ +# 1. URL del sitio web oficial de Python: https://docs.python.org/ + +# 2. Sintaxis de comentarios en Python: + +# Comentario de una sola línea + +""" +Comentario de +varias líneas +""" + +# 3. Creación de una variable y una constante: + +variable = 10 + +CONSTANTE = 3.1416 + +# 4. Tipos de datos primitivos (Fundamentales) en Python: + +cadena = "Hola, mundo!" # Cadena de texto (String) +entero = 10 # Entero (Integer) +flotante = 3.14 # Flotante (Float) - Número decimal +booleano = True # Booleano (Boolean) - True o False +complex = 1 + 2j # Número complejo (Complex) - Parte real e imaginaria (j) +bytes = b"Python" # Bytes (Bytes) - Secuencia de bytes +bytesUnicode = b'\x41' # Bytes Unicode (Bytes) - Secuencia de bytes Unicode +valorNulo = None # Valor nulo (None) - Representa la ausencia de valor + +# 5. Imprimir por consola + +print("¡Hola, Python!") \ No newline at end of file From 23ac058abdc2512c77ee0943d09e9dcec5062f31 Mon Sep 17 00:00:00 2001 From: jtovart Date: Sat, 21 Sep 2024 03:57:10 -0500 Subject: [PATCH 455/539] #00 - TypeScript --- .../typescript/llonardo798.ts | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/llonardo798.ts diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/llonardo798.ts b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/llonardo798.ts new file mode 100644 index 0000000000..99d9eba27f --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/typescript/llonardo798.ts @@ -0,0 +1,38 @@ +// 1. URL del sitio web oficial de TypeScript: https://www.typescriptlang.org/ + +// 2. Tipos de comentarios en TypeScript: + +// Comentario de una línea + +/* + Comentario de varias líneas +*/ + +/** + * Comentario de documentación (JSDoc) + * @param {string} nameDoc - Nombre de la persona + * @returns {string} Saludo + * @example greet('Luis') // => '¡Hola, Leonardo!' + */ + +// 3. Creación de variables y constantes: + +const EDAD: number = 25; +let variables: string = "Leonardo"; + +// 4. Tipos de datos primitivos: + +let nombre: string = 'Leonardo Aedo'; // Cadena de texto (string), con comillas simples, dobles o backticks (``) +let edad: number = 25; // Número entero (number) +let todoOk: boolean = true; // Booleano (boolean) con valores true o false +let nulo: null = null; // Valor nulo (null) +let indefinido: undefined = undefined; // Valor indefinido (undefined) +let simbolo: symbol = Symbol('Simbolo'); // Valor único (symbol) e inmutable +let numeroGrande: bigint = 9007199254740991n; // Número entero grande (bigint) +let cualquierCosa: any = 'Hola'; // Cualquier tipo de dato (any) +cualquierCosa = 25; // Se puede cambiar el tipo de dato + +// 5. Imprimir en consola; + +console.log(`¡Hola, TypeScript!`); + From 46887e305802a079d593689e76d1ea1ab28d8782 Mon Sep 17 00:00:00 2001 From: maxiRica Date: Sat, 21 Sep 2024 09:05:21 +0000 Subject: [PATCH 456/539] #02 - Python --- .../python/maxiRica.py | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/python/maxiRica.py diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/python/maxiRica.py b/Roadmap/02 - FUNCIONES Y ALCANCE/python/maxiRica.py new file mode 100644 index 0000000000..2b8c8ac1f0 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/python/maxiRica.py @@ -0,0 +1,117 @@ +""" +FUNCIONES BÁSICAS. Se declaran con el termino "def" + +Son las funciones creadas por el usuario. Hay del tipo: +1. Sin parámetros ni retorno +2. Con parámetros sin retorno +3. Sin parámetros con retorno +4. Con parámetros y con retorno +5. Recursiva +6. +""" + +# 1. Funciones sin parámetros ni retorno +def Hola(): + print("hola, estoy programando con Python") + +print(" ") + +# 2. Funciones con parámetros sin retorno +def saludo(name): + print(name) + +# 3. Funciones sin parámetros con retorno +def retorno(): + return print("devolvemos un valor") + +# 4. Funciones con parámetros y retorno +def ret_param(valor,porcentaje): + calculo=valor*porcentaje/100 + return calculo + +# 5. Función recursiva +def recursiva(valor): + if valor == 1: + return 1 + else: + return valor * recursiva(valor - 1) + + + + +# ejercicios aplicando el código escrito + +print("# 1. Funciones sin parámetros ni retorno") #1 +print("def Hola():\nprint(\"hola, estoy programando con Python\")\n") +Hola() +print("") + +maxi ="maxi" #2 +print("# 2. Funciones con parámetros sin retorno") +print("def saludo(name):\nprint(name)\n") + +saludo(maxi) +print(" ") + +print("# 3. Funciones sin parámetros con retorno") #3 +print("def retorno():\nreturn print(\"devolvemos un valor\")\n") +retorno() +print(" ") + +print("# 4. Funciones con parámetros y retorno") #4 +print("def ret_param(valor,porcentaje):\ncalculo=valor*porcentaje/100\nreturn calculo\n") +print(ret_param(1000,25)) +print(" ") + +print("# 5. Función recursiva\n") +print("def recursiva(valor):\n if valor == 1:\n return 1\n else:\n return valor * recursiva(valor - 1)\n") +print(recursiva(5)) +print(" ") + +""" +Vamos a trabajar con variables LOCALES y GLOBALES + +Las variables GLOBALES se ejecutaran en todo el código, mientras que las LOCALES +solo se ejecutan dentro de las funciones. + +En la gestión de recursos, las variables locales es mucho más efectivo, dado que solo +ocupan con caráter temporal recursos del sistema. Las variables globales al perdurar +mantienen el uso de los recursos. + +En un programa bien realizado, se ha de usar el mínimo de variables globales posible. +""" + +saludo="Hola a tod@s!!" #variable global + +def saludin(valor): #función donde generamos una variable local tipo string + cortes=valor + hola="holita a tod@s! " + cortes + return hola + + +print(saludin(saludo)) + + +""" +Dificultad extra: + +* Crea una función que reciba dos parámetros de tipo cadena de texto y retorne un número. +* La función imprime todos los números del 1 al 100. Teniendo en cuenta que: +* Si el número es múltiplo de 3, muestra la cadena de texto del primer parámetro. +* Si el número es múltiplo de 5, muestra la cadena de texto del segundo parámetro. +* Si el número es múltiplo de 3 y de 5, muestra las dos cadenas de texto concatenadas. +* La función retorna el número de veces que se ha impreso el número en lugar de los textos. +""" + +def funcion(string1,string2): + for i in range(1,101): + if i%3==0 and i%5==0: + print(f"i({i}): {string1} {string2}") + elif i%3==0: + print(f"i({i}): {string1}") + elif i%5==0: + print(f"i({i}): {string2}") + return + + +funcion("uno", "dos") \ No newline at end of file From aff2431f7f1216be64b44ad3e0a827b882708be9 Mon Sep 17 00:00:00 2001 From: MohamedElderkaoui Date: Sat, 21 Sep 2024 15:00:45 +0200 Subject: [PATCH 457/539] #38 - java --- .../java/MohamedElderkaoui{.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/java/MohamedElderkaoui{.java diff --git a/Roadmap/38 - MOUREDEV PRO/java/MohamedElderkaoui{.java b/Roadmap/38 - MOUREDEV PRO/java/MohamedElderkaoui{.java new file mode 100644 index 0000000000..afa6321749 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/java/MohamedElderkaoui{.java @@ -0,0 +1,68 @@ +import java.io.*; +import java.nio.file.*; +import java.util.*; +import java.util.stream.Collectors; + +public class MohamedElderkaoui { + + public static void main(String[] args) { + String filePath = "participants.csv"; // Path to your CSV file + + List activeParticipants = new ArrayList<>(); + + // Step 1: Read the CSV file and filter "activo" participants + try (BufferedReader br = Files.newBufferedReader(Paths.get(filePath))) { + String line; + // Skip the first line (header) + br.readLine(); + + while ((line = br.readLine()) != null) { + String[] data = line.split(","); // Assuming CSV is comma-separated + int id = Integer.parseInt(data[0].trim()); + String email = data[1].trim(); + String status = data[2].trim(); + + // Only consider "activo" participants + if (status.equalsIgnoreCase("activo")) { + activeParticipants.add(new Participant(id, email)); + } + } + } catch (IOException e) { + System.out.println("Error reading the file: " + e.getMessage()); + } + + // Step 2: Randomly select winners if there are enough participants + if (activeParticipants.size() >= 3) { + Collections.shuffle(activeParticipants); // Randomize the list + + // Select three unique winners + Participant subscriptionWinner = activeParticipants.get(0); + Participant discountWinner = activeParticipants.get(1); + Participant bookWinner = activeParticipants.get(2); + + // Step 3: Display the winners + System.out.println("Winners:"); + System.out.println("Subscription Winner: " + subscriptionWinner); + System.out.println("Discount Winner: " + discountWinner); + System.out.println("Book Winner: " + bookWinner); + } else { + System.out.println("Not enough active participants to select winners."); + } + } + + // Helper class to represent a participant + static class Participant { + int id; + String email; + + Participant(int id, String email) { + this.id = id; + this.email = email; + } + + @Override + public String toString() { + return "ID: " + id + ", Email: " + email; + } + } +} From ff7e354b6900f85c31edc1d70dce1ada8250afaf Mon Sep 17 00:00:00 2001 From: riacosta Date: Sat, 21 Sep 2024 10:45:40 -0300 Subject: [PATCH 458/539] Add questions --- .../python/rigo93acosta.py | 240 ++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/rigo93acosta.py diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/rigo93acosta.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/rigo93acosta.py new file mode 100644 index 0000000000..da5ad12903 --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/rigo93acosta.py @@ -0,0 +1,240 @@ +''' +/* + * EJERCICIO: + * Cada 1 de septiembre, el Hogwarts Express parte hacia la escuela + * de programación de Hogwarts para magos y brujas del código. + * En ella, su famoso sombrero seleccionador ayuda a los programadores + * a encontrar su camino... + * Desarrolla un programa que simule el comportamiento del sombrero. + * Requisitos: + * 1. El sombrero realizará 10 preguntas para determinar la casa del alumno. + * 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data. + * (Puedes elegir las que quieras) + * Acciones: + * 1. Crea un programa que solicite el nombre del alumno y realice 10 + * preguntas, con cuatro posibles respuestas cada una. + * 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección). + * 3. Una vez finalizado, el sombrero indica el nombre del alumno + * y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria, + * pero indicándole al alumno que la decisión ha sido complicada). + */ +''' + +houses = { + "Frontend": 0, + "Backend": 0, + "Mobile": 0, + "Data": 0 +} + +questions = [ + { + "question": "¿Qué tipo de proyectos te interesa más desarrollar?", + "answers": [ + { + "option": "Aplicaciones móviles nativas para múltiples plataformas.", + "house": "Mobile" + }, + { + "option": "Interfaces visualmente atractivas y responsivas.", + "house": "Frontend" + }, + { + "option": "Procesamiento y análisis de grandes volúmenes de datos.", + "house": "Data" + }, + { + "option": "Sistemas robustos y optimización de rendimiento del servidor.", + "house": "Backend" + } + ] + }, + { + "question": "¿Qué aspecto del desarrollo disfrutas más?", + "answers": [ + { + "option": "Resolver problemas complejos de lógica y escalabilidad.", + "house": "Backend" + }, + { + "option": "Analizar datos para tomar decisiones basadas en estadísticas.", + "house": "Data" + }, + { + "option": "Crear aplicaciones móviles eficientes y funcionales.", + "house": "Mobile" + }, + { + "option": "Trabajar en el diseño y la experiencia de usuario.", + "house": "Frontend" + } + ] + }, + { + "question": "¿Qué herramienta prefieres usar en tu día a día?", + "answers": [ + { + "option": "Kotlin o Swift para desarrollar apps móviles nativas.", + "house": "Mobile" + }, + { + "option": "Python o R para análisis de datos.", + "house": "Data" + }, + { + "option": "Frameworks como React o Angular.", + "house": "Frontend" + }, + { + "option": "Lenguajes como Node.js o Python para la gestión de servidores.", + "house": "Backend" + } + ] + }, + { + "question": "¿Cómo te ves en un equipo de desarrollo?", + "answers": [ + { + "option": "Modelando datos y construyendo dashboards de análisis.", + "house": "Data" + }, + { + "option": "Encargado de la lógica del servidor y las APIs.", + "house": "Backend" + }, + { + "option": "Desarrollando la interfaz y funcionalidad de una app móvil.", + "house": "Mobile" + }, + { + "option": "Diseñando las interacciones y los componentes visuales.", + "house": "Frontend" + } + ] + }, + { + "question": "¿Qué te motiva más al trabajar en un proyecto?", + "answers": [ + { + "option": "Ver cómo el diseño cobra vida en la pantalla.", + "house": "Frontend" + }, + { + "option": "Descubrir insights a partir del análisis de datos.", + "house": "Data" + }, + { + "option": "Optimizar el rendimiento y escalabilidad del sistema.", + "house": "Backend" + }, + { + "option": "Lograr que una aplicación móvil funcione perfectamente en cualquier dispositivo.", + "house": "Mobile" + } + ] + }, + { + "question": "¿Cuál es tu enfoque al aprender nuevas tecnologías?", + "answers": [ + { + "option": "Explorar técnicas avanzadas de análisis de datos y machine learning.", + "house": "Data" + }, + { + "option": "Aprender sobre nuevas arquitecturas y lenguajes de servidor.", + "house": "Backend" + }, + { + "option": "Probar nuevas plataformas y herramientas para desarrollo móvil.", + "house": "Mobile" + }, + { + "option": "Experimentar con nuevas librerías y frameworks de interfaz de usuario.", + "house": "Frontend" + } + ] + }, + { + "question": "¿Qué tipo de desafíos disfrutas más resolver?", + "answers": [ + { + "option": "Solución de problemas de concurrencia y carga en servidores.", + "house": "Backend" + }, + { + "option": "Optimización de interfaces para que se vean bien en cualquier dispositivo.", + "house": "Frontend" + }, + { + "option": "Análisis de grandes volúmenes de datos para detectar patrones ocultos.", + "house": "Data"}, + { + "option": "Creación de experiencias de usuario fluídas en dispositivos móviles.", + "house": "Mobile" + } + ] + }, + { + "question": "¿Cómo te gusta medir el éxito de tu trabajo?", + "answers": [ + { + "option": "Por la estabilidad y rapidez del sistema bajo carga.", + "house": "Backend" + }, + { + "option": "Mediante la satisfacción del usuario con la interfaz visual.", + "house": "Frontend" + }, + { + "option": "Por la fluidez y buen rendimiento de la app móvil en diferentes dispositivos.", + "house": "Mobile"}, + { + "option": "Por la precisión y relevancia de los resultados obtenidos en el análisis de datos.", + "house": "Data" + } + ] + }, + { + "question": "¿Qué te resulta más interesante al trabajar con tecnologías emergentes?", + "answers": [ + { + "option": "Trabajar con tecnologías de big data o inteligencia artificial.", + "house": "Data" + }, + { + "option": "Explorar nuevas arquitecturas para mejorar el rendimiento del servidor.", + "house": "Backend" + }, + { + "option": "Probar nuevas herramientas y metodologías para mejorar el diseño y la UX.", + "house": "Frontend" + }, + { + "option": "Desarrollar apps móviles que aprovechen nuevas capacidades de hardware.", + "house": "Mobile" + } + ] + }, + { + "question": "¿Cómo te enfrentas a un nuevo problema en un proyecto?", + "answers": [ + { + "option": "Buscando patrones y soluciones basadas en análisis de datos.", + "house": "Data" + }, + { + "option": "Replanteando la estructura visual y funcional de la interfaz.", + "house": "Frontend" + }, + { + "option": "Explorando cómo mejorar la experiencia del usuario en dispositivos móviles.", + "house": "Mobile" + }, + { + "option": "Analizando la estructura de datos y la lógica del backend.", + "house": "Backend" + } + ] + } +] + From 4fe88919d8ae3a8351bb38f2aae54f84f17e8995 Mon Sep 17 00:00:00 2001 From: riacosta Date: Sat, 21 Sep 2024 11:03:34 -0300 Subject: [PATCH 459/539] End reto --- .../python/rigo93acosta.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/rigo93acosta.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/rigo93acosta.py index da5ad12903..07a5deaa21 100644 --- a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/rigo93acosta.py +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/rigo93acosta.py @@ -19,6 +19,7 @@ * pero indicándole al alumno que la decisión ha sido complicada). */ ''' +import random houses = { "Frontend": 0, @@ -238,3 +239,31 @@ } ] +print("¡Bienvenido al Hogwarts para magos y brujas del código!") +print("El sombrero seleccionador te ayudará a encontrar tu casa ideal.") +name = input("¿Cuál es tu nombre? ") + +for index, question in enumerate(questions): + print(f"\nPregunta {index + 1}: {question['question']}\n") + + for i, answer in enumerate(question['answers']): + print(f"{i + 1}. {answer['option']}") + + choice = int(input("\nElige una opción (1-4): ")) + house = question['answers'][choice - 1]['house'] + houses[house] += 1 + +print(f"\n¡{name.capitalize()}! El sombrero seleccionador ha tomado una decisión...") +assig_house = max(houses, key=houses.get) +scores = list(houses.values()) + +if scores.count(max(scores)) > 1: + print(f"Hmmmm.... La decisión ha sido complicada, pero......") + possible_houses = [ + house for house, points in houses.items() if points == max(scores) + ] + assig_house = random.choice(possible_houses) + print(f"¡{name.capitalize()} tu casa es... {assig_house}!") +else: + print(f"¡{name.capitalize()} tu casa es... {assig_house}!") + From c414c0dbf26fd2029fc213a3e8f07b5312fb97c9 Mon Sep 17 00:00:00 2001 From: CVRodriguez Date: Sat, 21 Sep 2024 16:27:32 +0200 Subject: [PATCH 460/539] #38 - Python --- .../38 - MOUREDEV PRO/python/CarlosVR48.py | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/CarlosVR48.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/CarlosVR48.py b/Roadmap/38 - MOUREDEV PRO/python/CarlosVR48.py new file mode 100644 index 0000000000..3f916400de --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/CarlosVR48.py @@ -0,0 +1,52 @@ +import csv,random + +def cantidad_lineas(): + cantidad = 0 + + with open ("mouredevpro.csv") as file: + datos = csv.reader(file , delimiter ="|") + + for dato in datos: + cantidad = cantidad + 1 + return cantidad -1 + +def ganador(posicion): + num = 0 + + with open ("mouredevpro.csv") as file: + lineas = csv.reader(file , delimiter ="|") + + for linea in lineas: + if num == posicion: + ganador = linea + num = num + 1 + + return ganador + +cantidad = cantidad_lineas() + +while True: + posicion1 = random.randint (1,cantidad) + subscripcion = ganador(posicion1) + if subscripcion [2] == " activo": + break + +while True: + posicion2 = random.randint (1,cantidad) + if not(posicion2 == posicion1): + descuento = ganador(posicion2) + if descuento [2] == " activo": + break + +while True: + posicion3 = random.randint (1,cantidad) + if not(posicion3 == posicion2 or posicion3 == posicion1): + libro = ganador (posicion3) + if libro [2] == " activo": + break + +print (f"EL GANADOR DE LA SUBSCRIPCION ES: {subscripcion[1]} . CON ID: {subscripcion[0]}.\n") +print (f"EL GANADOR DE LA DESCUENTO ES: {descuento[1]} . CON ID: {descuento[0]}.\n") +print (f"EL GANADOR DE LA LIBRO ES: {libro[1]} . CON ID: {libro[0]}.\n") + + \ No newline at end of file From 520b2ee8ae59ff79428625dd666111531852cd14 Mon Sep 17 00:00:00 2001 From: Jordi Ayala Date: Sat, 21 Sep 2024 10:38:55 -0600 Subject: [PATCH 461/539] #38 - Java --- Roadmap/38 - MOUREDEV PRO/java/asjordi.java | 91 +++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/java/asjordi.java diff --git a/Roadmap/38 - MOUREDEV PRO/java/asjordi.java b/Roadmap/38 - MOUREDEV PRO/java/asjordi.java new file mode 100644 index 0000000000..3289c36d84 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/java/asjordi.java @@ -0,0 +1,91 @@ +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.MappingIterator; +import com.fasterxml.jackson.databind.SequenceWriter; +import com.fasterxml.jackson.dataformat.csv.CsvMapper; +import com.fasterxml.jackson.dataformat.csv.CsvSchema; +import net.datafaker.Faker; + +import java.io.File; +import java.io.IOException; +import java.security.SecureRandom; +import java.util.*; + +public class Main { + + private static File csvFile = new File("persons.csv"); + + public static void main(String[] args) { +// createCsvFile(); + Random r = new SecureRandom(); + var persons = readCsvFile(); + var uniquePersons = new ArrayList<>(persons.stream().distinct().filter(p -> p.status().equals("active")).toList()); + Collections.shuffle(uniquePersons); + + var winnerSubscription = uniquePersons.get(r.nextInt(uniquePersons.size())); + var winnerDiscount = uniquePersons.get(r.nextInt(uniquePersons.size())); + var winnerBook = uniquePersons.get(r.nextInt(uniquePersons.size())); + + System.out.println("Winner subscription: " + winnerSubscription.id + " " + winnerSubscription.email()); + System.out.println("Winner discount: " + winnerDiscount.id + " " + winnerDiscount.email()); + System.out.println("Winner book: " + winnerBook.id + " " + winnerBook.email()); + + } + + @JsonPropertyOrder({"id", "email", "status"}) + record Person(int id, String email, String status) { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Person person)) return false; + return id == person.id && Objects.equals(email, person.email) && Objects.equals(status, person.status); + } + + @Override + public int hashCode() { + return Objects.hash(id, email, status); + } + } + + public static List readCsvFile() { + CsvMapper mapper = new CsvMapper(); + CsvSchema schema = CsvSchema.emptySchema().withHeader(); + + try (MappingIterator iterator = mapper + .readerFor(Person.class) + .with(schema) + .readValues(csvFile)) { + + return iterator.readAll(); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static void createCsvFile() { + List persons = generatePersons(); + + CsvMapper mapper = new CsvMapper(); + CsvSchema schema = mapper + .schemaFor(Person.class) + .withHeader(); + + try { + mapper.writer(schema).writeValue(csvFile, persons); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static List generatePersons() { + List list = new LinkedList<>(); + Faker f = new Faker(); + + for (int i = 1; i <= 1000; i++) { + list.add(new Person(i, f.internet().emailAddress(), f.options().option("active", "inactive"))); + } + + return list; + } + +} From 5603db67d97c50f0f18373604ae8b416da181490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Sat, 21 Sep 2024 18:43:54 +0200 Subject: [PATCH 462/539] reto 38 python --- Roadmap/38 - MOUREDEV PRO/python/d1d4cum.py | 36 +++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/d1d4cum.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/d1d4cum.py b/Roadmap/38 - MOUREDEV PRO/python/d1d4cum.py new file mode 100644 index 0000000000..e153928622 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/d1d4cum.py @@ -0,0 +1,36 @@ +import csv +import random + +PATH = './d1d4cum.csv' + +def main(): + active_users = [] + + with open(PATH, mode='r', newline='', encoding='utf-8') as file: + csv_reader = csv.reader(file) + next(csv_reader) + + for row in csv_reader: + if row[2] == 'activo': + active_users.append(row) + + print("> Ganador de la suscripción:") + sus_winner = random.choice(active_users) + print(f"{sus_winner[0]} - {sus_winner[1]}") + active_users.remove(sus_winner) + + print("> Ganador de un descuento:") + dis_winner = random.choice(active_users) + print(f"{dis_winner[0]} - {dis_winner[1]}") + active_users.remove(dis_winner) + + print("> Ganador de un libro:") + book_winner = random.choice(active_users) + print(f"{book_winner[0]} - {book_winner[1]}") + active_users.remove(book_winner) + + + + +if __name__ == '__main__': + main() From 63be65d66566b6b5f36413543b7cbeec983d8b68 Mon Sep 17 00:00:00 2001 From: ddanone Date: Sat, 21 Sep 2024 19:32:59 +0200 Subject: [PATCH 463/539] #38 - PHP --- Roadmap/38 - MOUREDEV PRO/php/ddanone.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/php/ddanone.php diff --git a/Roadmap/38 - MOUREDEV PRO/php/ddanone.php b/Roadmap/38 - MOUREDEV PRO/php/ddanone.php new file mode 100644 index 0000000000..4eece0593f --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/php/ddanone.php @@ -0,0 +1,14 @@ +$v){ echo sprintf("Winner %d: %s (%d)
", $k+1, explode(',',$file[$v])[1], explode(',',$file[$v])[0]); } + +// 4 líneas de código !! ;) From 0dee675b8e077144a3568f0e567a612591345cb2 Mon Sep 17 00:00:00 2001 From: h4ckxel Date: Sat, 21 Sep 2024 11:45:51 -0600 Subject: [PATCH 464/539] #11 - Bash --- .../11 - MANEJO DE FICHEROS/bash/h4ckxel.sh | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 Roadmap/11 - MANEJO DE FICHEROS/bash/h4ckxel.sh diff --git a/Roadmap/11 - MANEJO DE FICHEROS/bash/h4ckxel.sh b/Roadmap/11 - MANEJO DE FICHEROS/bash/h4ckxel.sh new file mode 100644 index 0000000000..24a7d5fdbe --- /dev/null +++ b/Roadmap/11 - MANEJO DE FICHEROS/bash/h4ckxel.sh @@ -0,0 +1,118 @@ +#!/bin/bash + +# Crear archivo con información personal +function crear_archivo() { + file="h4ckxel.txt" + f=("Me llamo H4ckxel" "Mi edad es de 23 años" "Mi lenguaje de programacion favorito es Python/Bash") + printf "%s\n" "${f[@]}" > "$file" + echo -e "\nEl archivo h4ckxel.txt ha sido creado\n" +} + +# Leer el contenido del archivo +function leer_archivo() { + cat "h4ckxel.txt" +} + +# Borrar archivo +function borrar_archivo() { + if [ -e "h4ckxel.txt" ]; then + rm "h4ckxel.txt" + echo -e "\nEl archivo 'h4ckxel.txt' ha sido eliminado\n" + else + echo -e "\nEl archivo no existe\n" + fi +} + +crear_archivo +leer_archivo +borrar_archivo + +# Parte extra: Gestión de ventas +store="sales.txt" + +# Añadir producto +function add_product() { + read -p "Nombre: " name + read -p "Cantidad vendida: " quantity + read -p "Precio: " price + echo "$name, $quantity, $price" >> "$store" +} + +# Consultar producto +function consult_product() { + read -p "Nombre: " name + grep -i "^$name," "$store" || echo "Producto no encontrado" +} + +# Eliminar producto +function delete_product() { + read -p "Nombre: " name + sed -i "/^$name,/d" "$store" +} + +# Actualizar producto +function update_product() { + delete_product + add_product +} + +# Leer archivo completo +function read_file() { + cat "$store" +} + +# Calcular ventas por producto +function product_sales() { + total=0 + read -p "Nombre: " name + while IFS=, read -r prod quantity price; do + if [[ "$prod" == "$name" ]]; then + total=$(echo "$quantity * $price" | bc) + echo -e "\nEl total de las ventas de $name es: $total\n" + return + fi + done < "$store" + echo "Producto no encontrado" +} + +# Calcular ventas totales +function total_sales() { + total=0 + while IFS=, read -r _ quantity price; do + total=$(echo "$total + $quantity * $price" | bc) + done < "$store" + echo -e "\nEl total de las ventas es: $total\n" +} + +# Salir y borrar archivo de ventas +function exit_program() { + rm -f "$store" + echo -e "[!] Archivo 'sales.txt' eliminado. Saliendo del programa...\n" +} + +# Menú de opciones +while true; do + echo -e "\n--- Menú de gestión de ventas ---" + echo "1) Añadir producto" + echo "2) Consultar producto" + echo "3) Eliminar producto" + echo "4) Actualizar producto" + echo "5) Consultar archivo completo" + echo "6) Calcular ventas por producto" + echo "7) Calcular ventas totales" + echo "8) Salir" + + read -p "Elige una opción: " option + + case $option in + 1) add_product ;; + 2) consult_product ;; + 3) delete_product ;; + 4) update_product ;; + 5) read_file ;; + 6) product_sales ;; + 7) total_sales ;; + 8) exit_program; break ;; + *) echo "Opción no válida, intenta de nuevo" ;; + esac +done From 14f7c447483edca6aa227f6f56a8bd5236afec61 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Sat, 21 Sep 2024 17:15:09 -0500 Subject: [PATCH 465/539] #16 java --- .../java/martinbohorquez.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Roadmap/16 - EXPRESIONES REGULARES/java/martinbohorquez.java diff --git a/Roadmap/16 - EXPRESIONES REGULARES/java/martinbohorquez.java b/Roadmap/16 - EXPRESIONES REGULARES/java/martinbohorquez.java new file mode 100644 index 0000000000..5d7ee97427 --- /dev/null +++ b/Roadmap/16 - EXPRESIONES REGULARES/java/martinbohorquez.java @@ -0,0 +1,60 @@ +import java.util.List; +import java.util.regex.Pattern; + +/** + * #16 EXPRESIONES REGULARES + * + * @author martinbohorquez + */ +public class martinbohorquez { + + public static void main(String[] args) { + String texto = "Achieve your goals in 2024 by setting 3 milestones per quarter, " + + "and track your progress every 30 days consistently!"; + String regex = "\\D+";// Split by non-digit characters + Pattern pattern = Pattern.compile(regex); + + List digits = pattern.splitAsStream(texto) + .filter(s -> !s.isBlank())// Filter empty elements + .toList(); + + System.out.println(digits); + + /* + * DIFICULTAD EXTRA + */ + String email = "email"; + match(email, "ma.boh_26@gmail.com"); + match(email, "ma.boh-26@gmail-peru01.com.pe"); + match(email, "ma.boh.26@gmail.com"); + match(email, "ma_boh+26@gmail.com.pe"); + match(email, "ma.boh+26@gmail.com.pe"); + String phoneNumber = "phoneNumber"; + match(phoneNumber, "+51 999 345 654"); + match(phoneNumber, "+(51) 999 345 654"); + match(phoneNumber, "999345654"); + match(phoneNumber, "+51 123 345"); + match(phoneNumber, "32 999345654"); + String url = "url"; + match(url, "http://www.google.com?name=pepe"); + match(url, "https://www.facebook.com.pe/user/id=1"); + match(url, "m.tiktok.com/live/@mark"); + match(url, "www.peru-champions.com.pe/portal/id=3"); + match(url, "instagram.com.br/login?"); + } + + private static void match(String tipo, String texto) { + String regexEmail = "^([\\w.+-]+@[\\w.-]+)$"; + String regexPhoneNumber = "^\\+?(\\(?\\d{1,3}\\)?)?(\\s\\d+)*|\\d{3,}(\\s\\d+)*$"; + String regexUrl = "^(?:https?://)?(?:(?:www|m)\\.)?((?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,})([/?]+\\S*)?$"; + + switch (tipo) { + case "email" -> + System.out.printf("El correo electrónico '%s' es válido: %b", texto, texto.matches(regexEmail)); + case "phoneNumber" -> + System.out.printf("El número telefónico '%s' es válido: %b", texto, texto.matches(regexPhoneNumber)); + case "url" -> System.out.printf("La URL '%s' es válida: %b", texto, texto.matches(regexUrl)); + } + } +} + From fb3b307418a27cf25bf1601e584e91c18c6e3051 Mon Sep 17 00:00:00 2001 From: santyjL Date: Sat, 21 Sep 2024 16:35:36 -0600 Subject: [PATCH 466/539] #28 - Python --- Roadmap/28 - SOLID LSP/python/santyjl.py | 122 +++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 Roadmap/28 - SOLID LSP/python/santyjl.py diff --git a/Roadmap/28 - SOLID LSP/python/santyjl.py b/Roadmap/28 - SOLID LSP/python/santyjl.py new file mode 100644 index 0000000000..7369c3a1fb --- /dev/null +++ b/Roadmap/28 - SOLID LSP/python/santyjl.py @@ -0,0 +1,122 @@ +#28 SOLID: PRINCIPIO DE SUSTITUCIÓN DE LISKOV (LSP) +""" +/* + * EJERCICIO: + * Explora el "Principio SOLID de Sustitución de Liskov (Liskov Substitution Principle, LSP)" + * y crea un ejemplo simple donde se muestre su funcionamiento + * de forma correcta e incorrecta. + * + * DIFICULTAD EXTRA (opcional): + * Crea una jerarquía de vehículos. Todos ellos deben poder acelerar y frenar, así como + * cumplir el LSP. + * Instrucciones: + * 1. Crea la clase Vehículo. + * 2. Añade tres subclases de Vehículo. + * 3. Implementa las operaciones "acelerar" y "frenar" como corresponda. + * 4. Desarrolla un código que compruebe que se cumple el LSP. + */ +""" + +''' +La L de SOLID alude al apellido de quien lo creó, Barbara Liskov, y dice que “las clases derivadas +deben poder sustituirse por sus clases base”. +''' + +#Mal uso +class Ave: + def volar(self): + return "El ave está volando" + +class Pinguino(Ave): + def volar(self): + # Los pingüinos no pueden volar, pero al ser una subclase de Ave, + # nos vemos obligados a implementar este método de una forma ilógica. + raise Exception("Los pingüinos no pueden volar") + +# Función que espera cualquier ave +def mover_ave(ave: Ave): + return ave.volar() + +# Creamos un objeto de la clase Pinguino +pinguino = Pinguino() + +# Intentamos volar con el pingüino, pero causa un error +print(mover_ave(pinguino)) # Error: Los pingüinos no pueden volar + +#Buen uso +class Ave: + def mover(self): + return "El ave se está moviendo" + +class AveVoladora(Ave): + def volar(self): + return "El ave está volando" + +class Pinguino(Ave): + def mover(self): + return "El pingüino está nadando" + +class Aguila(AveVoladora): + def volar(self): + return "El águila está volando alto" + +# Función que puede aceptar cualquier tipo de ave para moverse +def mover_ave(ave: Ave): + return ave.mover() + +# Función específica para aves voladoras +def volar_ave(ave: AveVoladora): + return ave.volar() + +# Creamos un pingüino y un águila +pinguino = Pinguino() +aguila = Aguila() + +# Llamamos a la función mover para ambas aves +print(mover_ave(pinguino)) # Salida: El pingüino está nadando +print(mover_ave(aguila)) # Salida: El ave se está moviendo + +# Llamamos a la función volar solo para aves voladoras +print(volar_ave(aguila)) # Salida: El águila está volando alto + +#Extra +class Vehiculo: + def acelerar(): + return f"El Vehiculo esta Acelerando" + + def frenar(): + return f"El vehiculo esta Frenando" + +class Moto(Vehiculo): + def acelerar(): + return f"La Moto esta Acelerando" + + def frenar(): + return f"La Moto esta Frenando" + +class Carro(Vehiculo): + def acelerar(): + return f"El Carro esta Acelerando" + + def frenar(): + return f"El Carro esta Frenando" + +class Bus(Vehiculo): + def acelerar(): + return f"El Bus esta Acelerando" + + def frenar(): + return f"El Bus esta Frenando" + +moto = Moto +carro = Carro +bus = Bus + +print(moto.acelerar()) +print(moto.frenar()) + +print(carro.acelerar()) +print(carro.frenar()) + +print(bus.acelerar()) +print(bus.frenar()) \ No newline at end of file From 5856d88a0ab9b715740c02df5d8b35768ce3ad36 Mon Sep 17 00:00:00 2001 From: Fernando Molina Date: Sat, 21 Sep 2024 18:14:57 -0500 Subject: [PATCH 467/539] Create nfom24.js --- .../javascript/nfom24.js | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/nfom24.js diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/nfom24.js b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/nfom24.js new file mode 100644 index 0000000000..410d6e331b --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/javascript/nfom24.js @@ -0,0 +1,50 @@ +/* 1.Crea un comentario en el código y coloca la URL del sitio web oficial del +lenguaje de programación que has seleccionado.*/ + +// https://developer.mozilla.org/es/docs/Web/JavaScript + +/* 2.Representa las diferentes sintaxis que existen de crear comentarios +en el lenguaje (en una línea, varias...)*/ + +function comment() { + // Este es un comentario JavaScript de una línea + console.log("¡Hola mundo!"); + } + comment(); + + function comment() { + /*Este es un comentario + JavaScript de varias líneas*/ + console.log("¡Hola mundo!"); + } + comment(); + +// 3.Crea una variable (y una constante si el lenguaje lo soporta). + +//antes del ES6 las variables solo se declaraban con VAR + +var javascript = true; +var edad = 18; +var precio = 9.99; +var nombre = 'Juan'; + +let javascript = true; +let edad = 18; +let precio = 9.99; +let nombre = 'Juan'; + +const nombre = 'Juan'; // Es necesario agregar un valor +// const nombre; Si la constante no tiene valor genera error + +/* 4.Crea variables representando todos los tipos de datos primitivos +del lenguaje (cadenas de texto, enteros, booleanos...)*/ + +let javascript = true; // boolean +let edad = 18; // Entero +let precio = 9.99; // Float +let nombre = 'Juan'; // String + +// 5.Imprime por terminal el texto: "¡Hola, [y el nombre de tu lenguaje]!" + +let nombre = 'JavaScript'; + console.log("Hola" + nombre) \ No newline at end of file From e2c19f22a48e893ad41db6f8349c006dfac634da Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Sat, 21 Sep 2024 18:44:37 -0500 Subject: [PATCH 468/539] #17 java --- .../java/martinbohorquez.java | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 Roadmap/17 - ITERACIONES/java/martinbohorquez.java diff --git a/Roadmap/17 - ITERACIONES/java/martinbohorquez.java b/Roadmap/17 - ITERACIONES/java/martinbohorquez.java new file mode 100644 index 0000000000..f670b4f2b7 --- /dev/null +++ b/Roadmap/17 - ITERACIONES/java/martinbohorquez.java @@ -0,0 +1,77 @@ +import java.util.*; + +/** + * #17 ITERACIONES + * + * @author martinbohorquez + */ +public class martinbohorquez { + public static void main(String[] args) { + // 1. for + System.out.println("1. Iteración usando 'for':"); + for (int i = 1; i <= 10; i++) System.out.println(i); + + // 2. while + System.out.println("2. Iteración usando 'while':"); + int i = 1; + while (i <= 10) System.out.println(i++); + + // 3. recursividad + System.out.println("3. Iteración usando 'función recursiva':"); + count10(1); + + /* + * DIFICULTAD EXTRA + */ + //4. Array y for + System.out.println("4. Iteración usando 'array con fori'"); + int[] numbers = {6, 5, 4, 3, 2, 1}; + for (int number : numbers) System.out.println(number); + + //5. Stream y forEach + System.out.println("5. Iteración usando 'stream con forEach'"); + Arrays.stream(numbers).forEach(System.out::println); + + // 6. Lista, reversed y forEach + System.out.println("6. Iteración usando 'lista con forEach(reversed)'"); + Arrays.asList(1, 2, 3, 4).reversed().forEach(System.out::println); + + //7 String, split, stream y forEach + System.out.println("7. Iteración para una 'string' (sorted) usando 'split, stream y forEach'"); + String word = "strawberry"; + Arrays.stream(word.split("")).sorted().forEach(System.out::println); + + // 8. Map, keySet, values, forEach + System.out.println("8. Iteración para una 'map' por keys/values usando 'forEach'"); + Map map = new HashMap<>(); + map.put(1, "a"); + map.put(2, "b"); + map.put(3, "c"); + map.put(4, "d"); + map.put(5, "e"); + map.keySet().forEach(System.out::println); + map.values().forEach(System.out::println); + map.forEach((key, value) -> System.out.println(key + ": " + value)); + + // 9. do-while + System.out.println("9. Iteración usando 'do-while':"); + i = 10; + do { + System.out.println(i--); + } while (i >= 1); + + // 10. set, iterator + System.out.println("10. Iteración de un 'set' usando 'iterator':"); + Set set = new HashSet<>(Arrays.asList("a", "b", "c", "d", "e")); + Iterator iterator = set.iterator(); + iterator.forEachRemaining(System.out::println); + + } + + private static void count10(int i) { + if (i <= 10) { + System.out.println(i); + count10(++i); + } + } +} From 38cf82851249b5e4d2fe0676f5ec90e413a804e0 Mon Sep 17 00:00:00 2001 From: mouredev Date: Sun, 22 Sep 2024 00:17:01 +0000 Subject: [PATCH 469/539] Update stats --- Roadmap/stats.json | 320 ++++++++++++++++++++++----------------------- 1 file changed, 160 insertions(+), 160 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index ddd0796d98..d0217f4153 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,7 +1,7 @@ { "challenges_total": 39, "languages_total": 48, - "files_total": 7186, + "files_total": 7191, "users_total": 1201, "challenges_ranking": [ { @@ -192,26 +192,26 @@ { "order": 38, "name": "37 - OASIS VS LINKIN PARK", - "count": 32 + "count": 35 }, { "order": 39, "name": "38 - MOUREDEV PRO", - "count": 22 + "count": 24 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 3095, + "count": 3097, "percentage": 43.07 }, { "order": 2, "name": "javascript", "count": 1414, - "percentage": 19.68 + "percentage": 19.66 }, { "order": 3, @@ -222,8 +222,8 @@ { "order": 4, "name": "typescript", - "count": 323, - "percentage": 4.49 + "count": 325, + "percentage": 4.52 }, { "order": 5, @@ -240,8 +240,8 @@ { "order": 7, "name": "go", - "count": 217, - "percentage": 3.02 + "count": 218, + "percentage": 3.03 }, { "order": 8, @@ -506,7 +506,7 @@ { "order": 3, "name": "hozlucas28", - "count": 105, + "count": 109, "languages": 3 }, { @@ -2701,877 +2701,877 @@ }, { "order": 369, - "name": "jairo-alejandro", + "name": "johnalexguerrero", "count": 4, "languages": 1 }, { "order": 370, - "name": "quejuan52", + "name": "jairo-alejandro", "count": 4, "languages": 1 }, { "order": 371, - "name": "abel-ade", + "name": "quejuan52", "count": 4, "languages": 1 }, { "order": 372, - "name": "angelo-eyama", - "count": 3, - "languages": 3 + "name": "abel-ade", + "count": 4, + "languages": 1 }, { "order": 373, - "name": "owen-ian", + "name": "angelo-eyama", "count": 3, "languages": 3 }, { "order": 374, - "name": "akaisombra", + "name": "owen-ian", "count": 3, "languages": 3 }, { "order": 375, - "name": "abelsrzz", + "name": "akaisombra", "count": 3, "languages": 3 }, { "order": 376, - "name": "jehiselruth", + "name": "abelsrzz", "count": 3, "languages": 3 }, { "order": 377, - "name": "oskarcali", + "name": "jehiselruth", "count": 3, "languages": 3 }, { "order": 378, - "name": "eloitr", + "name": "oskarcali", "count": 3, - "languages": 2 + "languages": 3 }, { "order": 379, - "name": "diegopc-dev", + "name": "eloitr", "count": 3, "languages": 2 }, { "order": 380, - "name": "dimasb69", + "name": "diegopc-dev", "count": 3, "languages": 2 }, { "order": 381, - "name": "seba9906", + "name": "dimasb69", "count": 3, "languages": 2 }, { "order": 382, - "name": "arliumdev", + "name": "seba9906", "count": 3, "languages": 2 }, { "order": 383, - "name": "robindev1812", + "name": "arliumdev", "count": 3, "languages": 2 }, { "order": 384, - "name": "alfarog507", + "name": "robindev1812", "count": 3, "languages": 2 }, { "order": 385, - "name": "skala2301", + "name": "alfarog507", "count": 3, "languages": 2 }, { "order": 386, - "name": "augustosdev", + "name": "skala2301", "count": 3, "languages": 2 }, { "order": 387, - "name": "clotrack", + "name": "augustosdev", "count": 3, "languages": 2 }, { "order": 388, - "name": "pablotaber", + "name": "clotrack", "count": 3, "languages": 2 }, { "order": 389, - "name": "allanoscoding", + "name": "pablotaber", "count": 3, "languages": 2 }, { "order": 390, - "name": "n-skot", + "name": "allanoscoding", "count": 3, "languages": 2 }, { "order": 391, - "name": "bryanalzate007", + "name": "n-skot", "count": 3, - "languages": 1 + "languages": 2 }, { "order": 392, - "name": "tonywarcode", + "name": "bryanalzate007", "count": 3, "languages": 1 }, { "order": 393, - "name": "exanderguitar", + "name": "tonywarcode", "count": 3, "languages": 1 }, { "order": 394, - "name": "elkin-dev", + "name": "exanderguitar", "count": 3, "languages": 1 }, { "order": 395, - "name": "carlosalberto05", + "name": "elkin-dev", "count": 3, "languages": 1 }, { "order": 396, - "name": "minn09", + "name": "carlosalberto05", "count": 3, "languages": 1 }, { "order": 397, - "name": "jorgegarcia-dev", + "name": "minn09", "count": 3, "languages": 1 }, { "order": 398, - "name": "guillesese", + "name": "jorgegarcia-dev", "count": 3, "languages": 1 }, { "order": 399, - "name": "tekatoki", + "name": "guillesese", "count": 3, "languages": 1 }, { "order": 400, - "name": "dandrusco", + "name": "tekatoki", "count": 3, "languages": 1 }, { "order": 401, - "name": "estelacode", + "name": "dandrusco", "count": 3, "languages": 1 }, { "order": 402, - "name": "strooplab", + "name": "estelacode", "count": 3, "languages": 1 }, { "order": 403, - "name": "monikgbar", + "name": "strooplab", "count": 3, "languages": 1 }, { "order": 404, - "name": "mstaz4", + "name": "monikgbar", "count": 3, "languages": 1 }, { "order": 405, - "name": "ramon-almeida", + "name": "mstaz4", "count": 3, "languages": 1 }, { "order": 406, - "name": "oscarhub90", + "name": "ramon-almeida", "count": 3, "languages": 1 }, { "order": 407, - "name": "artdugarte", + "name": "oscarhub90", "count": 3, "languages": 1 }, { "order": 408, - "name": "elder202", + "name": "artdugarte", "count": 3, "languages": 1 }, { "order": 409, - "name": "bertolini-victor", + "name": "elder202", "count": 3, "languages": 1 }, { "order": 410, - "name": "oscargeovannyrincon", + "name": "bertolini-victor", "count": 3, "languages": 1 }, { "order": 411, - "name": "rgeditv1", + "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { "order": 412, - "name": "frostbitepy", + "name": "rgeditv1", "count": 3, "languages": 1 }, { "order": 413, - "name": "antii16", + "name": "frostbitepy", "count": 3, "languages": 1 }, { "order": 414, - "name": "mmacalli", + "name": "antii16", "count": 3, "languages": 1 }, { "order": 415, - "name": "eliskopun", + "name": "mmacalli", "count": 3, "languages": 1 }, { "order": 416, - "name": "jofedev", + "name": "eliskopun", "count": 3, "languages": 1 }, { "order": 417, - "name": "suescun845", + "name": "jofedev", "count": 3, "languages": 1 }, { "order": 418, - "name": "yeam-10", + "name": "suescun845", "count": 3, "languages": 1 }, { "order": 419, - "name": "joandevpy", + "name": "yeam-10", "count": 3, "languages": 1 }, { "order": 420, - "name": "macova96", + "name": "joandevpy", "count": 3, "languages": 1 }, { "order": 421, - "name": "beonzj", + "name": "macova96", "count": 3, "languages": 1 }, { "order": 422, - "name": "betzadev", + "name": "beonzj", "count": 3, "languages": 1 }, { "order": 423, - "name": "javitron100", + "name": "betzadev", "count": 3, "languages": 1 }, { "order": 424, - "name": "mizadlogcia", + "name": "javitron100", "count": 3, "languages": 1 }, { "order": 425, - "name": "emilianohoyos", + "name": "mizadlogcia", "count": 3, "languages": 1 }, { "order": 426, - "name": "camilo-zuluaga", + "name": "emilianohoyos", "count": 3, "languages": 1 }, { "order": 427, - "name": "zzepu", + "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { "order": 428, - "name": "danielperezrubio", + "name": "zzepu", "count": 3, "languages": 1 }, { "order": 429, - "name": "marcoh2325", + "name": "danielperezrubio", "count": 3, "languages": 1 }, { "order": 430, - "name": "nathaliamf", + "name": "marcoh2325", "count": 3, "languages": 1 }, { "order": 431, - "name": "jacarrillob", + "name": "nathaliamf", "count": 3, "languages": 1 }, { "order": 432, - "name": "fdcorreadev", + "name": "jacarrillob", "count": 3, "languages": 1 }, { "order": 433, - "name": "matiascba27", + "name": "fdcorreadev", "count": 3, "languages": 1 }, { "order": 434, - "name": "andresargote", + "name": "matiascba27", "count": 3, "languages": 1 }, { "order": 435, - "name": "victorsschz", + "name": "andresargote", "count": 3, "languages": 1 }, { "order": 436, - "name": "faga01", + "name": "victorsschz", "count": 3, "languages": 1 }, { "order": 437, - "name": "dariorfm", + "name": "faga01", "count": 3, "languages": 1 }, { "order": 438, - "name": "hectoriglesias", + "name": "dariorfm", "count": 3, "languages": 1 }, { "order": 439, - "name": "josueeeee", + "name": "hectoriglesias", "count": 3, "languages": 1 }, { "order": 440, - "name": "fernandog25", + "name": "josueeeee", "count": 3, "languages": 1 }, { "order": 441, - "name": "migueltfangche", + "name": "fernandog25", "count": 3, "languages": 1 }, { "order": 442, - "name": "emaenriquez", + "name": "migueltfangche", "count": 3, "languages": 1 }, { "order": 443, - "name": "matrix-miguel", + "name": "emaenriquez", "count": 3, "languages": 1 }, { "order": 444, - "name": "r4kso", + "name": "matrix-miguel", "count": 3, "languages": 1 }, { "order": 445, - "name": "davidb313", + "name": "r4kso", "count": 3, "languages": 1 }, { "order": 446, - "name": "arbenisacosta", + "name": "davidb313", "count": 3, "languages": 1 }, { "order": 447, - "name": "sebascmb", + "name": "arbenisacosta", "count": 3, "languages": 1 }, { "order": 448, - "name": "jelozanov", + "name": "sebascmb", "count": 3, "languages": 1 }, { "order": 449, - "name": "singularpigeon", + "name": "jelozanov", "count": 3, "languages": 1 }, { "order": 450, - "name": "asaelz", + "name": "singularpigeon", "count": 3, "languages": 1 }, { "order": 451, - "name": "gpinedaoviedo", + "name": "asaelz", "count": 3, "languages": 1 }, { "order": 452, - "name": "orlas135", + "name": "gpinedaoviedo", "count": 3, "languages": 1 }, { "order": 453, - "name": "zuluangel", + "name": "orlas135", "count": 3, "languages": 1 }, { "order": 454, - "name": "uyarra73", + "name": "zuluangel", "count": 3, "languages": 1 }, { "order": 455, - "name": "sandracalatayud", + "name": "uyarra73", "count": 3, "languages": 1 }, { "order": 456, - "name": "agusbelp", + "name": "sandracalatayud", "count": 3, "languages": 1 }, { "order": 457, - "name": "ahinar", + "name": "agusbelp", "count": 3, "languages": 1 }, { "order": 458, - "name": "magupe09", + "name": "ahinar", "count": 3, "languages": 1 }, { "order": 459, - "name": "daniback95", + "name": "magupe09", "count": 3, "languages": 1 }, { "order": 460, - "name": "hatorob", + "name": "daniback95", "count": 3, "languages": 1 }, { "order": 461, - "name": "erysnell", + "name": "hatorob", "count": 3, "languages": 1 }, { "order": 462, - "name": "legs30011", + "name": "erysnell", "count": 3, "languages": 1 }, { "order": 463, - "name": "andyfg0289", + "name": "legs30011", "count": 3, "languages": 1 }, { "order": 464, - "name": "14davidnkt", + "name": "andyfg0289", "count": 3, "languages": 1 }, { "order": 465, - "name": "samuelarandia", + "name": "14davidnkt", "count": 3, "languages": 1 }, { "order": 466, - "name": "jaimerocel96", + "name": "samuelarandia", "count": 3, "languages": 1 }, { "order": 467, - "name": "gitperalta", + "name": "jaimerocel96", "count": 3, "languages": 1 }, { "order": 468, - "name": "dannyvera1234", + "name": "gitperalta", "count": 3, "languages": 1 }, { "order": 469, - "name": "axelsparta", + "name": "dannyvera1234", "count": 3, "languages": 1 }, { "order": 470, - "name": "tebaah", + "name": "axelsparta", "count": 3, "languages": 1 }, { "order": 471, - "name": "matteozhao98", + "name": "tebaah", "count": 3, "languages": 1 }, { "order": 472, - "name": "crisvigas", + "name": "matteozhao98", "count": 3, "languages": 1 }, { "order": 473, - "name": "tomytsa", + "name": "crisvigas", "count": 3, "languages": 1 }, { "order": 474, - "name": "blfuentes", + "name": "tomytsa", "count": 3, "languages": 1 }, { "order": 475, - "name": "sebasgrdev", + "name": "blfuentes", "count": 3, "languages": 1 }, { "order": 476, - "name": "sitnestic", + "name": "sebasgrdev", "count": 3, "languages": 1 }, { "order": 477, - "name": "confley", + "name": "sitnestic", "count": 3, "languages": 1 }, { "order": 478, - "name": "francofmv", + "name": "confley", "count": 3, "languages": 1 }, { "order": 479, - "name": "david-quinones", + "name": "francofmv", "count": 3, "languages": 1 }, { "order": 480, - "name": "marce1084", + "name": "david-quinones", "count": 3, "languages": 1 }, { "order": 481, - "name": "freedainew", + "name": "marce1084", "count": 3, "languages": 1 }, { "order": 482, - "name": "rubioj17", + "name": "freedainew", "count": 3, "languages": 1 }, { "order": 483, - "name": "kine-jdf", + "name": "rubioj17", "count": 3, "languages": 1 }, { "order": 484, - "name": "kingsaul22", + "name": "kine-jdf", "count": 3, "languages": 1 }, { "order": 485, - "name": "ainoaran", + "name": "kingsaul22", "count": 3, "languages": 1 }, { "order": 486, - "name": "fluna29", + "name": "ainoaran", "count": 3, "languages": 1 }, { "order": 487, - "name": "xurxogz", + "name": "fluna29", "count": 3, "languages": 1 }, { "order": 488, - "name": "davidsorroche", + "name": "xurxogz", "count": 3, "languages": 1 }, { "order": 489, - "name": "natalinacn", + "name": "davidsorroche", "count": 3, "languages": 1 }, { "order": 490, - "name": "yaretzyrb", + "name": "natalinacn", "count": 3, "languages": 1 }, { "order": 491, - "name": "swifty0705", + "name": "yaretzyrb", "count": 3, "languages": 1 }, { "order": 492, - "name": "marianoemir", + "name": "swifty0705", "count": 3, "languages": 1 }, { "order": 493, - "name": "guido2288", + "name": "marianoemir", "count": 3, "languages": 1 }, { "order": 494, - "name": "githjuan", + "name": "guido2288", "count": 3, "languages": 1 }, { "order": 495, - "name": "rocallejas", + "name": "githjuan", "count": 3, "languages": 1 }, { "order": 496, - "name": "jeyker-dev", + "name": "rocallejas", "count": 3, "languages": 1 }, { "order": 497, - "name": "barbafebles", + "name": "jeyker-dev", "count": 3, "languages": 1 }, { "order": 498, - "name": "aggranadoss", + "name": "barbafebles", "count": 3, "languages": 1 }, { "order": 499, - "name": "heliercamejo", + "name": "aggranadoss", "count": 3, "languages": 1 }, { "order": 500, - "name": "coshiloco", + "name": "heliercamejo", "count": 3, "languages": 1 }, { "order": 501, - "name": "atienzar", + "name": "coshiloco", "count": 3, "languages": 1 }, { "order": 502, - "name": "javiearth", + "name": "atienzar", "count": 3, "languages": 1 }, { "order": 503, - "name": "marlonleon2023", + "name": "javiearth", "count": 3, "languages": 1 }, { "order": 504, - "name": "vandresca", + "name": "marlonleon2023", "count": 3, "languages": 1 }, { "order": 505, - "name": "ggtorca", + "name": "vandresca", "count": 3, "languages": 1 }, { "order": 506, - "name": "ivanpelu7", + "name": "ggtorca", "count": 3, "languages": 1 }, { "order": 507, - "name": "alejomazov", + "name": "ivanpelu7", "count": 3, "languages": 1 }, { "order": 508, - "name": "oscar503sv", + "name": "alejomazov", "count": 3, "languages": 1 }, { "order": 509, - "name": "dmauricio4", + "name": "oscar503sv", "count": 3, "languages": 1 }, { "order": 510, - "name": "davidr1594", + "name": "dmauricio4", "count": 3, "languages": 1 }, { "order": 511, - "name": "mellamoomar", + "name": "davidr1594", "count": 3, "languages": 1 }, { "order": 512, - "name": "ikeragi05", + "name": "mellamoomar", "count": 3, "languages": 1 }, { "order": 513, - "name": "nikorasu-d", + "name": "ikeragi05", "count": 3, "languages": 1 }, { "order": 514, - "name": "johnalexguerrero", + "name": "nikorasu-d", "count": 3, "languages": 1 }, From 6be1581379aa9c3d32e1b82526e1d248d5cc2458 Mon Sep 17 00:00:00 2001 From: oxtornado Date: Sat, 21 Sep 2024 19:39:39 -0500 Subject: [PATCH 470/539] #0-python --- .../python/oxtornado.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/oxtornado.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/oxtornado.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/oxtornado.py new file mode 100644 index 0000000000..05bb80d902 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/oxtornado.py @@ -0,0 +1,21 @@ +# https://www.python.org/ + +# comments conventions: +# +# this way + +""" +or this way +""" + +variable = 123 +CONSTANTE = "i'm a constant" + +# primitive variables + +string_variable = "i'm a string" +boolean_variable = False +integer_variable = 25 +float_variable = 12.12 + +print('¡Hola, python! hope we get along') \ No newline at end of file From 8f1d837ca0914faef48b33cff01be85edf2dc873 Mon Sep 17 00:00:00 2001 From: hozlucas28 Date: Sun, 22 Sep 2024 00:13:30 -0300 Subject: [PATCH 471/539] Solution 38 - Go --- Roadmap/38 - MOUREDEV PRO/go/hozlucas28.go | 132 +++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/go/hozlucas28.go diff --git a/Roadmap/38 - MOUREDEV PRO/go/hozlucas28.go b/Roadmap/38 - MOUREDEV PRO/go/hozlucas28.go new file mode 100644 index 0000000000..7c7d0c7780 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/go/hozlucas28.go @@ -0,0 +1,132 @@ +package main + +import ( + "encoding/csv" + "fmt" + "math/rand" + "os" + "slices" + "strings" +) + +/* -------------------------------------------------------------------------- */ +/* STRUCTURES */ +/* -------------------------------------------------------------------------- */ + +type User struct { + Email string + ID string + Status string + _ struct{} +} + +/* -------------------------------------------------------------------------- */ +/* FUNCTIONS */ +/* -------------------------------------------------------------------------- */ + +func createCSV(content *[][]string, path string) error { + csvFile, err := os.Create(path) + if err != nil { + return err + } + defer csvFile.Close() + + writer := csv.NewWriter(csvFile) + defer writer.Flush() + + err = writer.WriteAll(*content) + if err != nil { + return err + } + + return nil +} + +func getCSVData(path string) (*[][]string, error) { + var csvData [][]string + + csvFileContent, err := os.ReadFile(path) + if err != nil { + return &csvData, err + } + + reader := csv.NewReader(strings.NewReader(string(csvFileContent))) + + csvData, err = reader.ReadAll() + if err != nil { + return &csvData, err + } + + return &csvData, nil +} + +func getUniqueChoices(choices *[]User, nUniqueChoices int) *[]*User { + var uniqueChoices []*User + + for len(uniqueChoices) < nUniqueChoices { + var rndIndex int = rand.Intn(len(*choices)) + var rndChoice *User = &(*choices)[rndIndex] + + if !slices.Contains(uniqueChoices, rndChoice) { + uniqueChoices = append(uniqueChoices, rndChoice) + } + } + + return &uniqueChoices +} + +/* -------------------------------------------------------------------------- */ +/* MAIN */ +/* -------------------------------------------------------------------------- */ + +func main() { + var csvContent [][]string = [][]string{ + {"email", "id", "status"}, + {"test01@gmail.com", "1", "active"}, + {"test02@gmail.com", "2", "inactive"}, + {"test03@gmail.com", "3", "inactive"}, + {"test04@gmail.com", "4", "active"}, + {"test05@gmail.com", "5", "inactive"}, + {"test06@gmail.com", "6", "active"}, + {"test07@gmail.com", "7", "active"}, + {"test08@gmail.com", "8", "active"}, + } + + var err error = createCSV(&csvContent, "./users.csv") + if err != nil { + panic(err) + } + + csvUsers, err := getCSVData("./users.csv") + if err != nil { + panic(err) + } + + var users []User + for _, csvUser := range (*csvUsers)[1:] { + var user User = User{ + Email: csvUser[0], + ID: csvUser[1], + Status: csvUser[2], + } + + users = append(users, user) + } + + users = slices.DeleteFunc(users, func(user User) bool { + return user.Status == "inactive" + }) + + var winners *[]*User = getUniqueChoices(&users, 3) + + fmt.Println(winners) + + fmt.Println("> The first winner is...") + fmt.Printf("> Congratulations %s with id %s, you won a subscription!\n", (*winners)[0].Email, (*winners)[0].ID) + + fmt.Println("\n> The second winner is...") + fmt.Printf("> Congratulations %s with id %s, you won a discount!\n", (*winners)[1].Email, (*winners)[1].ID) + + fmt.Println("\n> The third winner is...") + fmt.Printf("> Congratulations %s with id %s, you won a book!", (*winners)[2].Email, (*winners)[2].ID) +} From 78c283cd5169e92f76c308b59e5b0a155dc02b67 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Sat, 21 Sep 2024 23:11:12 -0500 Subject: [PATCH 472/539] #18 java --- .../18 - CONJUNTOS/java/martinbohorquez.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Roadmap/18 - CONJUNTOS/java/martinbohorquez.java diff --git a/Roadmap/18 - CONJUNTOS/java/martinbohorquez.java b/Roadmap/18 - CONJUNTOS/java/martinbohorquez.java new file mode 100644 index 0000000000..0685ea91f0 --- /dev/null +++ b/Roadmap/18 - CONJUNTOS/java/martinbohorquez.java @@ -0,0 +1,69 @@ +import java.util.*; + +/** + * #18 CONJUNTOS + * + * @author martinbohorquez + */ +public class martinbohorquez { + public static void main(String[] args) { + List lista = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)); + System.out.printf("La lista mutable: %s%n", lista); + // Añade un elemento al final. + lista.add(6); + System.out.printf("Añadimos un elementos al final de la lista: %s%n", lista); + // Añade un elemento al principio. + lista.addFirst(0); + System.out.printf("Añadimos un elementos al inicio de la lista: %s%n", lista); + // Añade varios elementos en bloque al final. + lista.addAll(List.of(7, 8, 9)); + System.out.printf("Añadimos un conjunto de elementos al final de la lista: %s%n", lista); + // Añade varios elementos en bloque en una posición concreta. + lista.addAll(4, List.of(31, 32, 33)); + System.out.printf("Añadimos un conjunto de elementos a la lista: %s%n", lista); + // Elimina un elemento en una posición concreta. + lista.remove(4); + System.out.printf("Eliminamos el 5to elemento de la lista: %s%n", lista); + // Actualiza el valor de un elemento en una posición concreta. + lista.set(5, 36); + System.out.printf("Actualizamos el 6to elemento de la lista: %s%n", lista); + // Comprueba si un elemento está en un conjunto. + int num = 32; + System.out.printf("Lista contiene el elemento '%d': %b%n", num, lista.contains(num)); + // Eliminar todos los elementos de la lista. + lista.clear(); + System.out.printf("Todos los elementos de la lista han sido eliminados: %s%n", lista); + + /* + * DIFICULTAD EXTRA + */ + Set lista1 = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5)); + Set lista2 = new HashSet<>(Arrays.asList(7, 6, 5, 4, 3)); + + Set union = new LinkedHashSet<>(lista1); + union.addAll(lista2); + System.out.printf("La unión de ambas listas es: %s%n", union); + + Set intersection = new LinkedHashSet<>(lista1); + intersection.retainAll(lista2); + System.out.printf("La intersección de ambas listas es: %s%n", intersection); + + Set difference1 = new LinkedHashSet<>(lista1); + difference1.removeAll(lista2); + System.out.printf("La diferencia de lista1 respecto a la lista2 es: %s%n", difference1); + + Set difference2 = new LinkedHashSet<>(lista2); + difference2.removeAll(lista1); + System.out.printf("La diferencia de lista2 respecto a la lista1 es: %s%n", difference2); + + Set symDifference = new LinkedHashSet<>(difference1); + symDifference.addAll(difference2); + System.out.printf("La diferencia simétrica de las listas es: %s%n", symDifference); + + symDifference = new LinkedHashSet<>(union); + symDifference.removeAll(intersection); + System.out.printf("La diferencia simétrica de las listas es: %s%n", symDifference); + + + } +} From 4606ee3e4e0eb84a94f63715ba0f975e891f0f12 Mon Sep 17 00:00:00 2001 From: h4ckxel Date: Sun, 22 Sep 2024 00:16:47 -0600 Subject: [PATCH 473/539] #12 - Python --- Roadmap/12 - JSON Y XML/python/h4ckxel.py | 449 ++++++++++++++++++++++ 1 file changed, 449 insertions(+) create mode 100644 Roadmap/12 - JSON Y XML/python/h4ckxel.py diff --git a/Roadmap/12 - JSON Y XML/python/h4ckxel.py b/Roadmap/12 - JSON Y XML/python/h4ckxel.py new file mode 100644 index 0000000000..07b73ada6e --- /dev/null +++ b/Roadmap/12 - JSON Y XML/python/h4ckxel.py @@ -0,0 +1,449 @@ +"""Operation system module""" + +from typing import TypedDict, Self +import datetime +import json +import os +import xml.etree.ElementTree as xmlTree + + +""" + JSON and XML files... +""" + +print("JSON and XML files...\n") + +JsonContent = TypedDict( + "JsonContent", + {"age": int, "bornDate": str, "name": str, "programmingLanguages": list[str]}, +) + +XmlContent = TypedDict( + "XmlContent", + { + "age": int, + "born-date": str, + "name": str, + "programming-languages": dict[str, str], + }, +) + +JSON_FILE_PATH: str = "author.json" +XML_FILE_PATH: str = "author.xml" + +# Delete files if exist +if os.path.exists(path=JSON_FILE_PATH): + os.remove(path=JSON_FILE_PATH) + +if os.path.exists(path=XML_FILE_PATH): + os.remove(path=XML_FILE_PATH) + +# Create files and write content +born_date = datetime.datetime(year=2002, month=2, day=20) + +with open(file=JSON_FILE_PATH, mode="w", encoding="utf8") as __file: + json_content: JsonContent = { + "age": 22, + "bornDate": born_date.strftime(format="%d/%m/%Y, %H:%M:%S"), + "name": "Lucas", + "programmingLanguages": ["TypeScript", "Python", "Go (Golang)"], + } + + stringified_json: str = json.dumps(obj=json_content, indent=4, sort_keys=True) + __file.writelines(stringified_json) + __file.close() + + +def dict_to_xml( + dictionary: dict, parent: None | xmlTree.Element = None +) -> xmlTree.Element: + """Transform a dictionary to a XML tree""" + root: xmlTree.Element = xmlTree.Element("root") if parent is None else parent + + for key, value in dictionary.items(): + line: xmlTree.Element = xmlTree.SubElement(root, key) + if isinstance(value, dict): + line: xmlTree.Element = dict_to_xml(dictionary=value, parent=line) + continue + + line.text = str(object=value) + + return root + + +with open(file=XML_FILE_PATH, mode="w", encoding="utf8") as __file: + xml_content: XmlContent = { + "age": 22, + "born-date": born_date.strftime(format="%d/%m/%Y, %H:%M:%S"), + "name": "Lucas", + "programming-languages": { + "typescript": "TypeScript", + "python": "Python", + "go": "Go (Golang)", + }, + } + + xml: xmlTree.Element = dict_to_xml(dictionary=dict(xml_content)) + + stringified_xml: str = xmlTree.tostring(element=xml).decode(encoding="utf8") + __file.write(stringified_xml) + __file.close() + + +# Print files content +with open(file=JSON_FILE_PATH, mode="r", encoding="utf8") as __file: + for __line in __file.readlines(): + print(__line.replace("\n", "")) + __file.close() + +print() + + +with open(file=XML_FILE_PATH, mode="r", encoding="utf8") as __file: + for __line in __file.readlines(): + print(__line) + __file.close() + +# Delete files +os.remove(path=JSON_FILE_PATH) +os.remove(path=XML_FILE_PATH) + +print( + "\n# ---------------------------------------------------------------------------------- #\n" +) + +""" + Additional challenge... +""" + +print("Additional challenge...") + + +class JsonFile: + """JSON file class""" + + __path: str + __is_deleted: bool + + def __init__(self, path, initial_content: JsonContent) -> None: + self.__path = path + self.__is_deleted = False + self.__write_content(content=initial_content) + + def get_content(self) -> JsonContent: + """Return file content""" + self.__validate() + + with open(file=self.__path, mode="r", encoding="utf8") as __file: + __content: JsonContent = json.load(fp=__file) + __file.close() + + return __content + + def __validate(self) -> None: + if self.__is_deleted: + raise FileNotFoundError + + def __write_content(self, content: JsonContent) -> Self: + __stringified_content: str = json.dumps(obj=content, indent=4, sort_keys=True) + + with open(file=self.__path, mode="w", encoding="utf8") as __file: + __file.write(__stringified_content) + __file.close() + + return self + + def append_language(self, __programming_language: str) -> Self: + """Append programming language to "programmingLanguages" key""" + self.__validate() + + __content: JsonContent = self.get_content() + __content["programmingLanguages"].append(__programming_language) + self.__write_content(content=__content) + + return self + + def delete_file(self) -> None: + """Delete file""" + self.__validate() + os.remove(path=self.__path) + self.__is_deleted = True + + def remove_language(self, __programming_language: str) -> Self: + """Delete programming language inside "programmingLanguages" key""" + self.__validate() + + __content: JsonContent = self.get_content() + + try: + for _, __language in enumerate(iterable=__content["programmingLanguages"]): + if __language.upper() == __programming_language.upper(): + __content["programmingLanguages"].remove(__language) + except ValueError: + pass + + self.__write_content(content=__content) + + return self + + def update_age(self, __age: int) -> Self: + """Update age""" + self.__validate() + + __content: JsonContent = self.get_content() + __content["age"] = __age + self.__write_content(content=__content) + + return self + + def update_born_date(self, __born_date: datetime.date) -> Self: + """Update born date""" + self.__validate() + + __content: JsonContent = self.get_content() + __content["bornDate"] = __born_date.strftime(format="%d/%m/%Y, %H:%M:%S") + self.__write_content(content=__content) + + return self + + def update_name(self, __name: str) -> Self: + """Update name""" + self.__validate() + + __content: JsonContent = self.get_content() + __content["name"] = __name + self.__write_content(content=__content) + + return self + + +class XmlFile: + """XML file class""" + + __path: str + __is_deleted: bool + + def __init__(self, path, initial_content: XmlContent) -> None: + self.__path = path + self.__is_deleted = False + self.__write_content(content=initial_content) + + def get_content(self) -> XmlContent: + """Return file content""" + self.__validate() + + __content: XmlContent = { + "age": 0, + "born-date": "", + "name": "", + "programming-languages": {}, + } + __xml: xmlTree.ElementTree = xmlTree.parse(self.__path) + + __age: xmlTree.Element | None = __xml.find("age") + __born_date: xmlTree.Element | None = __xml.find("born-date") + __name: xmlTree.Element | None = __xml.find("name") + __programming_languages: xmlTree.Element | None = __xml.find( + "programming-languages" + ) + + if __age is not None: + __value: str | int = __age.text or __content["age"] + __content["age"] = int(__value) + + if __name is not None: + __content["name"] = __name.text or __content["name"] + + if __born_date is not None: + __content["born-date"] = __born_date.text or __content["born-date"] + + if __programming_languages is not None: + for __language in __programming_languages.iter(): + if __language.tag is not None and __language.text is not None: + __content["programming-languages"][ + __language.tag.lower() + ] = __language.text + + return __content + + def __validate(self) -> None: + if self.__is_deleted: + raise FileNotFoundError + + def __write_content(self, content: XmlContent) -> Self: + __xml: xmlTree.Element = dict_to_xml(dictionary=dict(content)) + __stringified_content: str = xmlTree.tostring(element=__xml).decode( + encoding="utf8" + ) + + with open(file=self.__path, mode="w", encoding="utf8") as __file: + __file.write(__stringified_content) + __file.close() + + return self + + def append_language(self, __programming_language: str) -> Self: + """Append programming language to "programmingLanguages" key""" + self.__validate() + + __content: XmlContent = self.get_content() + __content["programming-languages"][ + __programming_language + ] = __programming_language + self.__write_content(content=__content) + + return self + + def delete_file(self) -> None: + """Delete file""" + self.__validate() + os.remove(path=self.__path) + self.__is_deleted = True + + def remove_language(self, __programming_language: str) -> Self: + """Delete programming language inside "programmingLanguages" key""" + self.__validate() + + __content: XmlContent = self.get_content() + __sanitized_content: XmlContent = __content.copy() + __sanitized_content["programming-languages"].clear() + + try: + for __key, __value in __content["programming-languages"].items(): + if __key.upper() != __programming_language.upper(): + __sanitized_content["programming-languages"][__key] = __value + except ValueError: + pass + + self.__write_content(content=__sanitized_content) + + return self + + def update_age(self, __age: int) -> Self: + """Update age""" + self.__validate() + + __content: XmlContent = self.get_content() + __content["age"] = __age + self.__write_content(content=__content) + + return self + + def update_born_date(self, __born_date: datetime.date) -> Self: + """Update born date""" + self.__validate() + + __content: XmlContent = self.get_content() + __content["born-date"] = __born_date.strftime(format="%d/%m/%Y, %H:%M:%S") + self.__write_content(content=__content) + + return self + + def update_name(self, __name: str) -> Self: + """Update name""" + self.__validate() + + __content: XmlContent = self.get_content() + __content["name"] = __name + self.__write_content(content=__content) + + return self + + +json_file: JsonFile = JsonFile( + path="additional-challenge.json", + initial_content={ + "age": 22, + "bornDate": datetime.datetime(day=20, month=2, year=2002).strftime( + format="%d/%m/%Y, %H:%M:%S" + ), + "name": "Lucas", + "programmingLanguages": ["Python"], + }, +) + +SHOULD_EXIT: bool = False +while not SHOULD_EXIT: + # pylint: disable=line-too-long + operation: str = input( + "\nSelect an operation ('append language', 'print', 'remove language', 'update age', 'update born date', 'update name', or 'exit'): " + ).upper() + + if operation == "APPEND LANGUAGE": + programming_language: str = input("\nNew programming language: ") + json_file.append_language(programming_language) + + elif operation == "PRINT": + print(f"\n{json_file.get_content()}", end="") + + elif operation == "REMOVE LANGUAGE": + programming_language: str = input("\nNew programming language: ") + json_file.remove_language(programming_language) + + elif operation == "UPDATE AGE": + age: str = input("\nNew age: ") + json_file.update_age(int(age)) + + elif operation == "UPDATE BORN DATE": + __born_date: str = input("\nNew born date (year-month-day): ") + json_file.update_born_date(datetime.datetime.fromisoformat(__born_date)) + + elif operation == "UPDATE NAME": + name: str = input("\nNew name: ") + json_file.update_name(name) + + elif operation == "EXIT": + json_file.delete_file() + SHOULD_EXIT = True + + else: + print("\nInvalid operation! Try again...") + +xml_file: XmlFile = XmlFile( + path="additional-challenge.xml", + initial_content={ + "age": 22, + "born-date": datetime.datetime(day=20, month=2, year=2002).strftime( + format="%d/%m/%Y, %H:%M:%S" + ), + "name": "Lucas", + "programming-languages": {"python": "Python"}, + }, +) + +SHOULD_EXIT = False +while not SHOULD_EXIT: + # pylint: disable=line-too-long + operation: str = input( + "\nSelect an operation ('append language', 'print', 'remove language', 'update age', 'update born date', 'update name', or 'exit'): " + ).upper() + + if operation == "APPEND LANGUAGE": + programming_language: str = input("\nNew programming language: ") + xml_file.append_language(programming_language) + + elif operation == "PRINT": + print(f"\n{xml_file.get_content()}\n", end="") + + elif operation == "REMOVE LANGUAGE": + programming_language: str = input("\nNew programming language: ") + xml_file.remove_language(programming_language) + + elif operation == "UPDATE AGE": + age: str = input("\nNew age: ") + xml_file.update_age(int(age)) + + elif operation == "UPDATE BORN DATE": + __born_date: str = input("\nNew born date (year-month-day): ") + xml_file.update_born_date(datetime.datetime.fromisoformat(__born_date)) + + elif operation == "UPDATE NAME": + name: str = input("\nNew name: ") + xml_file.update_name(name) + + elif operation == "EXIT": + xml_file.delete_file() + SHOULD_EXIT = True + + else: + print("\nInvalid operation! Try again...") From 3432fe68a887034ea952de1653bf60b6af9e0aa8 Mon Sep 17 00:00:00 2001 From: h4ckxel Date: Sun, 22 Sep 2024 00:19:01 -0600 Subject: [PATCH 474/539] #13 - Python --- .../13 - PRUEBAS UNITARIAS/python/h4ckxel.py | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 Roadmap/13 - PRUEBAS UNITARIAS/python/h4ckxel.py diff --git a/Roadmap/13 - PRUEBAS UNITARIAS/python/h4ckxel.py b/Roadmap/13 - PRUEBAS UNITARIAS/python/h4ckxel.py new file mode 100644 index 0000000000..334e4f212e --- /dev/null +++ b/Roadmap/13 - PRUEBAS UNITARIAS/python/h4ckxel.py @@ -0,0 +1,90 @@ +# #13 PRUEBAS UNITARIAS + + +""" + * EJERCICIO: + * Crea una función que se encargue de sumar dos números y retornar + * su resultado. + * Crea un test, utilizando las herramientas de tu lenguaje, que sea + * capaz de determinar si esa función se ejecuta correctamente. +""" + +import unittest + +def sum(number1,number2): + if not isinstance(number1, (int)) or not isinstance(number2, (int)): + raise ValueError("Error en la entrada de datos") + return number1 + number2 + + +class TestSum(unittest.TestCase): + def test_sum(self): + self.assertEqual(sum(5,4),9) + self.assertEqual(sum(5,-2),3) + self.assertEqual(sum(5,7),12) + self.assertEqual(sum(1,2),3) + + def test_raises(self): + with self.assertRaises(ValueError): + sum("1", 8) + with self.assertRaises(ValueError): + sum(2, "b") + with self.assertRaises(ValueError): + sum("a", "b") + + + + + +""" + * DIFICULTAD EXTRA (opcional): + * Crea un diccionario con las siguientes claves y valores: + * "name": "Tu nombre" + * "age": "Tu edad" + * "birth_date": "Tu fecha de nacimiento" + * "programming_languages": ["Listado de lenguajes de programación"] + * Crea dos test: + * - Un primero que determine que existen todos los campos. + * - Un segundo que determine que los datos introducidos son correctos. + +""" +class Person(): + def __init__(self,name,age,birthday,languages) -> None: + self.name = name + self.age = age + self.birthday = birthday + self.languages = languages + +def dictionary(persona): + + person = {"name":"Fede","age":persona.age,"birth_day":persona.birthday,"program_languages":persona.languages} + return person + +person1 = Person("Fede",43,"25/6/80",[]) + +test_person = dictionary(person1) + +print (test_person) + + +class TestDictionaryPerson(unittest.TestCase): + + def setUp(self) -> None: + self.data = test_person + + + def test_empty(self): + self.assertIn("name", test_person) + self.assertIn("age", test_person) + self.assertIn("birth_day", test_person) + self.assertIn("program_languages", test_person) + + def test_data_is_correct(self): + self.assertIsInstance(self.data["name"], str) + self.assertIsInstance(self.data["age"], int) + self.assertIsInstance(self.data["birth_day"],str) + self.assertIsInstance(self.data["program_languages"], list) + + +unittest.main(verbosity=3) + From eaeef93dcf99e57acbb2ac526551ffdaa885cf38 Mon Sep 17 00:00:00 2001 From: hozlucas28 Date: Sun, 22 Sep 2024 04:14:20 -0300 Subject: [PATCH 475/539] Solution 38 - Python --- .../38 - MOUREDEV PRO/python/hozlucas28.py | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/hozlucas28.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/hozlucas28.py b/Roadmap/38 - MOUREDEV PRO/python/hozlucas28.py new file mode 100644 index 0000000000..283d015e8d --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/hozlucas28.py @@ -0,0 +1,136 @@ +# pylint: disable=missing-module-docstring,missing-function-docstring,expression-not-assigned,redefined-outer-name + +from typing import TypedDict, Literal +import csv +import os +import random + + +# ---------------------------------------------------------------------------- # +# FUNCTIONS # +# ---------------------------------------------------------------------------- # + + +def create_csv(*, content: list[list[str]], path: str) -> None: + if os.path.exists(path=path): + os.remove(path=path) + + with open(file=path, mode="x", encoding="utf8") as file: + writer = csv.writer(file, delimiter=",", lineterminator="\n") + + for row in content: + writer.writerow(row) + + +def get_csv_content(*, path: str) -> list[dict[str, str]]: + csv_content: list[list[str]] = [] + + with open(file=path, mode="r", encoding="utf8") as file: + reader = csv.reader(file, delimiter=",") + + for row in reader: + csv_content.append(row) + + csv_content_fmt: list[dict[str, str]] = [] + + for row in csv_content[1:]: + row_fmt: dict[str, str] = {} + + for i, col in enumerate(iterable=row): + row_fmt[csv_content[0][i]] = col + + csv_content_fmt.append(row_fmt) + + return csv_content_fmt + + +# ---------------------------------------------------------------------------- # +# MAIN # +# ---------------------------------------------------------------------------- # + + +type Status = Literal["active"] | Literal["inactive"] + +User = TypedDict( + "User", + { + "id": int, + "email": str, + "status": Status, + }, +) + +users: list[User] = [ + { + "email": "test01@gmail.com", + "id": 1, + "status": "active", + }, + { + "email": "test02@gmail.com", + "id": 2, + "status": "inactive", + }, + { + "email": "test03@gmail.com", + "id": 3, + "status": "inactive", + }, + { + "email": "test04@gmail.com", + "id": 4, + "status": "active", + }, + { + "email": "test05@gmail.com", + "id": 5, + "status": "inactive", + }, + { + "email": "test06@gmail.com", + "id": 6, + "status": "active", + }, + { + "email": "test07@gmail.com", + "id": 7, + "status": "active", + }, + { + "email": "test08@gmail.com", + "id": 8, + "status": "active", + }, +] + +csvContent: list[list[str]] = [ + list(users[0].keys()), +] + +for user in users: + csvContent.append([str(object=user.get(key)) for key in list(users[0].keys())]) + +create_csv(content=csvContent, path="./users.csv") + +csvUsers: list[dict[str, str]] = get_csv_content(path="./users.csv") + +activeUsers: list[dict[str, str]] = list( + filter(lambda user: user["status"] == "active", csvUsers) +) + +winners: list[dict[str, str]] = random.sample(population=activeUsers, k=3) + +print("> The first winner is...") +print( + f"> Congratulations {winners[0]['email']} with id {winners[0]['id']}, you won a subscription!" +) + +print("\n> The second winner is...") +print( + f"> Congratulations {winners[1]['email']} with id {winners[1]['id']}, you won a discount!" +) + +print("\n> The third winner is...") +print( + f"> Congratulations {winners[2]['email']} with id {winners[2]['id']}, you won a book!" +) From ccec63f1415b642dea8bf0abdada3a3e8aa5ce52 Mon Sep 17 00:00:00 2001 From: Bruce <88008233+Roswell468@users.noreply.github.com> Date: Sun, 22 Sep 2024 07:50:37 -0300 Subject: [PATCH 476/539] Rename josecox13 to josecox13.py --- Roadmap/06 - RECURSIVIDAD/python/{josecox13 => josecox13.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/06 - RECURSIVIDAD/python/{josecox13 => josecox13.py} (100%) diff --git a/Roadmap/06 - RECURSIVIDAD/python/josecox13 b/Roadmap/06 - RECURSIVIDAD/python/josecox13.py similarity index 100% rename from Roadmap/06 - RECURSIVIDAD/python/josecox13 rename to Roadmap/06 - RECURSIVIDAD/python/josecox13.py From ff2e588e850af85b7a85ae5916babd40b2708c7d Mon Sep 17 00:00:00 2001 From: Gabriel Charib <110329448+gabrielCharibPolls@users.noreply.github.com> Date: Sun, 22 Sep 2024 15:14:26 +0200 Subject: [PATCH 477/539] #00 - Cobol --- .../cobol/gabrielCharibPollsdev.cbl | 55 ++++++++++++++++++ .../cobol/hello | Bin 0 -> 51544 bytes 2 files changed, 55 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/gabrielCharibPollsdev.cbl create mode 100755 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/hello diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/gabrielCharibPollsdev.cbl b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/gabrielCharibPollsdev.cbl new file mode 100644 index 0000000000..4c2c60d724 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/gabrielCharibPollsdev.cbl @@ -0,0 +1,55 @@ + * -Crea un comentario en el código y coloca la URL del sitio + * web oficial del lenguaje de programación que has seleccionado + * -Representa las diferentes sintaxis que existen de crear + * comentarios en el lenguaje (en una línea, varias...). + * -Crea una variable (y una constante). + * -Crea variables representando todos los tipos de datos + * primitivos del lenguaje (cadenas de texto, enteros...) + * - Imprime por terminal el texto: "¡Hola, [y el nombre de tu + * lenguaje]!" + ************************************************************************** + * commentaire + ************************************************************************** + * Voici un commentaire en Cobol + * URL officielle de GnuCOBOL: https://gnucobol.sourceforge.io/ + IDENTIFICATION DIVISION. + PROGRAM-ID. RETO-O. + DATA DIVISION. + WORKING-STORAGE SECTION. + ************************************************************************** + * Variables + ************************************************************************** + 77 MY-VARIABLE PIC 9(5) VALUE 12345. + 77 MY-STRING PIC X(20) VALUE "COBOL Language". + ************************************************************************** + * Type de données primitifs + ************************************************************************** + 77 MY-INTEGER PIC 9(5) VALUE 12345. + 77 MY-TEXT PIC X(20) VALUE "HOLA COBOL". + 77 MY-DECIMAL PIC 99V99 VALUE 13.14. + 77 MY-BOOLEAN PIC X VALUE "T". + ************************************************************************** + * Afficher un message dans le terminal + ************************************************************************** + PROCEDURE DIVISION. + DISPLAY "***************************". + DISPLAY "¡Hola, COBOL!". + DISPLAY "Valor de MY-VARIABLE : " MY-VARIABLE. + DISPLAY "Texto en MY-TEXT : " MY-TEXT. + DISPLAY "Valor de MY-INTEGER : " MY-INTEGER. + DISPLAY "Valor de MY-DECIMAL : " MY-DECIMAL. + DISPLAY "Booleano MY-BOOLEAN : " MY-BOOLEAN. + DISPLAY "***************************". + STOP RUN. + + + + + + + + + + + + \ No newline at end of file diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/hello b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/hello new file mode 100755 index 0000000000000000000000000000000000000000..5e36c66018d56ed83947d847c1395eb04867411e GIT binary patch literal 51544 zcmeI5e{fXQ702((57_WCfM8I8jf1d32>FE&M)ZZ4l1L!9L>qPB`F68Oc385wyMdsN zU5eT`RLi!srQ=MCbi~kKlX0kZ#{mgirFB{fQ?XO64QM-w9qqK8It0Y@d)_;neY>Fk z(dkS(bMDN2_kPbk_uP9w@7 zrtY3PZxdNFlhrxXbeWa@&2=r!nax&zJ=3OG=fg}HQ?im_!~)$h7AUggy|dh2 z%p~qWn$|Uz@>G1Rj*4MKV_m-Jm?=Bn&?-CLee6Nn8PCP>z|cyD5$p`cjBs09G!R4B z?0EIJ*zxk%pR_aHEVic#!|+FAkzi*#8?xgya=eNB5=c9fGd9@~FWebT1I&)sa;rT* zor93h<@%Kh!|3YV5$tTmvfILN$d0$4<8^Rn(%Exz#-;CM$cl4YO>>P=+q8b8{k7=! zyc9|+WtB8X$`rd0*)ZC}=~a@xa=Z=jwUVB>PWpUYc8m4AoLgqR4d_p=pqKlQ{yc7( z>*P*U#Ix23Z6)0FHm8|uCrOIHY z_g;kD&HDH&aDZ_lY^irVA9c#)y8w9t@@J)P^q+o(#woD5k!im#?TSX0hJwDOtvf@l z(3Gx4rg^-3*N}kPCBZCul zl={fmG_?=+K=wU}^3sDZ9ln&S5(u+bl~pHjPi1fM{^~@IihE;Ldw=ioT;ojIFYd+N z74)<1pM;McPK{MC>8oDc0qHBu(MMFyt!GBZ>jR^^wE^50>2nq6BQ8xJ>D@i|{NTMR zIdrd{?A6ZSgz>JTx~oK$n@Tm49!S~lNZbAl+i#KIgRdL$lshMJwpO#|iK}?0@5EdW zC{;!MT`E3($WY0*QOA9nzJfX$R}Fab)yU9pEitrEjSMfue6U7Ofl5-{Lv>A|#9Vjj z$quEKQLIhKRHov1Ow2W3P4k#4X^#c}8pNE3nBYh;aD~S^SgVrPqdd2U*ysFcKIS)A zt0&K`L4O+KX)TfRr}pc({Vdw8IcUmm$DA#HEys$znqn?j$wK&_TdpT5=2)NptUjjQ zC;v*mW|nWi?Rx?5_OiIeJlE7*igT^G{OwApV)ILKWnSgo$-uv*?YNTO~vUEc+mp5>^j>|i^ zypzkjxiq=l#ASfXAeURYyr0W1dk#l22b!Dp{q(CO)k|t}6F(jo_ue>7ReQeln78Ax zLlJxnN!;)1yB!RMU(T&)n5L50cYD9yU!90+$5-iEe3jL%I)&;8) zp2-efUY+nvbLj6u?{w&XcfvE%p^J+Xp4r&{h(E8ywtHxv#rX-(61JN-3(#I)`;@n5 z!GVY;VC$35JnpSm&_SGA)PF0N_jCDot(y9s%m@E}+4Y`0)JM2Z_Dgo%K4)?)e@{M_ z1$KGsWY*KToXPgtT+ZRLgv%T3(sMSq+M3rBJf8+N0-gyvx2^Md9G%DW?D`Z(eY&GQ z%Td3^QJ?FmU+<_duUh4OSRAp&}DzB)lTBd57 zRyQ@e8_mx4F0(!0wvwuEYOHbFEw%+uRbE+Mr51g5QYW6S4~NXfcE@6Mml+C2+^qrk zy1SR$RpV`_S>0IYUg=iNxGx@d2Rg}4chAY@^lez*T(_pqn{B?WuC`%aO(U6Chr^+O z*%_t?tDBk{>uT1M*<07#w4_OG3~X~(RJbe3DyrP&%T|`HSXo&{cOdE3dO8)St5&U0 z3XW2LSaV zNjSOvk`@+Tq-9=shs)9_0XNj`;dQzd?A`pX8N~~*=RF^p-fAAmlGq zGh=4R2t*>`h;0aV24i+@Yq+&56foLDVIR44#scgT4a5w;+362pSPB@8g|``zF06o) zW~k{@#rjmPdMAvUv9-epbO-!hv4GJLFk2C;V5^CxOjdAM>?u0wQm?>$3YP0yfwiOl z7V9$BgRJXWf53Y0&9?t2Y5Yh7{ayq0&%=W>{T>790@n0945Vo+YVTn^gS1Pj4Z7W4 z#JYp^9M*Bx*R$TwdLipR){9x6WL?gBkTt#9DFsTYxIJDS>mt_8tjk#YS=Y0Uu)dG= zF4Fi|%FX>XT6{GFIgX8{X5pZtlwkZ$NC?vUtq1_ebe~ISx;qsiuGL9 zgRGaZrr*;*D0MSy`W+3@YgyCpXOO;!HT`Y|=^*QR){ttdR*0wFKFiYhzLwkiI@?Ze zR$785;*4p01{vCGYZ}T*0X!kbbRputZKeroU=%jj_vJ(j0qm9`n>S+Y8#wW2IjB7AB_=v#p?#w1NBXoi9h z1aKaYS?$?63_im-g3l;-jsWQ#0n#}FB-S$)8WJmW$Shyy!r;3i!?!$h78&dG85Nnc zpmoye&*-B75{j$>O*M>Vxqu7VBwO#4*jmpcXk~6=~sU8 zTub=X;kM&>Zw(A=$!TiIAARV^Lk~RqhogJyA7A|J7q+i_s$=s9tD>8Kb64esj~beK zH=WLXqq^vH$NIl~^sA{$Zr?Mb=Dp?L7(P?6;h+B7FCM)3`zMb*{_wt6OJ16^{)dZB z%!zzq{Qq!%)l-lD>Cm?d-)@;Wzx?Qy=MEoxr{Ub_#Y?fi6?LKWNp1Uod;Bl|+`RaD k_r!5czSF_sLu)QZ_k57wc*C2&`1tjzjc=D8p+gMm-$ Date: Sun, 22 Sep 2024 15:16:48 +0200 Subject: [PATCH 478/539] Delete hello --- .../cobol/hello | Bin 51544 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/hello diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/hello b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/hello deleted file mode 100755 index 5e36c66018d56ed83947d847c1395eb04867411e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51544 zcmeI5e{fXQ702((57_WCfM8I8jf1d32>FE&M)ZZ4l1L!9L>qPB`F68Oc385wyMdsN zU5eT`RLi!srQ=MCbi~kKlX0kZ#{mgirFB{fQ?XO64QM-w9qqK8It0Y@d)_;neY>Fk z(dkS(bMDN2_kPbk_uP9w@7 zrtY3PZxdNFlhrxXbeWa@&2=r!nax&zJ=3OG=fg}HQ?im_!~)$h7AUggy|dh2 z%p~qWn$|Uz@>G1Rj*4MKV_m-Jm?=Bn&?-CLee6Nn8PCP>z|cyD5$p`cjBs09G!R4B z?0EIJ*zxk%pR_aHEVic#!|+FAkzi*#8?xgya=eNB5=c9fGd9@~FWebT1I&)sa;rT* zor93h<@%Kh!|3YV5$tTmvfILN$d0$4<8^Rn(%Exz#-;CM$cl4YO>>P=+q8b8{k7=! zyc9|+WtB8X$`rd0*)ZC}=~a@xa=Z=jwUVB>PWpUYc8m4AoLgqR4d_p=pqKlQ{yc7( z>*P*U#Ix23Z6)0FHm8|uCrOIHY z_g;kD&HDH&aDZ_lY^irVA9c#)y8w9t@@J)P^q+o(#woD5k!im#?TSX0hJwDOtvf@l z(3Gx4rg^-3*N}kPCBZCul zl={fmG_?=+K=wU}^3sDZ9ln&S5(u+bl~pHjPi1fM{^~@IihE;Ldw=ioT;ojIFYd+N z74)<1pM;McPK{MC>8oDc0qHBu(MMFyt!GBZ>jR^^wE^50>2nq6BQ8xJ>D@i|{NTMR zIdrd{?A6ZSgz>JTx~oK$n@Tm49!S~lNZbAl+i#KIgRdL$lshMJwpO#|iK}?0@5EdW zC{;!MT`E3($WY0*QOA9nzJfX$R}Fab)yU9pEitrEjSMfue6U7Ofl5-{Lv>A|#9Vjj z$quEKQLIhKRHov1Ow2W3P4k#4X^#c}8pNE3nBYh;aD~S^SgVrPqdd2U*ysFcKIS)A zt0&K`L4O+KX)TfRr}pc({Vdw8IcUmm$DA#HEys$znqn?j$wK&_TdpT5=2)NptUjjQ zC;v*mW|nWi?Rx?5_OiIeJlE7*igT^G{OwApV)ILKWnSgo$-uv*?YNTO~vUEc+mp5>^j>|i^ zypzkjxiq=l#ASfXAeURYyr0W1dk#l22b!Dp{q(CO)k|t}6F(jo_ue>7ReQeln78Ax zLlJxnN!;)1yB!RMU(T&)n5L50cYD9yU!90+$5-iEe3jL%I)&;8) zp2-efUY+nvbLj6u?{w&XcfvE%p^J+Xp4r&{h(E8ywtHxv#rX-(61JN-3(#I)`;@n5 z!GVY;VC$35JnpSm&_SGA)PF0N_jCDot(y9s%m@E}+4Y`0)JM2Z_Dgo%K4)?)e@{M_ z1$KGsWY*KToXPgtT+ZRLgv%T3(sMSq+M3rBJf8+N0-gyvx2^Md9G%DW?D`Z(eY&GQ z%Td3^QJ?FmU+<_duUh4OSRAp&}DzB)lTBd57 zRyQ@e8_mx4F0(!0wvwuEYOHbFEw%+uRbE+Mr51g5QYW6S4~NXfcE@6Mml+C2+^qrk zy1SR$RpV`_S>0IYUg=iNxGx@d2Rg}4chAY@^lez*T(_pqn{B?WuC`%aO(U6Chr^+O z*%_t?tDBk{>uT1M*<07#w4_OG3~X~(RJbe3DyrP&%T|`HSXo&{cOdE3dO8)St5&U0 z3XW2LSaV zNjSOvk`@+Tq-9=shs)9_0XNj`;dQzd?A`pX8N~~*=RF^p-fAAmlGq zGh=4R2t*>`h;0aV24i+@Yq+&56foLDVIR44#scgT4a5w;+362pSPB@8g|``zF06o) zW~k{@#rjmPdMAvUv9-epbO-!hv4GJLFk2C;V5^CxOjdAM>?u0wQm?>$3YP0yfwiOl z7V9$BgRJXWf53Y0&9?t2Y5Yh7{ayq0&%=W>{T>790@n0945Vo+YVTn^gS1Pj4Z7W4 z#JYp^9M*Bx*R$TwdLipR){9x6WL?gBkTt#9DFsTYxIJDS>mt_8tjk#YS=Y0Uu)dG= zF4Fi|%FX>XT6{GFIgX8{X5pZtlwkZ$NC?vUtq1_ebe~ISx;qsiuGL9 zgRGaZrr*;*D0MSy`W+3@YgyCpXOO;!HT`Y|=^*QR){ttdR*0wFKFiYhzLwkiI@?Ze zR$785;*4p01{vCGYZ}T*0X!kbbRputZKeroU=%jj_vJ(j0qm9`n>S+Y8#wW2IjB7AB_=v#p?#w1NBXoi9h z1aKaYS?$?63_im-g3l;-jsWQ#0n#}FB-S$)8WJmW$Shyy!r;3i!?!$h78&dG85Nnc zpmoye&*-B75{j$>O*M>Vxqu7VBwO#4*jmpcXk~6=~sU8 zTub=X;kM&>Zw(A=$!TiIAARV^Lk~RqhogJyA7A|J7q+i_s$=s9tD>8Kb64esj~beK zH=WLXqq^vH$NIl~^sA{$Zr?Mb=Dp?L7(P?6;h+B7FCM)3`zMb*{_wt6OJ16^{)dZB z%!zzq{Qq!%)l-lD>Cm?d-)@;Wzx?Qy=MEoxr{Ub_#Y?fi6?LKWNp1Uod;Bl|+`RaD k_r!5czSF_sLu)QZ_k57wc*C2&`1tjzjc=D8p+gMm-$ Date: Sun, 22 Sep 2024 09:26:48 -0600 Subject: [PATCH 479/539] #29 - python --- Roadmap/29 - SOLID ISP/python/santyjL.py | 191 +++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 Roadmap/29 - SOLID ISP/python/santyjL.py diff --git a/Roadmap/29 - SOLID ISP/python/santyjL.py b/Roadmap/29 - SOLID ISP/python/santyjL.py new file mode 100644 index 0000000000..9b698aa542 --- /dev/null +++ b/Roadmap/29 - SOLID ISP/python/santyjL.py @@ -0,0 +1,191 @@ +#29 SOLID: PRINCIPIO DE SEGREGACIÓN DE INTERFACES (ISP) + +""" +/* + * 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. + * + * 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. + */ +""" +from abc import ABC, abstractmethod + + +# Interfaces pequeñas y específicas para cada tipo de vehículo +class VehiculoTerrestre(ABC): + @abstractmethod + def conducir(self): + pass + +class VehiculoAereo(ABC): + @abstractmethod + def volar(self): + pass + +class VehiculoAcuatico(ABC): + @abstractmethod + def navegar(self): + pass + +# Clase Coche que solo necesita implementar la interfaz de Vehículo Terrestre +class Coche(VehiculoTerrestre): + def conducir(self): + print("El coche está conduciendo.") + +# Clase Avión que solo implementa la interfaz de Vehículo Aéreo +class Avion(VehiculoAereo): + def volar(self): + print("El avión está volando.") + +# Clase Barco que solo implementa la interfaz de Vehículo Acuático +class Barco(VehiculoAcuatico): + def navegar(self): + print("El barco está navegando.") + +# Crear instancias de los vehículos +coche = Coche() +avion = Avion() +barco = Barco() + +# Usar los métodos según las interfaces implementadas +coche.conducir() # Salida: El coche está conduciendo. +avion.volar() # Salida: El avión está volando. +barco.navegar() # Salida: El barco está navegando. + +#mal uso +# Interfaz general que agrupa todas las funcionalidades para vehículos +class Vehiculo(ABC): + @abstractmethod + def conducir(self): + pass + + @abstractmethod + def volar(self): + pass + + @abstractmethod + def navegar(self): + pass + +# Clase Coche que no necesita volar ni navegar, pero debe implementar los métodos +class Coche(Vehiculo): + def conducir(self): + print("El coche está conduciendo.") + + def volar(self): + raise NotImplementedError("El coche no puede volar.") # Error + + def navegar(self): + raise NotImplementedError("El coche no puede navegar.") # Error + +# Clase Avión que no necesita conducir ni navegar, pero debe implementar los métodos +class Avion(Vehiculo): + def conducir(self): + raise NotImplementedError("El avión no puede conducir.") # Error + + def volar(self): + print("El avión está volando.") + + def navegar(self): + raise NotImplementedError("El avión no puede navegar.") # Error + +# Clase Barco que no necesita conducir ni volar, pero debe implementar los métodos +class Barco(Vehiculo): + def conducir(self): + raise NotImplementedError("El barco no puede conducir.") # Error + + def volar(self): + raise NotImplementedError("El barco no puede volar.") # Error + + def navegar(self): + print("El barco está navegando.") + +coche = Coche() +avion = Avion() +barco = Barco() + +# Usar los métodos según la interfaz grande +coche.conducir() # Funciona correctamente: "El coche está conduciendo." +coche.volar() # Error: El coche no puede volar. +coche.navegar() # Error: El coche no puede navegar. + +avion.volar() # Funciona correctamente: "El avión está volando." +avion.conducir() # Error: El avión no puede conducir. +avion.navegar() # Error: El avión no puede navegar. + +barco.navegar() # Funciona correctamente: "El barco está navegando." +barco.volar() # Error: El barco no puede volar. +barco.conducir() # Error: El barco no puede conducir. + +""" !!!EXTRA¡¡¡ """ + +# Interfaces (Clases Abstractas) +class ImpresoraBlancoNegroInterfaz(ABC): + @abstractmethod + def impresion_en_blanco_y_negro(self): + pass + +class ImpresoraColorInterfaz(ABC): + @abstractmethod + def impresion_a_color(self): + pass + +class EscanerInterfaz(ABC): + @abstractmethod + def escanear(self): + pass + +class EnviarFaxInterfaz(ABC): + @abstractmethod + def enviar_fax(self): + pass + +# Clases concretas +class ImpresoraBlancoNegro(ImpresoraBlancoNegroInterfaz): + def impresion_en_blanco_y_negro(self): + print("Se está imprimiendo el documento en blanco y negro") + +class ImpresoraColor(ImpresoraColorInterfaz): + def impresion_a_color(self): + print("Se está imprimiendo el documento a color") + +class ImpresoraMultifuncional(ImpresoraColorInterfaz, ImpresoraBlancoNegroInterfaz, + EscanerInterfaz, EnviarFaxInterfaz): + + def impresion_a_color(self): + print("Se está imprimiendo el documento a color") + + def impresion_en_blanco_y_negro(self): + print("Se está imprimiendo el documento en blanco y negro") + + def enviar_fax(self): + print("La impresora está enviando un Fax") + + def escanear(self): + print("La impresora está escaneando para sacarle copia al documento") + +# Crear instancias de las clases +impresora_blanco_y_negro = ImpresoraBlancoNegro() +impresora_color = ImpresoraColor() +impresora_multifuncional = ImpresoraMultifuncional() + +# Ejecución del código +print("\nImpresora a color e impresora en blanco y negro:") +impresora_blanco_y_negro.impresion_en_blanco_y_negro() +impresora_color.impresion_a_color() + +print("\nImpresora Multifuncional:") +impresora_multifuncional.impresion_a_color() +impresora_multifuncional.impresion_en_blanco_y_negro() +impresora_multifuncional.enviar_fax() +impresora_multifuncional.escanear() From 552a6a344622ee11a1310f6f199477ab6dd34bbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Jim=C3=A9nez=20S=C3=A1nchez?= Date: Sun, 22 Sep 2024 11:18:25 -0500 Subject: [PATCH 480/539] #38 - Python --- Roadmap/38 - MOUREDEV PRO/python/mouredev38.csv | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/mouredev38.csv diff --git a/Roadmap/38 - MOUREDEV PRO/python/mouredev38.csv b/Roadmap/38 - MOUREDEV PRO/python/mouredev38.csv new file mode 100644 index 0000000000..7e429f799e --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/mouredev38.csv @@ -0,0 +1,12 @@ +Id,Email,Estado +1,test@test.com,activo +2,test2@test.com,inactivo +3,test3@test.com,activo +4,test4@test.com,activo +5,test5@test.com,activo +6,test6@test.com,inactivo +7,test7@test.com,activo +8,test8@test.com,activo +9,test9@test.com,inactivo +10,test10@test.com,inactivo +11,test11@test.com,activo \ No newline at end of file From 62c4b461f15d5adb53309ca51eab27de177877dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Jim=C3=A9nez=20S=C3=A1nchez?= Date: Sun, 22 Sep 2024 11:21:21 -0500 Subject: [PATCH 481/539] Delete Roadmap/38 - MOUREDEV PRO/python/mouredev38.csv --- Roadmap/38 - MOUREDEV PRO/python/mouredev38.csv | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 Roadmap/38 - MOUREDEV PRO/python/mouredev38.csv diff --git a/Roadmap/38 - MOUREDEV PRO/python/mouredev38.csv b/Roadmap/38 - MOUREDEV PRO/python/mouredev38.csv deleted file mode 100644 index 7e429f799e..0000000000 --- a/Roadmap/38 - MOUREDEV PRO/python/mouredev38.csv +++ /dev/null @@ -1,12 +0,0 @@ -Id,Email,Estado -1,test@test.com,activo -2,test2@test.com,inactivo -3,test3@test.com,activo -4,test4@test.com,activo -5,test5@test.com,activo -6,test6@test.com,inactivo -7,test7@test.com,activo -8,test8@test.com,activo -9,test9@test.com,inactivo -10,test10@test.com,inactivo -11,test11@test.com,activo \ No newline at end of file From c2c7c1cdb2b577ff12487ae9b38d6381a4158f04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Jim=C3=A9nez=20S=C3=A1nchez?= Date: Sun, 22 Sep 2024 11:22:41 -0500 Subject: [PATCH 482/539] #38 - Python --- .../38 - MOUREDEV PRO/python/juanmjimenezs.py | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/juanmjimenezs.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/juanmjimenezs.py b/Roadmap/38 - MOUREDEV PRO/python/juanmjimenezs.py new file mode 100644 index 0000000000..66a40faf49 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/juanmjimenezs.py @@ -0,0 +1,78 @@ +""" + * EJERCICIO: + * He presentado mi proyecto más importante del año: mouredev pro. + * Un campus para la comunidad, que lanzaré en octubre, donde estudiar + * programación de una manera diferente. + * Cualquier persona suscrita a la newsletter de https://mouredev.pro + * accederá a sorteos mensuales de suscripciones, regalos y descuentos. + * + * Desarrolla un programa que lea los registros de un fichero .csv y + * seleccione de manera aleatoria diferentes ganadores. + * Requisitos: + * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + * o "inactivo" (y datos ficticios). + * Ejemplo: 1 | test@test.com | activo + * 2 | test2@test.com | inactivo + * (El .csv no debe subirse como parte de la corrección) + * 2. Recupera los datos desde el programa y selecciona email aleatorios. + * Acciones: + * 1. Accede al fichero .csv y selecciona de manera aleatoria un email + * ganador de una suscripción, otro ganador de un descuento y un último + * ganador de un libro (sólo si tiene status "activo" y no está repetido). + * 2. Muestra los emails ganadores y su id. + * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + * no debe tenerse en cuenta. +""" +import csv +import random + +def get_data_from_csv(file_name): + """Method to get data from csv file""" + data = [] + with open(file_name, 'r', encoding="utf-8", newline='') as csvfile: + csv_reader = csv.reader(csvfile) + next(csv_reader) # Skip the header row + for row in csv_reader: + if row[2] == 'activo': + data.append(row) + return data + + +def get_random_winners(data): + """Method to get random winners""" + used_numbers = [] + winners = [] + # Winner 1 + random_number = get_unique_random_number(len(data)-1, used_numbers) + winners.append(data[random_number]) + # Winner 2 + random_number = get_unique_random_number(len(data)-1, used_numbers) + winners.append(data[random_number]) + # Winner 3 + random_number = get_unique_random_number(len(data)-1, used_numbers) + winners.append(data[random_number]) + return winners + + +def print_winners(winners): + """Method to print winners""" + prizes = ['Suscripción', 'Descuento', 'Libro'] + for i, winner in enumerate(winners): + print(f"Ganador {prizes[i]} -> Id: {winner[0]}, Email: {winner[1]}") + + +def get_unique_random_number(max_number, used_numbers): + """Method to get unique random number""" + random_number = random.randint(0, max_number) + while random_number in used_numbers: + random_number = random.randint(0, max_number) + used_numbers.append(random_number) + return random_number + + +# import os +# print(os.getcwd()) +csv_data = get_data_from_csv('38/mouredev38.csv') +# print(csv_data) +chosen = get_random_winners(csv_data) +print_winners(chosen) From 34624572eb74a596f2f969784cb9e60a6a6a1fd1 Mon Sep 17 00:00:00 2001 From: Jesus Antonio Escamilla Date: Sun, 22 Sep 2024 11:48:21 -0600 Subject: [PATCH 483/539] #38 - JavaScript --- .../javascript/JesusAntonioEEscamilla.js | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/javascript/JesusAntonioEEscamilla.js diff --git a/Roadmap/38 - MOUREDEV PRO/javascript/JesusAntonioEEscamilla.js b/Roadmap/38 - MOUREDEV PRO/javascript/JesusAntonioEEscamilla.js new file mode 100644 index 0000000000..2179c4dc02 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/javascript/JesusAntonioEEscamilla.js @@ -0,0 +1,76 @@ +/** #37 - JavaScript -> Jesus Antonio Escamilla */ + +/** + * MOUREDEV PRO. + * Utilizando la Terminal para pedir datos y agregarlos. + */ + +const fs = require('fs'); +const readline = require('readline'); + +// Función para leer los datos del CSV +function readCSV(filePath) { + return new Promise((resolve, reject) => { + const suscriptores = []; + const rl = readline.createInterface({ + input: fs.createReadStream(filePath), + crlfDelay: Infinity + }); + + rl.on('line', (line) => { + const [id, email, status] = line.split(','); + if (status === 'activo') { + suscriptores.push({id, email}); + } + }); + + rl.on('close', () => { + resolve(suscriptores); + }); + + rl.on('error', (err) => { + reject(err); + }); + }); +} + +// Función para seleccionar en ganador +function selectWinners(suscriptor) { + const winners = []; + while (winners.length < 3) { + const randomIndex = Math.floor(Math.random() * suscriptor.length); + const winner = suscriptor[randomIndex]; + if (!winners.some(w => w.email === winner.email)) { + winners.push(winner); + } + } + + return { + suscripcion: winners[0], + descuento: winners[1], + libro: winners[2] + } +} + +async function winnersMorueDevPRO() { + try { + const fileCSV = './suscriptores.csv' + const emails = await readCSV(fileCSV) + + if (emails.length < 3) { + console.log(`Error: No hay suficientes participantes activos. Se necesitan al menos 3, pero solo hay ${emails.length}.`); + return; + } + + const winners = selectWinners(emails) + + console.log(`Ganador suscripción: ${winners.suscripcion.email}`); + console.log(`Ganador descuento: ${winners.descuento.email}`); + console.log(`Ganador libro: ${winners.libro.email}`); + } catch (error) { + console.error('Error al iniciar el programa: ', error) + } +} + +// Usando el programa +winnersMorueDevPRO() \ No newline at end of file From 67ed7a7e78d193d0d7b9edf3581c96361ecdfe1e Mon Sep 17 00:00:00 2001 From: a-mayans Date: Sun, 22 Sep 2024 19:56:03 +0200 Subject: [PATCH 484/539] #38 - Python --- Roadmap/38 - MOUREDEV PRO/python/a-mayans.py | 49 ++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/a-mayans.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/a-mayans.py b/Roadmap/38 - MOUREDEV PRO/python/a-mayans.py new file mode 100644 index 0000000000..a885d41ecd --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/a-mayans.py @@ -0,0 +1,49 @@ +import csv +import random + +# Leer los datos del archivo CSV +def leer_datos_csv(archivo_csv): + with open(archivo_csv, mode='r') as file: + reader = csv.DictReader(file) + usuarios_activos = [row for row in reader if row['status'] == 'activo'] + return usuarios_activos + +# Seleccionar ganadores aleatorios +def seleccionar_ganadores(usuarios): + if len(usuarios) < 3: + raise ValueError("No hay suficientes usuarios activos para seleccionar 3 ganadores.") + + ganadores = random.sample(usuarios, 3) + + ganador_suscripcion = ganadores[0] + ganador_descuento = ganadores[1] + ganador_libro = ganadores[2] + + return { + "suscripcion": ganador_suscripcion, + "descuento": ganador_descuento, + "libro": ganador_libro + } + +# Mostrar ganadores +def mostrar_ganadores(ganadores): + print("Ganador de la suscripción:") + print(f"ID: {ganadores['suscripcion']['id']}, Email: {ganadores['suscripcion']['email']}") + + print("\nGanador del descuento:") + print(f"ID: {ganadores['descuento']['id']}, Email: {ganadores['descuento']['email']}") + + print("\nGanador del libro:") + print(f"ID: {ganadores['libro']['id']}, Email: {ganadores['libro']['email']}") + +# Archivo CSV con usuarios +archivo_csv = 'usuarios.csv' + +# Leer los datos del archivo CSV +usuarios_activos = leer_datos_csv(archivo_csv) + +# Seleccionar ganadores aleatorios +ganadores = seleccionar_ganadores(usuarios_activos) + +# Mostrar los ganadores +mostrar_ganadores(ganadores) \ No newline at end of file From d921d2565f19bc438428b37f4ccfea82f481bbc1 Mon Sep 17 00:00:00 2001 From: CluvAcademy Date: Sun, 22 Sep 2024 17:13:40 -0500 Subject: [PATCH 485/539] #00 - Python, Java --- .../java/Raghnus.java | 35 +++++++++++++++++++ .../python/Raghnus.py | 26 ++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Raghnus.java create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Raghnus.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Raghnus.java b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Raghnus.java new file mode 100644 index 0000000000..2082a6b79c --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Raghnus.java @@ -0,0 +1,35 @@ +public class Raghnus { + // URL: https://www.java.com/es/ + + // Comentario de una línea + + /* + * Comentario + * de + * varias + * líneas + */ + + // Variable + int variable = 5; + + // Constante + final double CONSTANTE = 3.689; + + // Tipos de variables + int x = 5; + byte y = 10; + short z = 9; + long a = 58090; + double f = 89.6; + float g = 98.64f; + char i = 'h'; + boolean k = true; + String l = "Java"; + + public static void main(String[] args) { + String lenguaje = "Java"; + System.out.println("Hola, " + lenguaje); + } + +} \ No newline at end of file diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Raghnus.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Raghnus.py new file mode 100644 index 0000000000..5a860d9c45 --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Raghnus.py @@ -0,0 +1,26 @@ +# URL: https://www.python.org + +#Comentario de una linea + +""" +Comentario +de +varias lineas +""" + +#Variable +x = 5 + +#Constante +VARIABLE_CONSTANTE = 'Constante' + +#Tipos primitivos del lenguaje +cadena = "Python" #String +entero = 8 #Int +flotante = 9.05 #Float +booleano = True #Boolean + +#Imprimir mensaje +print("Hola,", cadena) + + From 2637db3077d99dfc60e0b1b5549075dda1f947e9 Mon Sep 17 00:00:00 2001 From: AlanShakir <144908590+AlanShakir@users.noreply.github.com> Date: Sun, 22 Sep 2024 19:59:16 -0300 Subject: [PATCH 486/539] #31 - Python Simulador Juegos Olimpicos --- .../python/alanshakir.py" | 158 ++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 "Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/alanshakir.py" diff --git "a/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/alanshakir.py" "b/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/alanshakir.py" new file mode 100644 index 0000000000..9943601dd8 --- /dev/null +++ "b/Roadmap/31 - SIMULADOR JUEGOS OL\303\215MPICOS/python/alanshakir.py" @@ -0,0 +1,158 @@ +""" +/* + * EJERCICIO: + * ¡Los JJOO de París 2024 han comenzado! + * Crea un programa que simule la celebración de los juegos. + * El programa debe permitir al usuario registrar eventos y participantes, + * realizar la simulación de los eventos asignando posiciones de manera aleatoria + * y generar un informe final. Todo ello por terminal. + * Requisitos: + * 1. Registrar eventos deportivos. + * 2. Registrar participantes por nombre y país. + * 3. Simular eventos de manera aleatoria en base a los participantes (mínimo 3). + * 4. Asignar medallas (oro, plata y bronce) basándose en el resultado del evento. + * 5. Mostrar los ganadores por cada evento. + * 6. Mostrar el ranking de países según el número de medallas. + * Acciones: + * 1. Registro de eventos. + * 2. Registro de participantes. + * 3. Simulación de eventos. + * 4. Creación de informes. + * 5. Salir del programa. + */ +""" +import random +class Participant: + def __init__(self, name, country): + self.name = name + self.country = country + + def __eq__(self, value: object) -> bool: + if isinstance(value, Participant): + return self.name == value.name and self.country == value.country + return False + + def __hash__(self) -> int: + return hash(self.name, self.country) + +class OlimpicsGames: + def __init__(self): + self.events = [] + self.participants = {} + self.results = {} + self.country_results = {} + + + def register_event(self): + event = input("Introduce el nombre del evento deportivo: ").strip() + if event in self.events: + print(f"{event} ya esta registrado") + else: + + self.events.append(event) + print(f"{event} registrado exitosamente") + + def register_participant(self): + if not self.events: + print("No hay eventos registrados") + return + else: + name = input("Introduce el nombre del participante: ").strip() + country = input("Introduce el pais del participante: ").strip() + participant = Participant(name, country) + + print("Eventos disponible") + for index, event in enumerate(self.events): + print(f"{index +1}. {event}") + + event_choice = int(input("Selecciona un indice para asignar evento al participante: ")) - 1 + + if event_choice >= 0 and event_choice <= len(self.events): + event = self.events[event_choice] + if event in self.participants and participant in self.participants[event]: + print(f"{participant} ya esta registrado en el evento") + else: + if event not in self.participants: + self.participants[event] = [] + self.participants[event].append(participant) + print(f"participante {name} se ha registrado en el evento {event}") + else: + print("Evento invalido") + + def simulator_events(self): + if not self.events: + print("No hay eventos registrados") + return + for event in self.events: + if len(self.participants[event]) < 3: + print(f"no hay participantes suficientes para el {event}") + continue + event_participants = random.sample(self.participants[event], 3) + random.shuffle(event_participants) + + gold, silver, bronze = event_participants + self.results[event] = [gold, silver, bronze] + + self.update_country_results(gold.country, "gold") + self.update_country_results(silver.country, "silver") + self.update_country_results(bronze.country, "bronze") + + print(f"resultados de la simulacion: {event}") + print(f"Oro: {gold.name} ({gold.country})") + print(f"Silver: {silver.name} ({silver.country})") + print(f"Bronze: {bronze.name} ({bronze.country})") + + def update_country_results(self, country, medal): + if country not in self.country_results: + self.country_results[country] = { + "gold" : 0, + "silver" : 0, + "bronze": 0 + } + self.country_results[country][medal] += 1 + + def create_report(self): + print("Informe juegos") + if self.results: + for event, winners in self.results.items(): + print(f"resultados: {event}") + print(f"Oro: {winners[0].name} ({winners[0].country})") + print(f"Silver: {winners[1].name} ({winners[1].country})") + print(f"Bronze: {winners[2].name} ({winners[2].country})") + else: + print("No hay eventos registrados") + + if self.country_results: + for country, medals in sorted(self.country_results.items(), key=lambda x: (x[1]["gold"], x[1]["silver"], x[1]["bronze"]), reverse=True): + print(f"{country}: Oro {medals['gold']}, Silver {medals['silver']}, Bronze {medals['bronze']}") + else: + print("No hay medallas por pais") + + + + +olimpics = OlimpicsGames() +print("Simulador de juegos olimpicos") +while True: + print() + print("1. Registro de eventos.") + print("2. Registro de participantes.") + print("3. Simulación de eventos.") + print("4. Creación de informes.") + print("5. Salir del programa.") + print() + + option = input("Elige una accion: ") + print() + match option: + case "1": + olimpics.register_event() + case "2": + olimpics.register_participant() + case "3": + olimpics.simulator_events() + case "4": + olimpics.create_report() + case "5": + print("Fin de la simulacion.") + break From a9d77f7f69ee208eb265aa4cb63d7a2387971a05 Mon Sep 17 00:00:00 2001 From: mouredev Date: Mon, 23 Sep 2024 00:16:01 +0000 Subject: [PATCH 487/539] Update stats --- Roadmap/stats.json | 2152 ++++++++++++++++++++++---------------------- 1 file changed, 1079 insertions(+), 1073 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index d0217f4153..a7ae1c7414 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,13 +1,13 @@ { "challenges_total": 39, "languages_total": 48, - "files_total": 7191, - "users_total": 1201, + "files_total": 7210, + "users_total": 1202, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1299 + "count": 1301 }, { "order": 2, @@ -22,12 +22,12 @@ { "order": 4, "name": "03 - ESTRUCTURAS DE DATOS", - "count": 412 + "count": 414 }, { "order": 5, "name": "04 - CADENAS DE CARACTERES", - "count": 342 + "count": 344 }, { "order": 6, @@ -52,17 +52,17 @@ { "order": 10, "name": "09 - HERENCIA", - "count": 224 + "count": 227 }, { "order": 11, "name": "10 - EXCEPCIONES", - "count": 183 + "count": 186 }, { "order": 12, "name": "11 - MANEJO DE FICHEROS", - "count": 158 + "count": 160 }, { "order": 13, @@ -82,7 +82,7 @@ { "order": 16, "name": "16 - EXPRESIONES REGULARES", - "count": 128 + "count": 129 }, { "order": 17, @@ -92,7 +92,7 @@ { "order": 18, "name": "17 - ITERACIONES", - "count": 117 + "count": 118 }, { "order": 19, @@ -197,51 +197,51 @@ { "order": 39, "name": "38 - MOUREDEV PRO", - "count": 24 + "count": 27 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 3097, - "percentage": 43.07 + "count": 3111, + "percentage": 43.15 }, { "order": 2, "name": "javascript", "count": 1414, - "percentage": 19.66 + "percentage": 19.61 }, { "order": 3, "name": "java", - "count": 667, - "percentage": 9.28 + "count": 668, + "percentage": 9.26 }, { "order": 4, "name": "typescript", "count": 325, - "percentage": 4.52 + "percentage": 4.51 }, { "order": 5, "name": "c#", "count": 260, - "percentage": 3.62 + "percentage": 3.61 }, { "order": 6, "name": "kotlin", "count": 222, - "percentage": 3.09 + "percentage": 3.08 }, { "order": 7, "name": "go", - "count": 218, - "percentage": 3.03 + "count": 219, + "percentage": 3.04 }, { "order": 8, @@ -253,13 +253,13 @@ "order": 9, "name": "php", "count": 163, - "percentage": 2.27 + "percentage": 2.26 }, { "order": 10, "name": "c++", - "count": 117, - "percentage": 1.63 + "count": 118, + "percentage": 1.64 }, { "order": 11, @@ -270,8 +270,8 @@ { "order": 12, "name": "c", - "count": 70, - "percentage": 0.97 + "count": 72, + "percentage": 1.0 }, { "order": 13, @@ -506,7 +506,7 @@ { "order": 3, "name": "hozlucas28", - "count": 109, + "count": 111, "languages": 3 }, { @@ -1039,91 +1039,91 @@ }, { "order": 92, + "name": "mvidalb", + "count": 18, + "languages": 1 + }, + { + "order": 93, "name": "mensius87", "count": 17, "languages": 4 }, { - "order": 93, + "order": 94, "name": "kevined11", "count": 17, "languages": 3 }, { - "order": 94, + "order": 95, "name": "saicobys", "count": 17, "languages": 2 }, { - "order": 95, + "order": 96, "name": "martinbohorquez", "count": 17, "languages": 2 }, { - "order": 96, + "order": 97, "name": "raulfauli", "count": 17, "languages": 2 }, { - "order": 97, + "order": 98, "name": "hyromy", "count": 17, "languages": 1 }, { - "order": 98, + "order": 99, "name": "andreavzqz", "count": 17, "languages": 1 }, { - "order": 99, + "order": 100, "name": "rxvlc", "count": 16, "languages": 3 }, { - "order": 100, + "order": 101, "name": "mariovelascodev", "count": 16, "languages": 2 }, { - "order": 101, + "order": 102, "name": "sergiogi99", "count": 16, "languages": 2 }, { - "order": 102, + "order": 103, "name": "tofedev", "count": 16, "languages": 2 }, - { - "order": 103, - "name": "oniricoh", - "count": 16, - "languages": 1 - }, { "order": 104, - "name": "danielhdzr", + "name": "oniricoh", "count": 16, "languages": 1 }, { "order": 105, - "name": "juanchernandezdev", + "name": "danielhdzr", "count": 16, "languages": 1 }, { "order": 106, - "name": "mvidalb", + "name": "juanchernandezdev", "count": 16, "languages": 1 }, @@ -1333,487 +1333,487 @@ }, { "order": 141, + "name": "d1d4cum", + "count": 12, + "languages": 2 + }, + { + "order": 142, "name": "pipe281", "count": 12, "languages": 1 }, { - "order": 142, + "order": 143, "name": "dataciriano", "count": 12, "languages": 1 }, { - "order": 143, + "order": 144, "name": "josealberto13", "count": 12, "languages": 1 }, { - "order": 144, + "order": 145, "name": "evilpotato04", "count": 12, "languages": 1 }, { - "order": 145, + "order": 146, "name": "clmiranda", "count": 12, "languages": 1 }, { - "order": 146, + "order": 147, + "name": "nicoheguaburu", + "count": 12, + "languages": 1 + }, + { + "order": 148, "name": "javierjoyera", "count": 12, "languages": 1 }, { - "order": 147, + "order": 149, "name": "pancratzia", "count": 12, "languages": 1 }, { - "order": 148, + "order": 150, "name": "jeronimocardu", "count": 12, "languages": 1 }, { - "order": 149, + "order": 151, "name": "andrewcodev", "count": 12, "languages": 1 }, { - "order": 150, + "order": 152, "name": "arkmiguel379", "count": 11, "languages": 2 }, { - "order": 151, + "order": 153, "name": "switchdays", "count": 11, "languages": 2 }, { - "order": 152, + "order": 154, "name": "jchavescaceres", "count": 11, "languages": 2 }, { - "order": 153, + "order": 155, "name": "majinka10", "count": 11, "languages": 1 }, { - "order": 154, + "order": 156, "name": "warclimb", "count": 11, "languages": 1 }, { - "order": 155, + "order": 157, "name": "59822", "count": 11, "languages": 1 }, { - "order": 156, + "order": 158, "name": "m1l0j05", "count": 11, "languages": 1 }, { - "order": 157, + "order": 159, "name": "alainmartz", "count": 11, "languages": 1 }, { - "order": 158, + "order": 160, "name": "mirandayuber", "count": 11, "languages": 1 }, { - "order": 159, + "order": 161, "name": "oleojake", "count": 11, "languages": 1 }, { - "order": 160, + "order": 162, "name": "charlerodriguez3", "count": 11, "languages": 1 }, { - "order": 161, + "order": 163, "name": "evanz2608", "count": 11, "languages": 1 }, { - "order": 162, + "order": 164, "name": "gustavogomez19", "count": 11, "languages": 1 }, { - "order": 163, + "order": 165, "name": "abelade", "count": 11, "languages": 1 }, { - "order": 164, + "order": 166, "name": "jeigar2", "count": 11, "languages": 1 }, { - "order": 165, + "order": 167, "name": "ialmontedr0", "count": 11, "languages": 1 }, { - "order": 166, + "order": 168, "name": "bertomp", "count": 10, "languages": 5 }, { - "order": 167, + "order": 169, "name": "othamae", "count": 10, "languages": 3 }, { - "order": 168, + "order": 170, "name": "m-doce", "count": 10, "languages": 2 }, { - "order": 169, + "order": 171, "name": "rianojnicolas", "count": 10, "languages": 2 }, { - "order": 170, + "order": 172, "name": "vixxtory", "count": 10, "languages": 2 }, { - "order": 171, + "order": 173, "name": "marcose-ferretoe", "count": 10, "languages": 1 }, { - "order": 172, + "order": 174, "name": "josecox13", "count": 10, "languages": 1 }, { - "order": 173, + "order": 175, "name": "littlemabbit", "count": 10, "languages": 1 }, { - "order": 174, + "order": 176, "name": "thonys07", "count": 10, "languages": 1 }, { - "order": 175, + "order": 177, "name": "k-90", "count": 10, "languages": 1 }, { - "order": 176, + "order": 178, "name": "daparradom", "count": 10, "languages": 1 }, { - "order": 177, + "order": 179, "name": "xemita007", "count": 10, "languages": 1 }, { - "order": 178, + "order": 180, "name": "popmaquin", "count": 10, "languages": 1 }, { - "order": 179, + "order": 181, "name": "glitzypanic", "count": 10, "languages": 1 }, { - "order": 180, + "order": 182, "name": "natalyjoanna", "count": 10, "languages": 1 }, { - "order": 181, + "order": 183, "name": "kleyner098", "count": 10, "languages": 1 }, { - "order": 182, + "order": 184, "name": "mauricio-leyva", "count": 10, "languages": 1 }, { - "order": 183, + "order": 185, "name": "teren91", "count": 10, "languages": 1 }, { - "order": 184, + "order": 186, "name": "julianbuitragocharry-dev", "count": 9, "languages": 3 }, { - "order": 185, + "order": 187, "name": "luisolivaresj", "count": 9, "languages": 2 }, { - "order": 186, - "name": "djsurgeon", + "order": 188, + "name": "h4ckxel", "count": 9, "languages": 2 }, { - "order": 187, - "name": "joseesmil04", + "order": 189, + "name": "djsurgeon", "count": 9, "languages": 2 }, { - "order": 188, - "name": "d1d4cum", + "order": 190, + "name": "joseesmil04", "count": 9, "languages": 2 }, { - "order": 189, + "order": 191, "name": "jcdm60", "count": 9, "languages": 1 }, { - "order": 190, + "order": 192, "name": "gjbecerrae", "count": 9, "languages": 1 }, { - "order": 191, + "order": 193, "name": "yoezequiel", "count": 9, "languages": 1 }, { - "order": 192, + "order": 194, "name": "troynebula", "count": 9, "languages": 1 }, { - "order": 193, - "name": "nicoheguaburu", - "count": 9, - "languages": 1 - }, - { - "order": 194, + "order": 195, "name": "omarland", "count": 9, "languages": 1 }, { - "order": 195, + "order": 196, "name": "cmejiajulian", "count": 9, "languages": 1 }, { - "order": 196, + "order": 197, "name": "karys4", "count": 9, "languages": 1 }, { - "order": 197, + "order": 198, "name": "brockar", "count": 9, "languages": 1 }, { - "order": 198, + "order": 199, "name": "sperezsa", "count": 9, "languages": 1 }, { - "order": 199, + "order": 200, "name": "pakiuh", "count": 8, "languages": 4 }, { - "order": 200, + "order": 201, "name": "angel-delg", "count": 8, "languages": 4 }, { - "order": 201, + "order": 202, "name": "pcosin", "count": 8, "languages": 2 }, { - "order": 202, + "order": 203, "name": "ansuzgs", "count": 8, "languages": 2 }, { - "order": 203, + "order": 204, "name": "xmunder", "count": 8, "languages": 2 }, { - "order": 204, + "order": 205, "name": "jtrujilloalcocer", "count": 8, "languages": 1 }, { - "order": 205, + "order": 206, "name": "linerlander", "count": 8, "languages": 1 }, { - "order": 206, + "order": 207, "name": "zequy40", "count": 8, "languages": 1 }, { - "order": 207, + "order": 208, "name": "toral24", "count": 8, "languages": 1 }, { - "order": 208, + "order": 209, "name": "abelperezcollado", "count": 8, "languages": 1 }, { - "order": 209, + "order": 210, "name": "matitc", "count": 8, "languages": 1 }, { - "order": 210, + "order": 211, "name": "jaxi86", "count": 8, "languages": 1 }, { - "order": 211, + "order": 212, "name": "isj-code", "count": 8, "languages": 1 }, { - "order": 212, + "order": 213, "name": "vid92", "count": 8, "languages": 1 }, { - "order": 213, + "order": 214, "name": "westwbn", "count": 8, "languages": 1 }, { - "order": 214, + "order": 215, "name": "srvariable", "count": 8, "languages": 1 }, { - "order": 215, + "order": 216, "name": "cyberdidac", "count": 8, "languages": 1 }, { - "order": 216, + "order": 217, "name": "bytecodesky", "count": 8, "languages": 1 }, { - "order": 217, + "order": 218, "name": "darubiano", "count": 7, "languages": 7 }, { - "order": 218, + "order": 219, "name": "nwpablodeveloper", "count": 7, "languages": 3 }, { - "order": 219, + "order": 220, "name": "cubandeveloper89", "count": 7, "languages": 3 }, - { - "order": 220, - "name": "younes0-0", - "count": 7, - "languages": 2 - }, { "order": 221, - "name": "h4ckxel", + "name": "younes0-0", "count": 7, "languages": 2 }, @@ -2053,1543 +2053,1543 @@ }, { "order": 261, + "name": "elbarbero", + "count": 6, + "languages": 1 + }, + { + "order": 262, "name": "bryan112094", "count": 5, "languages": 3 }, { - "order": 262, + "order": 263, "name": "alabacw74", "count": 5, "languages": 3 }, { - "order": 263, + "order": 264, "name": "espinoleandroo", "count": 5, "languages": 2 }, { - "order": 264, + "order": 265, "name": "vmatmarco", "count": 5, "languages": 2 }, { - "order": 265, + "order": 266, "name": "andresmendozaf", "count": 5, "languages": 2 }, { - "order": 266, + "order": 267, "name": "icedrek", "count": 5, "languages": 2 }, { - "order": 267, + "order": 268, "name": "jalivur", "count": 5, "languages": 2 }, { - "order": 268, + "order": 269, "name": "alejandrodave", "count": 5, "languages": 2 }, { - "order": 269, + "order": 270, "name": "d0ubt0", "count": 5, "languages": 1 }, { - "order": 270, + "order": 271, "name": "yharyarias", "count": 5, "languages": 1 }, { - "order": 271, + "order": 272, "name": "jorgeadamowicz", "count": 5, "languages": 1 }, { - "order": 272, + "order": 273, "name": "zakkdrte", "count": 5, "languages": 1 }, { - "order": 273, + "order": 274, "name": "jose-luis-lanza", "count": 5, "languages": 1 }, { - "order": 274, + "order": 275, "name": "santiago434c", "count": 5, "languages": 1 }, { - "order": 275, + "order": 276, "name": "augustdev2003", "count": 5, "languages": 1 }, { - "order": 276, + "order": 277, "name": "alberba", "count": 5, "languages": 1 }, { - "order": 277, + "order": 278, "name": "thezhizn", "count": 5, "languages": 1 }, { - "order": 278, + "order": 279, "name": "gabrielramos02", "count": 5, "languages": 1 }, { - "order": 279, + "order": 280, + "name": "javitron100", + "count": 5, + "languages": 1 + }, + { + "order": 281, "name": "gmbarrios", "count": 5, "languages": 1 }, { - "order": 280, + "order": 282, "name": "nomellamodante", "count": 5, "languages": 1 }, { - "order": 281, + "order": 283, "name": "sarismejiasanchez", "count": 5, "languages": 1 }, { - "order": 282, + "order": 284, "name": "franz-arzapalo", "count": 5, "languages": 1 }, { - "order": 283, + "order": 285, "name": "drvito1977", "count": 5, "languages": 1 }, { - "order": 284, + "order": 286, "name": "joanfv-git", "count": 5, "languages": 1 }, { - "order": 285, + "order": 287, "name": "eloychavezdev", "count": 5, "languages": 1 }, { - "order": 286, + "order": 288, "name": "n1sek", "count": 5, "languages": 1 }, { - "order": 287, + "order": 289, "name": "vixito", "count": 5, "languages": 1 }, { - "order": 288, + "order": 290, "name": "d4-n1", "count": 5, "languages": 1 }, { - "order": 289, + "order": 291, "name": "lauracastrillonmp", "count": 5, "languages": 1 }, { - "order": 290, + "order": 292, "name": "danielbustos342", "count": 5, "languages": 1 }, { - "order": 291, + "order": 293, "name": "robmxz", "count": 5, "languages": 1 }, { - "order": 292, + "order": 294, "name": "douglasdiazr", "count": 5, "languages": 1 }, { - "order": 293, + "order": 295, "name": "vasilealexandru02", "count": 5, "languages": 1 }, { - "order": 294, + "order": 296, "name": "victormugo", "count": 5, "languages": 1 }, { - "order": 295, + "order": 297, "name": "esaens12", "count": 5, "languages": 1 }, { - "order": 296, + "order": 298, "name": "adridoce", "count": 5, "languages": 1 }, { - "order": 297, + "order": 299, "name": "lucasag01", "count": 5, "languages": 1 }, { - "order": 298, + "order": 300, "name": "karolle", "count": 5, "languages": 1 }, { - "order": 299, + "order": 301, "name": "jcrodmir", "count": 5, "languages": 1 }, { - "order": 300, + "order": 302, "name": "alvarofernandezavalos", "count": 5, "languages": 1 }, { - "order": 301, + "order": 303, "name": "thaishdz", "count": 5, "languages": 1 }, { - "order": 302, + "order": 304, "name": "boterop", "count": 5, "languages": 1 }, { - "order": 303, + "order": 305, "name": "bastianalq", "count": 5, "languages": 1 }, { - "order": 304, + "order": 306, "name": "rafacv23", "count": 5, "languages": 1 }, { - "order": 305, + "order": 307, "name": "mohamedelderkaoui", "count": 5, "languages": 1 }, { - "order": 306, + "order": 308, "name": "w00k", "count": 5, "languages": 1 }, { - "order": 307, + "order": 309, "name": "zarakilancelot", "count": 4, "languages": 3 }, { - "order": 308, + "order": 310, "name": "ruthmp", "count": 4, "languages": 2 }, { - "order": 309, + "order": 311, "name": "mendozalz", "count": 4, "languages": 2 }, { - "order": 310, + "order": 312, "name": "salkalero", "count": 4, "languages": 2 }, { - "order": 311, + "order": 313, "name": "willr30", "count": 4, "languages": 2 }, { - "order": 312, + "order": 314, "name": "eonozux", "count": 4, "languages": 2 }, { - "order": 313, + "order": 315, "name": "josefuentes-dev", "count": 4, "languages": 2 }, { - "order": 314, + "order": 316, "name": "k3nvd", "count": 4, "languages": 2 }, { - "order": 315, + "order": 317, "name": "daeduol", "count": 4, "languages": 2 }, { - "order": 316, + "order": 318, "name": "fullovellas", "count": 4, "languages": 2 }, { - "order": 317, + "order": 319, "name": "yablik", "count": 4, "languages": 2 }, { - "order": 318, + "order": 320, "name": "nox456", "count": 4, "languages": 1 }, { - "order": 319, + "order": 321, "name": "mplatab", "count": 4, "languages": 1 }, { - "order": 320, + "order": 322, "name": "davstudy", "count": 4, "languages": 1 }, { - "order": 321, + "order": 323, "name": "rodrigoghr", "count": 4, "languages": 1 }, { - "order": 322, + "order": 324, "name": "ramxv", "count": 4, "languages": 1 }, { - "order": 323, + "order": 325, "name": "inkhemi", "count": 4, "languages": 1 }, { - "order": 324, + "order": 326, "name": "tobibordino", "count": 4, "languages": 1 }, { - "order": 325, + "order": 327, "name": "mallcca", "count": 4, "languages": 1 }, { - "order": 326, + "order": 328, "name": "guillermo-k", "count": 4, "languages": 1 }, { - "order": 327, + "order": 329, "name": "angell4s", "count": 4, "languages": 1 }, { - "order": 328, + "order": 330, "name": "axelprz", "count": 4, "languages": 1 }, { - "order": 329, + "order": 331, "name": "luissssoto", "count": 4, "languages": 1 }, { - "order": 330, + "order": 332, "name": "dlgai12", "count": 4, "languages": 1 }, { - "order": 331, + "order": 333, "name": "carrenoalexander", "count": 4, "languages": 1 }, { - "order": 332, + "order": 334, "name": "txuky", "count": 4, "languages": 1 }, { - "order": 333, + "order": 335, "name": "zerek247", "count": 4, "languages": 1 }, { - "order": 334, + "order": 336, "name": "buriticasara", "count": 4, "languages": 1 }, { - "order": 335, + "order": 337, "name": "jadraz", "count": 4, "languages": 1 }, { - "order": 336, + "order": 338, "name": "cdbiancotti", "count": 4, "languages": 1 }, { - "order": 337, + "order": 339, "name": "albertorevel", "count": 4, "languages": 1 }, { - "order": 338, + "order": 340, "name": "anvildestroyer", "count": 4, "languages": 1 }, { - "order": 339, + "order": 341, "name": "vicman-182", "count": 4, "languages": 1 }, { - "order": 340, + "order": 342, "name": "sunjamer", "count": 4, "languages": 1 }, { - "order": 341, + "order": 343, "name": "javirub", "count": 4, "languages": 1 }, { - "order": 342, + "order": 344, "name": "lrpeset", "count": 4, "languages": 1 }, { - "order": 343, + "order": 345, "name": "joshbaez", "count": 4, "languages": 1 }, { - "order": 344, + "order": 346, "name": "joapalobael", "count": 4, "languages": 1 }, { - "order": 345, + "order": 347, "name": "joaquinlopez14", "count": 4, "languages": 1 }, { - "order": 346, + "order": 348, "name": "juperdev", "count": 4, "languages": 1 }, { - "order": 347, + "order": 349, "name": "angelurrutdev", "count": 4, "languages": 1 }, { - "order": 348, + "order": 350, "name": "duendeintemporal", "count": 4, "languages": 1 }, { - "order": 349, + "order": 351, "name": "omegatroy", "count": 4, "languages": 1 }, { - "order": 350, + "order": 352, "name": "socramwd", "count": 4, "languages": 1 }, { - "order": 351, + "order": 353, "name": "mateo423", "count": 4, "languages": 1 }, { - "order": 352, + "order": 354, "name": "dieswae", "count": 4, "languages": 1 }, { - "order": 353, + "order": 355, "name": "elianisdev", "count": 4, "languages": 1 }, { - "order": 354, + "order": 356, "name": "marcoslombardo", "count": 4, "languages": 1 }, { - "order": 355, + "order": 357, "name": "andeveling", "count": 4, "languages": 1 }, { - "order": 356, + "order": 358, "name": "sbs24", "count": 4, "languages": 1 }, { - "order": 357, + "order": 359, "name": "carzep09", "count": 4, "languages": 1 }, { - "order": 358, + "order": 360, "name": "traver79", "count": 4, "languages": 1 }, { - "order": 359, + "order": 361, "name": "santiago-munoz-garcia", "count": 4, "languages": 1 }, { - "order": 360, + "order": 362, "name": "blasbarragan", "count": 4, "languages": 1 }, { - "order": 361, + "order": 363, "name": "jerrysantana", "count": 4, "languages": 1 }, { - "order": 362, + "order": 364, "name": "password1989", "count": 4, "languages": 1 }, { - "order": 363, + "order": 365, "name": "bladi23", "count": 4, "languages": 1 }, { - "order": 364, + "order": 366, "name": "juanca2805", "count": 4, "languages": 1 }, { - "order": 365, + "order": 367, "name": "elhacedordecosas", "count": 4, "languages": 1 }, { - "order": 366, + "order": 368, "name": "hugovrc", "count": 4, "languages": 1 }, { - "order": 367, + "order": 369, "name": "mayerga", "count": 4, "languages": 1 }, { - "order": 368, + "order": 370, "name": "deivitdev", "count": 4, "languages": 1 }, { - "order": 369, + "order": 371, "name": "johnalexguerrero", "count": 4, "languages": 1 }, { - "order": 370, + "order": 372, "name": "jairo-alejandro", "count": 4, "languages": 1 }, { - "order": 371, + "order": 373, "name": "quejuan52", "count": 4, "languages": 1 }, { - "order": 372, + "order": 374, "name": "abel-ade", "count": 4, "languages": 1 }, { - "order": 373, + "order": 375, "name": "angelo-eyama", "count": 3, "languages": 3 }, { - "order": 374, + "order": 376, "name": "owen-ian", "count": 3, "languages": 3 }, { - "order": 375, + "order": 377, "name": "akaisombra", "count": 3, "languages": 3 }, { - "order": 376, + "order": 378, "name": "abelsrzz", "count": 3, "languages": 3 }, { - "order": 377, + "order": 379, "name": "jehiselruth", "count": 3, "languages": 3 }, { - "order": 378, + "order": 380, "name": "oskarcali", "count": 3, "languages": 3 }, { - "order": 379, + "order": 381, "name": "eloitr", "count": 3, "languages": 2 }, { - "order": 380, + "order": 382, "name": "diegopc-dev", "count": 3, "languages": 2 }, { - "order": 381, + "order": 383, "name": "dimasb69", "count": 3, "languages": 2 }, { - "order": 382, + "order": 384, "name": "seba9906", "count": 3, "languages": 2 }, { - "order": 383, + "order": 385, "name": "arliumdev", "count": 3, "languages": 2 }, { - "order": 384, + "order": 386, "name": "robindev1812", "count": 3, "languages": 2 }, { - "order": 385, + "order": 387, "name": "alfarog507", "count": 3, "languages": 2 }, { - "order": 386, + "order": 388, "name": "skala2301", "count": 3, "languages": 2 }, { - "order": 387, + "order": 389, "name": "augustosdev", "count": 3, "languages": 2 }, { - "order": 388, + "order": 390, "name": "clotrack", "count": 3, "languages": 2 }, { - "order": 389, + "order": 391, "name": "pablotaber", "count": 3, "languages": 2 }, { - "order": 390, + "order": 392, "name": "allanoscoding", "count": 3, "languages": 2 }, { - "order": 391, + "order": 393, "name": "n-skot", "count": 3, "languages": 2 }, - { - "order": 392, - "name": "bryanalzate007", - "count": 3, - "languages": 1 - }, - { - "order": 393, - "name": "tonywarcode", - "count": 3, - "languages": 1 - }, { "order": 394, - "name": "exanderguitar", + "name": "bryanalzate007", "count": 3, "languages": 1 }, { "order": 395, - "name": "elkin-dev", + "name": "tonywarcode", "count": 3, "languages": 1 }, { "order": 396, - "name": "carlosalberto05", + "name": "exanderguitar", "count": 3, "languages": 1 }, { "order": 397, - "name": "minn09", + "name": "elkin-dev", "count": 3, "languages": 1 }, { "order": 398, - "name": "jorgegarcia-dev", + "name": "carlosalberto05", "count": 3, "languages": 1 }, { "order": 399, - "name": "guillesese", + "name": "minn09", "count": 3, "languages": 1 }, { "order": 400, - "name": "tekatoki", + "name": "jorgegarcia-dev", "count": 3, "languages": 1 }, { "order": 401, - "name": "dandrusco", + "name": "guillesese", "count": 3, "languages": 1 }, { "order": 402, - "name": "estelacode", + "name": "tekatoki", "count": 3, "languages": 1 }, { "order": 403, - "name": "strooplab", + "name": "dandrusco", "count": 3, "languages": 1 }, { "order": 404, - "name": "monikgbar", + "name": "estelacode", "count": 3, "languages": 1 }, { "order": 405, - "name": "mstaz4", + "name": "strooplab", "count": 3, "languages": 1 }, { "order": 406, - "name": "ramon-almeida", + "name": "monikgbar", "count": 3, "languages": 1 }, { "order": 407, - "name": "oscarhub90", + "name": "mstaz4", "count": 3, "languages": 1 }, { "order": 408, - "name": "artdugarte", + "name": "ramon-almeida", "count": 3, "languages": 1 }, { "order": 409, - "name": "elder202", + "name": "oscarhub90", "count": 3, "languages": 1 }, { "order": 410, - "name": "bertolini-victor", + "name": "artdugarte", "count": 3, "languages": 1 }, { "order": 411, - "name": "oscargeovannyrincon", + "name": "elder202", "count": 3, "languages": 1 }, { "order": 412, - "name": "rgeditv1", + "name": "bertolini-victor", "count": 3, "languages": 1 }, { "order": 413, - "name": "frostbitepy", + "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { "order": 414, - "name": "antii16", + "name": "rgeditv1", "count": 3, "languages": 1 }, { "order": 415, - "name": "mmacalli", + "name": "frostbitepy", "count": 3, "languages": 1 }, { "order": 416, - "name": "eliskopun", + "name": "antii16", "count": 3, "languages": 1 }, { "order": 417, - "name": "jofedev", + "name": "mmacalli", "count": 3, "languages": 1 }, { "order": 418, - "name": "suescun845", + "name": "eliskopun", "count": 3, "languages": 1 }, { "order": 419, - "name": "yeam-10", + "name": "jofedev", "count": 3, "languages": 1 }, { "order": 420, - "name": "joandevpy", + "name": "suescun845", "count": 3, "languages": 1 }, { "order": 421, - "name": "macova96", + "name": "yeam-10", "count": 3, "languages": 1 }, { "order": 422, - "name": "beonzj", + "name": "joandevpy", "count": 3, "languages": 1 }, { "order": 423, - "name": "betzadev", + "name": "macova96", "count": 3, "languages": 1 }, { "order": 424, - "name": "javitron100", + "name": "beonzj", "count": 3, "languages": 1 }, { "order": 425, - "name": "mizadlogcia", + "name": "betzadev", "count": 3, "languages": 1 }, { "order": 426, - "name": "emilianohoyos", + "name": "mizadlogcia", "count": 3, "languages": 1 }, { "order": 427, - "name": "camilo-zuluaga", + "name": "emilianohoyos", "count": 3, "languages": 1 }, { "order": 428, - "name": "zzepu", + "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { "order": 429, - "name": "danielperezrubio", + "name": "zzepu", "count": 3, "languages": 1 }, { "order": 430, - "name": "marcoh2325", + "name": "danielperezrubio", "count": 3, "languages": 1 }, { "order": 431, - "name": "nathaliamf", + "name": "marcoh2325", "count": 3, "languages": 1 }, { "order": 432, - "name": "jacarrillob", + "name": "nathaliamf", "count": 3, "languages": 1 }, { "order": 433, - "name": "fdcorreadev", + "name": "jacarrillob", "count": 3, "languages": 1 }, { "order": 434, - "name": "matiascba27", + "name": "fdcorreadev", "count": 3, "languages": 1 }, { "order": 435, - "name": "andresargote", + "name": "matiascba27", "count": 3, "languages": 1 }, { "order": 436, - "name": "victorsschz", + "name": "andresargote", "count": 3, "languages": 1 }, { "order": 437, - "name": "faga01", + "name": "victorsschz", "count": 3, "languages": 1 }, { "order": 438, - "name": "dariorfm", + "name": "faga01", "count": 3, "languages": 1 }, { "order": 439, - "name": "hectoriglesias", + "name": "dariorfm", "count": 3, "languages": 1 }, { "order": 440, - "name": "josueeeee", + "name": "hectoriglesias", "count": 3, "languages": 1 }, { "order": 441, - "name": "fernandog25", + "name": "josueeeee", "count": 3, "languages": 1 }, { "order": 442, - "name": "migueltfangche", + "name": "fernandog25", "count": 3, "languages": 1 }, { "order": 443, - "name": "emaenriquez", + "name": "migueltfangche", "count": 3, "languages": 1 }, { "order": 444, - "name": "matrix-miguel", + "name": "emaenriquez", "count": 3, "languages": 1 }, { "order": 445, - "name": "r4kso", + "name": "matrix-miguel", "count": 3, "languages": 1 }, { "order": 446, - "name": "davidb313", + "name": "r4kso", "count": 3, "languages": 1 }, { "order": 447, - "name": "arbenisacosta", + "name": "davidb313", "count": 3, "languages": 1 }, { "order": 448, - "name": "sebascmb", + "name": "arbenisacosta", "count": 3, "languages": 1 }, { "order": 449, - "name": "jelozanov", + "name": "sebascmb", "count": 3, "languages": 1 }, { "order": 450, - "name": "singularpigeon", + "name": "jelozanov", "count": 3, "languages": 1 }, { "order": 451, - "name": "asaelz", + "name": "singularpigeon", "count": 3, "languages": 1 }, { "order": 452, - "name": "gpinedaoviedo", + "name": "asaelz", "count": 3, "languages": 1 }, { "order": 453, - "name": "orlas135", + "name": "gpinedaoviedo", "count": 3, "languages": 1 }, { "order": 454, - "name": "zuluangel", + "name": "orlas135", "count": 3, "languages": 1 }, { "order": 455, - "name": "uyarra73", + "name": "zuluangel", "count": 3, "languages": 1 }, { "order": 456, - "name": "sandracalatayud", + "name": "uyarra73", "count": 3, "languages": 1 }, { "order": 457, - "name": "agusbelp", + "name": "sandracalatayud", "count": 3, "languages": 1 }, { "order": 458, - "name": "ahinar", + "name": "agusbelp", "count": 3, "languages": 1 }, { "order": 459, - "name": "magupe09", + "name": "ahinar", "count": 3, "languages": 1 }, { "order": 460, - "name": "daniback95", + "name": "magupe09", "count": 3, "languages": 1 }, { "order": 461, - "name": "hatorob", + "name": "daniback95", "count": 3, "languages": 1 }, { "order": 462, - "name": "erysnell", + "name": "hatorob", "count": 3, "languages": 1 }, { "order": 463, - "name": "legs30011", + "name": "erysnell", "count": 3, "languages": 1 }, { "order": 464, - "name": "andyfg0289", + "name": "legs30011", "count": 3, "languages": 1 }, { "order": 465, - "name": "14davidnkt", + "name": "andyfg0289", "count": 3, "languages": 1 }, { "order": 466, - "name": "samuelarandia", + "name": "14davidnkt", "count": 3, "languages": 1 }, { "order": 467, - "name": "jaimerocel96", + "name": "samuelarandia", "count": 3, "languages": 1 }, { "order": 468, - "name": "gitperalta", + "name": "jaimerocel96", "count": 3, "languages": 1 }, { "order": 469, - "name": "dannyvera1234", + "name": "gitperalta", "count": 3, "languages": 1 }, { "order": 470, - "name": "axelsparta", + "name": "dannyvera1234", "count": 3, "languages": 1 }, { "order": 471, - "name": "tebaah", + "name": "axelsparta", "count": 3, "languages": 1 }, { "order": 472, - "name": "matteozhao98", + "name": "tebaah", "count": 3, "languages": 1 }, { "order": 473, - "name": "crisvigas", + "name": "matteozhao98", "count": 3, "languages": 1 }, { "order": 474, - "name": "tomytsa", + "name": "crisvigas", "count": 3, "languages": 1 }, { "order": 475, - "name": "blfuentes", + "name": "tomytsa", "count": 3, "languages": 1 }, { "order": 476, - "name": "sebasgrdev", + "name": "blfuentes", "count": 3, "languages": 1 }, { "order": 477, - "name": "sitnestic", + "name": "sebasgrdev", "count": 3, "languages": 1 }, { "order": 478, - "name": "confley", + "name": "sitnestic", "count": 3, "languages": 1 }, { "order": 479, - "name": "francofmv", + "name": "confley", "count": 3, "languages": 1 }, { "order": 480, - "name": "david-quinones", + "name": "francofmv", "count": 3, "languages": 1 }, { "order": 481, - "name": "marce1084", + "name": "david-quinones", "count": 3, "languages": 1 }, { "order": 482, - "name": "freedainew", + "name": "marce1084", "count": 3, "languages": 1 }, { "order": 483, - "name": "rubioj17", + "name": "freedainew", "count": 3, "languages": 1 }, { "order": 484, - "name": "kine-jdf", + "name": "rubioj17", "count": 3, "languages": 1 }, { "order": 485, - "name": "kingsaul22", + "name": "kine-jdf", "count": 3, "languages": 1 }, { "order": 486, - "name": "ainoaran", + "name": "kingsaul22", "count": 3, "languages": 1 }, { "order": 487, - "name": "fluna29", + "name": "ainoaran", "count": 3, "languages": 1 }, { "order": 488, - "name": "xurxogz", + "name": "fluna29", "count": 3, "languages": 1 }, { "order": 489, - "name": "davidsorroche", + "name": "xurxogz", "count": 3, "languages": 1 }, { "order": 490, - "name": "natalinacn", + "name": "davidsorroche", "count": 3, "languages": 1 }, { "order": 491, - "name": "yaretzyrb", + "name": "natalinacn", "count": 3, "languages": 1 }, { "order": 492, - "name": "swifty0705", + "name": "yaretzyrb", "count": 3, "languages": 1 }, { "order": 493, - "name": "marianoemir", + "name": "swifty0705", "count": 3, "languages": 1 }, { "order": 494, - "name": "guido2288", + "name": "marianoemir", "count": 3, "languages": 1 }, { "order": 495, - "name": "githjuan", + "name": "guido2288", "count": 3, "languages": 1 }, { "order": 496, - "name": "rocallejas", + "name": "githjuan", "count": 3, "languages": 1 }, { "order": 497, - "name": "jeyker-dev", + "name": "rocallejas", "count": 3, "languages": 1 }, { "order": 498, - "name": "barbafebles", + "name": "jeyker-dev", "count": 3, "languages": 1 }, { "order": 499, - "name": "aggranadoss", + "name": "barbafebles", "count": 3, "languages": 1 }, { "order": 500, - "name": "heliercamejo", + "name": "aggranadoss", "count": 3, "languages": 1 }, { "order": 501, - "name": "coshiloco", + "name": "heliercamejo", "count": 3, "languages": 1 }, { "order": 502, - "name": "atienzar", + "name": "coshiloco", "count": 3, "languages": 1 }, { "order": 503, - "name": "javiearth", + "name": "atienzar", "count": 3, "languages": 1 }, { "order": 504, - "name": "marlonleon2023", + "name": "javiearth", "count": 3, "languages": 1 }, { "order": 505, - "name": "vandresca", + "name": "marlonleon2023", "count": 3, "languages": 1 }, { "order": 506, - "name": "ggtorca", + "name": "vandresca", "count": 3, "languages": 1 }, { "order": 507, - "name": "ivanpelu7", + "name": "ggtorca", "count": 3, "languages": 1 }, { "order": 508, - "name": "alejomazov", + "name": "ivanpelu7", "count": 3, "languages": 1 }, { "order": 509, - "name": "oscar503sv", + "name": "alejomazov", "count": 3, "languages": 1 }, { "order": 510, - "name": "dmauricio4", + "name": "oscar503sv", "count": 3, "languages": 1 }, { "order": 511, - "name": "davidr1594", + "name": "dmauricio4", "count": 3, "languages": 1 }, { "order": 512, - "name": "mellamoomar", + "name": "davidr1594", "count": 3, "languages": 1 }, { "order": 513, - "name": "ikeragi05", + "name": "mellamoomar", "count": 3, "languages": 1 }, { "order": 514, - "name": "nikorasu-d", + "name": "ikeragi05", "count": 3, "languages": 1 }, { "order": 515, - "name": "mantaras96", + "name": "nikorasu-d", "count": 3, "languages": 1 }, { "order": 516, - "name": "davidvilem", + "name": "mantaras96", "count": 3, "languages": 1 }, { "order": 517, - "name": "elbarbero", + "name": "davidvilem", "count": 3, "languages": 1 }, @@ -3685,4014 +3685,4020 @@ }, { "order": 533, - "name": "berentolkien", + "name": "eberstr", "count": 2, "languages": 2 }, { "order": 534, - "name": "camiloforero1997", + "name": "berentolkien", "count": 2, "languages": 2 }, { "order": 535, - "name": "jorgesilencio", + "name": "camiloforero1997", "count": 2, "languages": 2 }, { "order": 536, - "name": "enrgarvic", + "name": "jorgesilencio", "count": 2, "languages": 2 }, { "order": 537, - "name": "jurgen-alfaro", + "name": "enrgarvic", "count": 2, "languages": 2 }, { "order": 538, - "name": "alexsamboy", + "name": "jurgen-alfaro", "count": 2, "languages": 2 }, { "order": 539, - "name": "jovany-java", + "name": "alexsamboy", "count": 2, "languages": 2 }, { "order": 540, - "name": "jlcareglio", + "name": "jovany-java", "count": 2, "languages": 2 }, { "order": 541, - "name": "elsanty08", + "name": "jlcareglio", "count": 2, "languages": 2 }, { "order": 542, - "name": "lydaf", + "name": "elsanty08", "count": 2, "languages": 2 }, { "order": 543, - "name": "ismaelmatiz", + "name": "lydaf", "count": 2, "languages": 2 }, { "order": 544, - "name": "sgb004", + "name": "ismaelmatiz", "count": 2, "languages": 2 }, { "order": 545, - "name": "devvdroid01", + "name": "sgb004", "count": 2, "languages": 2 }, { "order": 546, - "name": "jhonatanmustiolacas", + "name": "devvdroid01", "count": 2, "languages": 2 }, { "order": 547, - "name": "lurtur", + "name": "jhonatanmustiolacas", "count": 2, "languages": 2 }, { "order": 548, + "name": "lurtur", + "count": 2, + "languages": 2 + }, + { + "order": 549, "name": "juanseevn", "count": 2, "languages": 1 }, { - "order": 549, + "order": 550, "name": "miguelberrio0810", "count": 2, "languages": 1 }, { - "order": 550, + "order": 551, "name": "victore16", "count": 2, "languages": 1 }, { - "order": 551, + "order": 552, "name": "zalazarmartin", "count": 2, "languages": 1 }, { - "order": 552, + "order": 553, "name": "alejandrovelasquezr", "count": 2, "languages": 1 }, { - "order": 553, + "order": 554, "name": "dokeys28", "count": 2, "languages": 1 }, { - "order": 554, + "order": 555, "name": "noaregui", "count": 2, "languages": 1 }, { - "order": 555, + "order": 556, "name": "sofia-d-p", "count": 2, "languages": 1 }, { - "order": 556, + "order": 557, "name": "freyfonseca", "count": 2, "languages": 1 }, { - "order": 557, + "order": 558, "name": "anblackter", "count": 2, "languages": 1 }, { - "order": 558, + "order": 559, "name": "fjsubero", "count": 2, "languages": 1 }, { - "order": 559, + "order": 560, "name": "gregfc95", "count": 2, "languages": 1 }, { - "order": 560, + "order": 561, "name": "nach012", "count": 2, "languages": 1 }, { - "order": 561, + "order": 562, "name": "pablosalme", "count": 2, "languages": 1 }, { - "order": 562, + "order": 563, "name": "kcx46", "count": 2, "languages": 1 }, { - "order": 563, + "order": 564, "name": "aboredllama", "count": 2, "languages": 1 }, { - "order": 564, + "order": 565, "name": "jmontoyac", "count": 2, "languages": 1 }, { - "order": 565, + "order": 566, "name": "josue-py", "count": 2, "languages": 1 }, { - "order": 566, + "order": 567, "name": "dariangl", "count": 2, "languages": 1 }, { - "order": 567, + "order": 568, "name": "alejandro-mantilla", "count": 2, "languages": 1 }, { - "order": 568, + "order": 569, "name": "inf015", "count": 2, "languages": 1 }, { - "order": 569, + "order": 570, "name": "dota43ver", "count": 2, "languages": 1 }, { - "order": 570, + "order": 571, "name": "culebropalido", "count": 2, "languages": 1 }, { - "order": 571, + "order": 572, "name": "rojasricoo", "count": 2, "languages": 1 }, { - "order": 572, + "order": 573, "name": "csaraugusto2", "count": 2, "languages": 1 }, { - "order": 573, + "order": 574, "name": "lauradiazm29", "count": 2, "languages": 1 }, { - "order": 574, + "order": 575, "name": "fernandoatello", "count": 2, "languages": 1 }, { - "order": 575, + "order": 576, "name": "vesubius", "count": 2, "languages": 1 }, { - "order": 576, + "order": 577, "name": "s384", "count": 2, "languages": 1 }, { - "order": 577, + "order": 578, "name": "aegpgrafologo", "count": 2, "languages": 1 }, { - "order": 578, + "order": 579, "name": "e-techgod", "count": 2, "languages": 1 }, { - "order": 579, + "order": 580, "name": "baauus", "count": 2, "languages": 1 }, { - "order": 580, + "order": 581, "name": "maxirica", "count": 2, "languages": 1 }, { - "order": 581, + "order": 582, "name": "ziellucio01", "count": 2, "languages": 1 }, { - "order": 582, + "order": 583, "name": "santiagodc8", "count": 2, "languages": 1 }, { - "order": 583, + "order": 584, "name": "haroldalb", "count": 2, "languages": 1 }, { - "order": 584, + "order": 585, "name": "eriickm", "count": 2, "languages": 1 }, { - "order": 585, + "order": 586, "name": "pakomor", "count": 2, "languages": 1 }, { - "order": 586, + "order": 587, "name": "dkp-dev", "count": 2, "languages": 1 }, { - "order": 587, + "order": 588, "name": "adogdev", "count": 2, "languages": 1 }, { - "order": 588, + "order": 589, "name": "ignaciogm1973", "count": 2, "languages": 1 }, { - "order": 589, + "order": 590, "name": "josephfaster", "count": 2, "languages": 1 }, { - "order": 590, + "order": 591, "name": "pedrojog", "count": 2, "languages": 1 }, { - "order": 591, + "order": 592, "name": "carlosmarte23", "count": 2, "languages": 1 }, { - "order": 592, + "order": 593, "name": "tic4", "count": 2, "languages": 1 }, { - "order": 593, + "order": 594, "name": "julind0", "count": 2, "languages": 1 }, { - "order": 594, + "order": 595, "name": "christiancoc", "count": 2, "languages": 1 }, { - "order": 595, + "order": 596, "name": "steven9708m", "count": 2, "languages": 1 }, { - "order": 596, + "order": 597, "name": "soydaviddev", "count": 2, "languages": 1 }, { - "order": 597, + "order": 598, "name": "nevaito", "count": 2, "languages": 1 }, { - "order": 598, + "order": 599, "name": "fabianpa505", "count": 2, "languages": 1 }, { - "order": 599, + "order": 600, "name": "nachodev7", "count": 2, "languages": 1 }, { - "order": 600, + "order": 601, "name": "jsacristanbeltri", "count": 2, "languages": 1 }, { - "order": 601, + "order": 602, "name": "cipollalucas", "count": 2, "languages": 1 }, { - "order": 602, + "order": 603, "name": "devcherry1", "count": 2, "languages": 1 }, { - "order": 603, + "order": 604, "name": "zeti1231", "count": 2, "languages": 1 }, { - "order": 604, + "order": 605, "name": "josegago27", "count": 2, "languages": 1 }, { - "order": 605, + "order": 606, "name": "gmigues", "count": 2, "languages": 1 }, { - "order": 606, + "order": 607, "name": "dans182", "count": 2, "languages": 1 }, { - "order": 607, + "order": 608, "name": "jheisonquiroga", "count": 2, "languages": 1 }, { - "order": 608, + "order": 609, "name": "misterdan100", "count": 2, "languages": 1 }, { - "order": 609, + "order": 610, "name": "mickel-arroz", "count": 2, "languages": 1 }, { - "order": 610, + "order": 611, "name": "jhonf1992", "count": 2, "languages": 1 }, { - "order": 611, + "order": 612, "name": "farthaz", "count": 2, "languages": 1 }, { - "order": 612, + "order": 613, "name": "murquisdev", "count": 2, "languages": 1 }, { - "order": 613, + "order": 614, "name": "cpcarlosprieto", "count": 2, "languages": 1 }, { - "order": 614, + "order": 615, "name": "valeriatorrealba", "count": 2, "languages": 1 }, { - "order": 615, + "order": 616, "name": "jorge186414", "count": 2, "languages": 1 }, { - "order": 616, + "order": 617, "name": "davhage", "count": 2, "languages": 1 }, { - "order": 617, + "order": 618, "name": "lmedina96", "count": 2, "languages": 1 }, { - "order": 618, + "order": 619, "name": "matiasfarfan89", "count": 2, "languages": 1 }, { - "order": 619, + "order": 620, "name": "alanox1", "count": 2, "languages": 1 }, { - "order": 620, + "order": 621, "name": "santiagocuevas2003", "count": 2, "languages": 1 }, { - "order": 621, + "order": 622, "name": "franciscocuminilondero", "count": 2, "languages": 1 }, { - "order": 622, + "order": 623, "name": "gianbordon", "count": 2, "languages": 1 }, { - "order": 623, + "order": 624, "name": "christianhernandezb", "count": 2, "languages": 1 }, { - "order": 624, + "order": 625, "name": "leonardo291024", "count": 2, "languages": 1 }, { - "order": 625, + "order": 626, "name": "haryblanco20", "count": 2, "languages": 1 }, { - "order": 626, + "order": 627, "name": "cesarocbu", "count": 2, "languages": 1 }, { - "order": 627, + "order": 628, "name": "christianumb", "count": 2, "languages": 1 }, { - "order": 628, + "order": 629, "name": "aleoe01", "count": 2, "languages": 1 }, { - "order": 629, + "order": 630, "name": "andnikdev", "count": 2, "languages": 1 }, { - "order": 630, + "order": 631, "name": "angelvelasco1", "count": 2, "languages": 1 }, { - "order": 631, + "order": 632, "name": "glaboryp", "count": 2, "languages": 1 }, { - "order": 632, + "order": 633, "name": "nxl22", "count": 2, "languages": 1 }, { - "order": 633, + "order": 634, "name": "erikayeah", "count": 2, "languages": 1 }, { - "order": 634, + "order": 635, "name": "jeisonredondo", "count": 2, "languages": 1 }, { - "order": 635, + "order": 636, "name": "rikar2o", "count": 2, "languages": 1 }, { - "order": 636, + "order": 637, "name": "rolo27s", "count": 2, "languages": 1 }, { - "order": 637, + "order": 638, "name": "miguelrejon96", "count": 2, "languages": 1 }, { - "order": 638, + "order": 639, "name": "doblea74", "count": 2, "languages": 1 }, { - "order": 639, + "order": 640, "name": "jaimemunozdev", "count": 2, "languages": 1 }, { - "order": 640, + "order": 641, "name": "tomasmarquez81", "count": 2, "languages": 1 }, { - "order": 641, + "order": 642, "name": "akzorla", "count": 2, "languages": 1 }, { - "order": 642, + "order": 643, "name": "juangomezn", "count": 2, "languages": 1 }, { - "order": 643, + "order": 644, "name": "soldochris", "count": 2, "languages": 1 }, { - "order": 644, + "order": 645, "name": "k4rv3r", "count": 2, "languages": 1 }, { - "order": 645, + "order": 646, "name": "wesborland-github", "count": 2, "languages": 1 }, { - "order": 646, + "order": 647, "name": "ovjohn", "count": 2, "languages": 1 }, { - "order": 647, + "order": 648, "name": "memogv", "count": 2, "languages": 1 }, { - "order": 648, + "order": 649, "name": "navarroemiliano", "count": 2, "languages": 1 }, { - "order": 649, + "order": 650, "name": "waldid32", "count": 2, "languages": 1 }, { - "order": 650, + "order": 651, "name": "mikelroset", "count": 2, "languages": 1 }, { - "order": 651, + "order": 652, "name": "dararod", "count": 2, "languages": 1 }, { - "order": 652, + "order": 653, "name": "freddyasierraj", "count": 2, "languages": 1 }, { - "order": 653, + "order": 654, "name": "gomezcamilo9701", "count": 2, "languages": 1 }, { - "order": 654, + "order": 655, "name": "nicolastapiasanz", "count": 2, "languages": 1 }, { - "order": 655, + "order": 656, "name": "vicgallego", "count": 2, "languages": 1 }, { - "order": 656, + "order": 657, "name": "porto1090", "count": 2, "languages": 1 }, { - "order": 657, + "order": 658, "name": "0pio", "count": 2, "languages": 1 }, { - "order": 658, + "order": 659, "name": "whiterunjarl", "count": 2, "languages": 1 }, { - "order": 659, + "order": 660, "name": "crisdev3", "count": 2, "languages": 1 }, { - "order": 660, + "order": 661, "name": "gamitocu", "count": 2, "languages": 1 }, { - "order": 661, + "order": 662, "name": "luis-vb", "count": 2, "languages": 1 }, { - "order": 662, + "order": 663, "name": "saracorraless", "count": 2, "languages": 1 }, { - "order": 663, + "order": 664, "name": "vikkanh", "count": 2, "languages": 1 }, { - "order": 664, + "order": 665, "name": "juaruibr", "count": 2, "languages": 1 }, { - "order": 665, + "order": 666, "name": "frealexandro", "count": 2, "languages": 1 }, { - "order": 666, + "order": 667, "name": "roilhi", "count": 2, "languages": 1 }, { - "order": 667, + "order": 668, "name": "evelynnobile", "count": 2, "languages": 1 }, { - "order": 668, + "order": 669, "name": "cristiansystem", "count": 2, "languages": 1 }, { - "order": 669, + "order": 670, "name": "peibolstrike", "count": 2, "languages": 1 }, { - "order": 670, + "order": 671, "name": "nahuelborromeo", "count": 2, "languages": 1 }, { - "order": 671, + "order": 672, "name": "arhl2023", "count": 2, "languages": 1 }, { - "order": 672, + "order": 673, "name": "yowcloud", "count": 2, "languages": 1 }, { - "order": 673, + "order": 674, "name": "jcknot", "count": 2, "languages": 1 }, { - "order": 674, + "order": 675, "name": "coronelsam", "count": 2, "languages": 1 }, { - "order": 675, + "order": 676, "name": "peeanoot", "count": 2, "languages": 1 }, { - "order": 676, + "order": 677, "name": "anaroncero", "count": 2, "languages": 1 }, { - "order": 677, + "order": 678, "name": "marioyellowy", "count": 2, "languages": 1 }, { - "order": 678, + "order": 679, "name": "hersac", "count": 2, "languages": 1 }, { - "order": 679, + "order": 680, "name": "isidrojng", "count": 2, "languages": 1 }, { - "order": 680, + "order": 681, "name": "lorenamesa", "count": 2, "languages": 1 }, { - "order": 681, + "order": 682, "name": "jago86", "count": 2, "languages": 1 }, { - "order": 682, + "order": 683, "name": "johannhsdev", "count": 2, "languages": 1 }, { - "order": 683, + "order": 684, "name": "diegokarabin", "count": 2, "languages": 1 }, { - "order": 684, + "order": 685, "name": "gugliio", "count": 2, "languages": 1 }, { - "order": 685, + "order": 686, "name": "fefestuve", "count": 2, "languages": 1 }, { - "order": 686, + "order": 687, "name": "fsfigueroa77", "count": 2, "languages": 1 }, { - "order": 687, + "order": 688, "name": "reanthonyh", "count": 2, "languages": 1 }, { - "order": 688, + "order": 689, "name": "nandaalf", "count": 2, "languages": 1 }, { - "order": 689, + "order": 690, "name": "vdroiid", "count": 2, "languages": 1 }, { - "order": 690, + "order": 691, "name": "aserranot", "count": 2, "languages": 1 }, { - "order": 691, + "order": 692, "name": "raulallue", "count": 2, "languages": 1 }, { - "order": 692, + "order": 693, "name": "luciarf", "count": 2, "languages": 1 }, { - "order": 693, + "order": 694, "name": "poetry0354", "count": 2, "languages": 1 }, { - "order": 694, + "order": 695, "name": "rikar20", "count": 2, "languages": 1 }, { - "order": 695, + "order": 696, "name": "reaien", "count": 2, "languages": 1 }, { - "order": 696, + "order": 697, "name": "elmarqueli", "count": 2, "languages": 1 }, { - "order": 697, + "order": 698, "name": "hawkbott", "count": 2, "languages": 1 }, { - "order": 698, + "order": 699, "name": "tiaguiito3", "count": 2, "languages": 1 }, { - "order": 699, + "order": 700, "name": "bereverte", "count": 2, "languages": 1 }, { - "order": 700, + "order": 701, "name": "sdm29gh", "count": 2, "languages": 1 }, { - "order": 701, + "order": 702, "name": "frannmv", "count": 2, "languages": 1 }, { - "order": 702, + "order": 703, "name": "diegosilval", "count": 2, "languages": 1 }, { - "order": 703, + "order": 704, "name": "ssanjua", "count": 2, "languages": 1 }, { - "order": 704, + "order": 705, "name": "zonnen69", "count": 2, "languages": 1 }, { - "order": 705, + "order": 706, "name": "angelargumedo", "count": 2, "languages": 1 }, { - "order": 706, + "order": 707, "name": "lordzzz777", "count": 2, "languages": 1 }, { - "order": 707, + "order": 708, "name": "rrcoder", "count": 2, "languages": 1 }, { - "order": 708, + "order": 709, "name": "jmichael39", "count": 2, "languages": 1 }, { - "order": 709, + "order": 710, "name": "juanmjimenezs", "count": 2, "languages": 1 }, { - "order": 710, + "order": 711, "name": "armentaangel", "count": 2, "languages": 1 }, { - "order": 711, + "order": 712, "name": "vecinacoo", "count": 2, "languages": 1 }, { - "order": 712, + "order": 713, "name": "wijimenezz", "count": 1, "languages": 1 }, { - "order": 713, + "order": 714, "name": "rafapg93", "count": 1, "languages": 1 }, { - "order": 714, + "order": 715, "name": "vickalc", "count": 1, "languages": 1 }, { - "order": 715, + "order": 716, "name": "riukac", "count": 1, "languages": 1 }, { - "order": 716, + "order": 717, "name": "rusian69", "count": 1, "languages": 1 }, { - "order": 717, + "order": 718, "name": "edgarmedranoa", "count": 1, "languages": 1 }, { - "order": 718, + "order": 719, "name": "sve-nnn", "count": 1, "languages": 1 }, { - "order": 719, + "order": 720, "name": "emiliordev", "count": 1, "languages": 1 }, { - "order": 720, + "order": 721, "name": "acirdeveloper", "count": 1, "languages": 1 }, { - "order": 721, + "order": 722, "name": "orzefox", "count": 1, "languages": 1 }, { - "order": 722, + "order": 723, "name": "nicoloboo02", "count": 1, "languages": 1 }, { - "order": 723, + "order": 724, "name": "jony-english22", "count": 1, "languages": 1 }, { - "order": 724, + "order": 725, "name": "deathbat00", "count": 1, "languages": 1 }, { - "order": 725, + "order": 726, "name": "rocha30", "count": 1, "languages": 1 }, { - "order": 726, + "order": 727, "name": "markayala13", "count": 1, "languages": 1 }, { - "order": 727, + "order": 728, "name": "angeloro", "count": 1, "languages": 1 }, { - "order": 728, + "order": 729, "name": "righelch", "count": 1, "languages": 1 }, { - "order": 729, + "order": 730, "name": "albertovf", "count": 1, "languages": 1 }, { - "order": 730, + "order": 731, "name": "sergiopq", "count": 1, "languages": 1 }, { - "order": 731, + "order": 732, "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { - "order": 732, + "order": 733, "name": "ouendinga", "count": 1, "languages": 1 }, { - "order": 733, + "order": 734, "name": "evilpodato04", "count": 1, "languages": 1 }, { - "order": 734, + "order": 735, "name": "agustinfccll", "count": 1, "languages": 1 }, { - "order": 735, + "order": 736, "name": "miguel2rar", "count": 1, "languages": 1 }, { - "order": 736, + "order": 737, "name": "anitandil", "count": 1, "languages": 1 }, { - "order": 737, + "order": 738, "name": "neicervb", "count": 1, "languages": 1 }, { - "order": 738, + "order": 739, "name": "eamartin", "count": 1, "languages": 1 }, { - "order": 739, + "order": 740, "name": "miquelrr", "count": 1, "languages": 1 }, { - "order": 740, + "order": 741, "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { - "order": 741, + "order": 742, "name": "francomyburg", "count": 1, "languages": 1 }, { - "order": 742, + "order": 743, "name": "josephinoo", "count": 1, "languages": 1 }, { - "order": 743, + "order": 744, "name": "mmariob", "count": 1, "languages": 1 }, { - "order": 744, + "order": 745, "name": "daichiko", "count": 1, "languages": 1 }, { - "order": 745, + "order": 746, "name": "emanuelgauler", "count": 1, "languages": 1 }, { - "order": 746, + "order": 747, "name": "willypaz243", "count": 1, "languages": 1 }, { - "order": 747, + "order": 748, "name": "rawc1nnamon", "count": 1, "languages": 1 }, { - "order": 748, + "order": 749, "name": "girngoma", "count": 1, "languages": 1 }, { - "order": 749, + "order": 750, "name": "juampaweb", "count": 1, "languages": 1 }, { - "order": 750, + "order": 751, "name": "marcos0803", "count": 1, "languages": 1 }, { - "order": 751, + "order": 752, "name": "anexo01", "count": 1, "languages": 1 }, { - "order": 752, + "order": 753, "name": "juli-m4", "count": 1, "languages": 1 }, { - "order": 753, + "order": 754, "name": "jchernandez87", "count": 1, "languages": 1 }, { - "order": 754, + "order": 755, "name": "juan-cruz01", "count": 1, "languages": 1 }, { - "order": 755, + "order": 756, "name": "kronoscba", "count": 1, "languages": 1 }, { - "order": 756, + "order": 757, "name": "claudios1980", "count": 1, "languages": 1 }, { - "order": 757, + "order": 758, "name": "natanaelzubiri", "count": 1, "languages": 1 }, { - "order": 758, + "order": 759, "name": "lizzymaken", "count": 1, "languages": 1 }, { - "order": 759, + "order": 760, "name": "jereaguilar", "count": 1, "languages": 1 }, { - "order": 760, + "order": 761, "name": "neshurtado", "count": 1, "languages": 1 }, { - "order": 761, + "order": 762, "name": "masenace", "count": 1, "languages": 1 }, { - "order": 762, + "order": 763, "name": "idiegorojas", "count": 1, "languages": 1 }, { - "order": 763, + "order": 764, "name": "chema-dw", "count": 1, "languages": 1 }, { - "order": 764, + "order": 765, "name": "latorredev", "count": 1, "languages": 1 }, { - "order": 765, + "order": 766, "name": "jandortiz", "count": 1, "languages": 1 }, { - "order": 766, + "order": 767, "name": "demegorash", "count": 1, "languages": 1 }, { - "order": 767, + "order": 768, "name": "deivimiller", "count": 1, "languages": 1 }, { - "order": 768, + "order": 769, "name": "snowcardenas", "count": 1, "languages": 1 }, { - "order": 769, + "order": 770, "name": "xalejandrow", "count": 1, "languages": 1 }, { - "order": 770, + "order": 771, "name": "wallsified", "count": 1, "languages": 1 }, { - "order": 771, + "order": 772, "name": "sherkla12e", "count": 1, "languages": 1 }, { - "order": 772, + "order": 773, "name": "luiscalle17", "count": 1, "languages": 1 }, { - "order": 773, + "order": 774, "name": "turudev1979", "count": 1, "languages": 1 }, { - "order": 774, + "order": 775, "name": "miguelmancebo", "count": 1, "languages": 1 }, { - "order": 775, + "order": 776, "name": "alejandro000", "count": 1, "languages": 1 }, { - "order": 776, + "order": 777, "name": "miguelangel861", "count": 1, "languages": 1 }, { - "order": 777, + "order": 778, "name": "obed-tc", "count": 1, "languages": 1 }, { - "order": 778, + "order": 779, "name": "krisipo", "count": 1, "languages": 1 }, { - "order": 779, + "order": 780, "name": "davidgramiro", "count": 1, "languages": 1 }, { - "order": 780, + "order": 781, "name": "luceldasilva", "count": 1, "languages": 1 }, { - "order": 781, + "order": 782, "name": "m4xxdev", "count": 1, "languages": 1 }, { - "order": 782, + "order": 783, "name": "jrgranadosb", "count": 1, "languages": 1 }, { - "order": 783, + "order": 784, "name": "90dread", "count": 1, "languages": 1 }, { - "order": 784, + "order": 785, "name": "dimanu-py", "count": 1, "languages": 1 }, { - "order": 785, + "order": 786, "name": "marcelinoarias369", "count": 1, "languages": 1 }, { - "order": 786, + "order": 787, "name": "gmedinat911", "count": 1, "languages": 1 }, { - "order": 787, + "order": 788, "name": "alejarandro", "count": 1, "languages": 1 }, { - "order": 788, + "order": 789, "name": "e-xtian", "count": 1, "languages": 1 }, { - "order": 789, + "order": 790, "name": "tashidian", "count": 1, "languages": 1 }, { - "order": 790, + "order": 791, "name": "eljavi0", "count": 1, "languages": 1 }, { - "order": 791, + "order": 792, "name": "xtinarita", "count": 1, "languages": 1 }, { - "order": 792, + "order": 793, "name": "pr1de-23", "count": 1, "languages": 1 }, { - "order": 793, + "order": 794, "name": "diegogomezcor4", "count": 1, "languages": 1 }, { - "order": 794, + "order": 795, "name": "v0l0v", "count": 1, "languages": 1 }, { - "order": 795, + "order": 796, "name": "carlostoledoe", "count": 1, "languages": 1 }, { - "order": 796, + "order": 797, "name": "pablom-2015", "count": 1, "languages": 1 }, { - "order": 797, + "order": 798, "name": "jafuma0320", "count": 1, "languages": 1 }, { - "order": 798, + "order": 799, "name": "yamiyugi25", "count": 1, "languages": 1 }, { - "order": 799, + "order": 800, "name": "bassalex27", "count": 1, "languages": 1 }, { - "order": 800, + "order": 801, "name": "devkenn", "count": 1, "languages": 1 }, { - "order": 801, + "order": 802, "name": "vmarialuzm", "count": 1, "languages": 1 }, { - "order": 802, + "order": 803, "name": "francgci", "count": 1, "languages": 1 }, { - "order": 803, + "order": 804, "name": "yetlanezils", "count": 1, "languages": 1 }, { - "order": 804, + "order": 805, "name": "judithernandez", "count": 1, "languages": 1 }, { - "order": 805, + "order": 806, "name": "cris10026", "count": 1, "languages": 1 }, { - "order": 806, + "order": 807, "name": "dakkaj", "count": 1, "languages": 1 }, { - "order": 807, + "order": 808, "name": "ferngpv", "count": 1, "languages": 1 }, { - "order": 808, + "order": 809, "name": "mamartinez14", "count": 1, "languages": 1 }, { - "order": 809, + "order": 810, "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { - "order": 810, + "order": 811, "name": "experthacker444", "count": 1, "languages": 1 }, { - "order": 811, + "order": 812, "name": "pushodev", "count": 1, "languages": 1 }, { - "order": 812, + "order": 813, "name": "ignacioskm", "count": 1, "languages": 1 }, { - "order": 813, + "order": 814, "name": "luisangeles20", "count": 1, "languages": 1 }, { - "order": 814, + "order": 815, "name": "xcortes", "count": 1, "languages": 1 }, { - "order": 815, + "order": 816, "name": "isaacdci", "count": 1, "languages": 1 }, { - "order": 816, + "order": 817, "name": "yeisongil", "count": 1, "languages": 1 }, { - "order": 817, + "order": 818, "name": "jalonso76", "count": 1, "languages": 1 }, { - "order": 818, + "order": 819, "name": "devjerez", "count": 1, "languages": 1 }, { - "order": 819, + "order": 820, "name": "betulioo", "count": 1, "languages": 1 }, { - "order": 820, + "order": 821, "name": "neftalyr", "count": 1, "languages": 1 }, { - "order": 821, + "order": 822, "name": "josuelopez5", "count": 1, "languages": 1 }, { - "order": 822, + "order": 823, "name": "vickalck", "count": 1, "languages": 1 }, { - "order": 823, + "order": 824, "name": "xhinto", "count": 1, "languages": 1 }, { - "order": 824, + "order": 825, "name": "jgregoris", "count": 1, "languages": 1 }, { - "order": 825, + "order": 826, "name": "sofiamfernandez", "count": 1, "languages": 1 }, { - "order": 826, + "order": 827, "name": "g4nd4lf", "count": 1, "languages": 1 }, { - "order": 827, + "order": 828, "name": "manueldenisdev", "count": 1, "languages": 1 }, { - "order": 828, + "order": 829, "name": "kshields51", "count": 1, "languages": 1 }, { - "order": 829, + "order": 830, "name": "omar8102", "count": 1, "languages": 1 }, { - "order": 830, + "order": 831, "name": "lluistech", "count": 1, "languages": 1 }, { - "order": 831, + "order": 832, "name": "vicvilla30", "count": 1, "languages": 1 }, { - "order": 832, + "order": 833, "name": "gilbertho502", "count": 1, "languages": 1 }, { - "order": 833, + "order": 834, "name": "13sauca13", "count": 1, "languages": 1 }, { - "order": 834, + "order": 835, "name": "cd1974", "count": 1, "languages": 1 }, { - "order": 835, + "order": 836, "name": "salas89", "count": 1, "languages": 1 }, { - "order": 836, + "order": 837, "name": "eatsangels", "count": 1, "languages": 1 }, { - "order": 837, + "order": 838, "name": "sergiomhernandez", "count": 1, "languages": 1 }, { - "order": 838, + "order": 839, "name": "carlosbb70", "count": 1, "languages": 1 }, { - "order": 839, + "order": 840, "name": "mjordanaam", "count": 1, "languages": 1 }, { - "order": 840, + "order": 841, "name": "howlett9999", "count": 1, "languages": 1 }, { - "order": 841, + "order": 842, "name": "copamire", "count": 1, "languages": 1 }, { - "order": 842, + "order": 843, "name": "erickcis", "count": 1, "languages": 1 }, { - "order": 843, + "order": 844, "name": "and-y21", "count": 1, "languages": 1 }, { - "order": 844, + "order": 845, "name": "leo18q", "count": 1, "languages": 1 }, { - "order": 845, + "order": 846, "name": "adcarret", "count": 1, "languages": 1 }, { - "order": 846, + "order": 847, "name": "arturodlapaz17", "count": 1, "languages": 1 }, { - "order": 847, + "order": 848, "name": "danidan1214", "count": 1, "languages": 1 }, { - "order": 848, + "order": 849, "name": "julioorozco05", "count": 1, "languages": 1 }, { - "order": 849, + "order": 850, "name": "juanalbornoz32", "count": 1, "languages": 1 }, { - "order": 850, + "order": 851, "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { - "order": 851, + "order": 852, "name": "manuu42", "count": 1, "languages": 1 }, { - "order": 852, + "order": 853, "name": "sergiovelayos", "count": 1, "languages": 1 }, { - "order": 853, + "order": 854, "name": "snowale", "count": 1, "languages": 1 }, { - "order": 854, + "order": 855, "name": "gl-informatica", "count": 1, "languages": 1 }, { - "order": 855, + "order": 856, "name": "dacaldev", "count": 1, "languages": 1 }, { - "order": 856, + "order": 857, "name": "javirr4", "count": 1, "languages": 1 }, { - "order": 857, + "order": 858, "name": "amitchellg", "count": 1, "languages": 1 }, { - "order": 858, + "order": 859, "name": "henrydavidprimera", "count": 1, "languages": 1 }, { - "order": 859, + "order": 860, "name": "cristianvergaraf", "count": 1, "languages": 1 }, { - "order": 860, + "order": 861, "name": "geridage", "count": 1, "languages": 1 }, { - "order": 861, + "order": 862, "name": "osneidert", "count": 1, "languages": 1 }, { - "order": 862, + "order": 863, "name": "perla-zg", "count": 1, "languages": 1 }, { - "order": 863, + "order": 864, "name": "zeraven09", "count": 1, "languages": 1 }, { - "order": 864, + "order": 865, "name": "acobo3", "count": 1, "languages": 1 }, { - "order": 865, + "order": 866, "name": "fergz1988", "count": 1, "languages": 1 }, { - "order": 866, + "order": 867, "name": "johao23", "count": 1, "languages": 1 }, { - "order": 867, + "order": 868, "name": "hnaranjog", "count": 1, "languages": 1 }, { - "order": 868, + "order": 869, "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { - "order": 869, + "order": 870, "name": "jgarteag", "count": 1, "languages": 1 }, { - "order": 870, + "order": 871, "name": "ndepaul82", "count": 1, "languages": 1 }, { - "order": 871, + "order": 872, "name": "neusier101", "count": 1, "languages": 1 }, { - "order": 872, + "order": 873, "name": "wilsonbarrera", "count": 1, "languages": 1 }, { - "order": 873, + "order": 874, "name": "mrf1989", "count": 1, "languages": 1 }, { - "order": 874, + "order": 875, "name": "charly024", "count": 1, "languages": 1 }, { - "order": 875, + "order": 876, "name": "nico70012", "count": 1, "languages": 1 }, { - "order": 876, + "order": 877, "name": "gersonoroz", "count": 1, "languages": 1 }, { - "order": 877, + "order": 878, "name": "johannmanrique", "count": 1, "languages": 1 }, { - "order": 878, + "order": 879, "name": "facundorsabia", "count": 1, "languages": 1 }, { - "order": 879, + "order": 880, "name": "cisneros2404", "count": 1, "languages": 1 }, { - "order": 880, + "order": 881, "name": "josem17-cyber", "count": 1, "languages": 1 }, { - "order": 881, + "order": 882, "name": "sbngl", "count": 1, "languages": 1 }, { - "order": 882, + "order": 883, "name": "x3mboy", "count": 1, "languages": 1 }, { - "order": 883, + "order": 884, "name": "van-02", "count": 1, "languages": 1 }, { - "order": 884, + "order": 885, "name": "franciscokarriere", "count": 1, "languages": 1 }, { - "order": 885, + "order": 886, "name": "jd-gm", "count": 1, "languages": 1 }, { - "order": 886, + "order": 887, "name": "fzcarlitos", "count": 1, "languages": 1 }, { - "order": 887, + "order": 888, "name": "dmhenaopa", "count": 1, "languages": 1 }, { - "order": 888, + "order": 889, "name": "gerespinosa", "count": 1, "languages": 1 }, { - "order": 889, + "order": 890, "name": "alexis0717", "count": 1, "languages": 1 }, { - "order": 890, + "order": 891, "name": "rojasvargas", "count": 1, "languages": 1 }, { - "order": 891, + "order": 892, "name": "alexxawada", "count": 1, "languages": 1 }, { - "order": 892, + "order": 893, "name": "lopesteban", "count": 1, "languages": 1 }, { - "order": 893, + "order": 894, "name": "lytsar", "count": 1, "languages": 1 }, { - "order": 894, + "order": 895, "name": "jsruedatorres", "count": 1, "languages": 1 }, { - "order": 895, + "order": 896, "name": "fullstackarlo", "count": 1, "languages": 1 }, { - "order": 896, + "order": 897, "name": "brayancordova1", "count": 1, "languages": 1 }, { - "order": 897, + "order": 898, "name": "francescoalterio", "count": 1, "languages": 1 }, { - "order": 898, + "order": 899, "name": "francomoreira", "count": 1, "languages": 1 }, { - "order": 899, + "order": 900, "name": "kenzambrano", "count": 1, "languages": 1 }, { - "order": 900, + "order": 901, "name": "edperez07", "count": 1, "languages": 1 }, { - "order": 901, + "order": 902, "name": "edgonzz", "count": 1, "languages": 1 }, { - "order": 902, + "order": 903, "name": "siuldev", "count": 1, "languages": 1 }, { - "order": 903, + "order": 904, "name": "vmga09", "count": 1, "languages": 1 }, { - "order": 904, + "order": 905, "name": "frcan89", "count": 1, "languages": 1 }, { - "order": 905, + "order": 906, "name": "jpiacaruso", "count": 1, "languages": 1 }, { - "order": 906, + "order": 907, "name": "m4xisil", "count": 1, "languages": 1 }, { - "order": 907, + "order": 908, "name": "leydimadrid", "count": 1, "languages": 1 }, { - "order": 908, + "order": 909, "name": "albabp", "count": 1, "languages": 1 }, { - "order": 909, + "order": 910, "name": "juanpablo-a", "count": 1, "languages": 1 }, { - "order": 910, + "order": 911, "name": "cgomezadolfo", "count": 1, "languages": 1 }, { - "order": 911, + "order": 912, "name": "lfam200", "count": 1, "languages": 1 }, { - "order": 912, + "order": 913, "name": "kocho03", "count": 1, "languages": 1 }, { - "order": 913, + "order": 914, "name": "yessikamichelle", "count": 1, "languages": 1 }, { - "order": 914, + "order": 915, "name": "fernandofl", "count": 1, "languages": 1 }, { - "order": 915, + "order": 916, "name": "peticas", "count": 1, "languages": 1 }, { - "order": 916, + "order": 917, "name": "royhuamanavila", "count": 1, "languages": 1 }, { - "order": 917, + "order": 918, "name": "afl0r3s", "count": 1, "languages": 1 }, { - "order": 918, + "order": 919, "name": "abengl", "count": 1, "languages": 1 }, { - "order": 919, + "order": 920, "name": "isnatthy", "count": 1, "languages": 1 }, { - "order": 920, + "order": 921, "name": "lfwzk", "count": 1, "languages": 1 }, { - "order": 921, + "order": 922, "name": "denisortega", "count": 1, "languages": 1 }, { - "order": 922, + "order": 923, "name": "johnniew81", "count": 1, "languages": 1 }, { - "order": 923, + "order": 924, "name": "sergioab7", "count": 1, "languages": 1 }, { - "order": 924, + "order": 925, "name": "joseperesini", "count": 1, "languages": 1 }, { - "order": 925, + "order": 926, "name": "aleclto7", "count": 1, "languages": 1 }, { - "order": 926, + "order": 927, "name": "pierre-ol", "count": 1, "languages": 1 }, { - "order": 927, + "order": 928, "name": "sixtodev", "count": 1, "languages": 1 }, { - "order": 928, + "order": 929, "name": "nnunezmedina", "count": 1, "languages": 1 }, { - "order": 929, + "order": 930, "name": "conrado85", "count": 1, "languages": 1 }, { - "order": 930, + "order": 931, "name": "patricioguerra30", "count": 1, "languages": 1 }, { - "order": 931, + "order": 932, "name": "walkerlyna", "count": 1, "languages": 1 }, { - "order": 932, + "order": 933, "name": "augustbs", "count": 1, "languages": 1 }, { - "order": 933, + "order": 934, "name": "gc796", "count": 1, "languages": 1 }, { - "order": 934, + "order": 935, "name": "diegoxxd", "count": 1, "languages": 1 }, { - "order": 935, + "order": 936, "name": "ronnieruuz", "count": 1, "languages": 1 }, { - "order": 936, + "order": 937, "name": "nozodev", "count": 1, "languages": 1 }, { - "order": 937, + "order": 938, "name": "pointfs", "count": 1, "languages": 1 }, { - "order": 938, + "order": 939, "name": "saintsluis", "count": 1, "languages": 1 }, { - "order": 939, + "order": 940, "name": "cliverjimny123", "count": 1, "languages": 1 }, { - "order": 940, + "order": 941, "name": "mekanicas", "count": 1, "languages": 1 }, { - "order": 941, + "order": 942, "name": "vainsito1", "count": 1, "languages": 1 }, { - "order": 942, + "order": 943, "name": "kouski", "count": 1, "languages": 1 }, { - "order": 943, + "order": 944, "name": "ricarsur", "count": 1, "languages": 1 }, { - "order": 944, + "order": 945, "name": "s9code", "count": 1, "languages": 1 }, { - "order": 945, + "order": 946, "name": "jacobrwx", "count": 1, "languages": 1 }, { - "order": 946, + "order": 947, "name": "dianelis1", "count": 1, "languages": 1 }, { - "order": 947, + "order": 948, "name": "oscarletelier", "count": 1, "languages": 1 }, { - "order": 948, + "order": 949, "name": "l3v1xx", "count": 1, "languages": 1 }, { - "order": 949, + "order": 950, "name": "codejoss", "count": 1, "languages": 1 }, { - "order": 950, + "order": 951, "name": "miguelsarm", "count": 1, "languages": 1 }, { - "order": 951, + "order": 952, "name": "romanocoder", "count": 1, "languages": 1 }, { - "order": 952, + "order": 953, "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { - "order": 953, + "order": 954, "name": "hfvaronb", "count": 1, "languages": 1 }, { - "order": 954, + "order": 955, "name": "flarien", "count": 1, "languages": 1 }, { - "order": 955, + "order": 956, "name": "abraham9804", "count": 1, "languages": 1 }, { - "order": 956, + "order": 957, "name": "sejotaz", "count": 1, "languages": 1 }, { - "order": 957, + "order": 958, "name": "gustavoguerrero", "count": 1, "languages": 1 }, { - "order": 958, + "order": 959, "name": "javieradev", "count": 1, "languages": 1 }, { - "order": 959, + "order": 960, "name": "frannm29", "count": 1, "languages": 1 }, { - "order": 960, + "order": 961, "name": "mvillegas18", "count": 1, "languages": 1 }, { - "order": 961, + "order": 962, "name": "antonioverdugo", "count": 1, "languages": 1 }, { - "order": 962, + "order": 963, "name": "kronomio", "count": 1, "languages": 1 }, { - "order": 963, + "order": 964, "name": "quirogapau", "count": 1, "languages": 1 }, { - "order": 964, + "order": 965, "name": "ercky1980", "count": 1, "languages": 1 }, { - "order": 965, + "order": 966, "name": "madelefonb", "count": 1, "languages": 1 }, { - "order": 966, + "order": 967, "name": "imista", "count": 1, "languages": 1 }, { - "order": 967, + "order": 968, "name": "mhrosariom", "count": 1, "languages": 1 }, { - "order": 968, + "order": 969, "name": "mdemena", "count": 1, "languages": 1 }, { - "order": 969, + "order": 970, "name": "luchof5", "count": 1, "languages": 1 }, { - "order": 970, + "order": 971, "name": "nicorey89", "count": 1, "languages": 1 }, { - "order": 971, + "order": 972, "name": "santaravena", "count": 1, "languages": 1 }, { - "order": 972, + "order": 973, "name": "xnomada", "count": 1, "languages": 1 }, { - "order": 973, + "order": 974, "name": "yaojema", "count": 1, "languages": 1 }, { - "order": 974, + "order": 975, "name": "diego-santana23", "count": 1, "languages": 1 }, { - "order": 975, + "order": 976, "name": "aidicoop", "count": 1, "languages": 1 }, { - "order": 976, + "order": 977, "name": "agus-ig", "count": 1, "languages": 1 }, { - "order": 977, + "order": 978, "name": "dacronik", "count": 1, "languages": 1 }, { - "order": 978, + "order": 979, "name": "alemar16", "count": 1, "languages": 1 }, { - "order": 979, + "order": 980, "name": "alvarommedia", "count": 1, "languages": 1 }, { - "order": 980, + "order": 981, "name": "rodmiggithub", "count": 1, "languages": 1 }, { - "order": 981, + "order": 982, "name": "lucianogriffa", "count": 1, "languages": 1 }, { - "order": 982, + "order": 983, "name": "datrujillog", "count": 1, "languages": 1 }, { - "order": 983, + "order": 984, "name": "kevinramirez28", "count": 1, "languages": 1 }, { - "order": 984, + "order": 985, "name": "chriszaldana", "count": 1, "languages": 1 }, { - "order": 985, + "order": 986, "name": "1978acb", "count": 1, "languages": 1 }, { - "order": 986, + "order": 987, "name": "maximotoro", "count": 1, "languages": 1 }, { - "order": 987, + "order": 988, "name": "bjchavez", "count": 1, "languages": 1 }, { - "order": 988, + "order": 989, "name": "seigigim", "count": 1, "languages": 1 }, { - "order": 989, + "order": 990, "name": "gizelads", "count": 1, "languages": 1 }, { - "order": 990, + "order": 991, "name": "mauricioyair", "count": 1, "languages": 1 }, { - "order": 991, + "order": 992, "name": "is2095", "count": 1, "languages": 1 }, { - "order": 992, + "order": 993, "name": "axelwestman", "count": 1, "languages": 1 }, { - "order": 993, + "order": 994, "name": "manugonzalito", "count": 1, "languages": 1 }, { - "order": 994, + "order": 995, "name": "coletonosh", "count": 1, "languages": 1 }, { - "order": 995, + "order": 996, "name": "deaconst", "count": 1, "languages": 1 }, { - "order": 996, + "order": 997, "name": "cibacoa", "count": 1, "languages": 1 }, { - "order": 997, + "order": 998, "name": "feliaguirre7", "count": 1, "languages": 1 }, { - "order": 998, + "order": 999, "name": "rulo77", "count": 1, "languages": 1 }, { - "order": 999, + "order": 1000, "name": "marcosapodaca", "count": 1, "languages": 1 }, { - "order": 1000, + "order": 1001, "name": "manuhssj", "count": 1, "languages": 1 }, { - "order": 1001, + "order": 1002, "name": "serg032", "count": 1, "languages": 1 }, { - "order": 1002, + "order": 1003, "name": "lucc4sz", "count": 1, "languages": 1 }, { - "order": 1003, + "order": 1004, "name": "jancalos", "count": 1, "languages": 1 }, { - "order": 1004, + "order": 1005, "name": "javodevon", "count": 1, "languages": 1 }, { - "order": 1005, + "order": 1006, "name": "astriebeck", "count": 1, "languages": 1 }, { - "order": 1006, + "order": 1007, "name": "ishimaku", "count": 1, "languages": 1 }, { - "order": 1007, + "order": 1008, "name": "afacorroloscos", "count": 1, "languages": 1 }, { - "order": 1008, + "order": 1009, "name": "ledyam", "count": 1, "languages": 1 }, { - "order": 1009, + "order": 1010, "name": "jatomas", "count": 1, "languages": 1 }, { - "order": 1010, + "order": 1011, "name": "marqitos", "count": 1, "languages": 1 }, { - "order": 1011, + "order": 1012, "name": "marvinagui", "count": 1, "languages": 1 }, { - "order": 1012, + "order": 1013, "name": "lobogeekmx", "count": 1, "languages": 1 }, { - "order": 1013, + "order": 1014, "name": "rocadev2714", "count": 1, "languages": 1 }, { - "order": 1014, + "order": 1015, "name": "rootqui", "count": 1, "languages": 1 }, { - "order": 1015, + "order": 1016, "name": "miguelgargallo", "count": 1, "languages": 1 }, { - "order": 1016, + "order": 1017, "name": "sandrarg85", "count": 1, "languages": 1 }, { - "order": 1017, + "order": 1018, "name": "protpus98", "count": 1, "languages": 1 }, { - "order": 1018, + "order": 1019, "name": "pkmaventura", "count": 1, "languages": 1 }, { - "order": 1019, + "order": 1020, "name": "jcrobles99", "count": 1, "languages": 1 }, { - "order": 1020, + "order": 1021, "name": "nunezlagos", "count": 1, "languages": 1 }, { - "order": 1021, + "order": 1022, "name": "chrisfelixgil", "count": 1, "languages": 1 }, { - "order": 1022, + "order": 1023, "name": "deimoshall", "count": 1, "languages": 1 }, { - "order": 1023, + "order": 1024, "name": "fede6299", "count": 1, "languages": 1 }, { - "order": 1024, + "order": 1025, "name": "darkohokage", "count": 1, "languages": 1 }, { - "order": 1025, + "order": 1026, "name": "pablo-lnx", "count": 1, "languages": 1 }, { - "order": 1026, + "order": 1027, "name": "kevin05m", "count": 1, "languages": 1 }, { - "order": 1027, + "order": 1028, "name": "diegomm27", "count": 1, "languages": 1 }, { - "order": 1028, + "order": 1029, "name": "joferpg", "count": 1, "languages": 1 }, { - "order": 1029, + "order": 1030, "name": "mbmaeso", "count": 1, "languages": 1 }, { - "order": 1030, + "order": 1031, "name": "braiso-22", "count": 1, "languages": 1 }, { - "order": 1031, + "order": 1032, "name": "deiiviitdev", "count": 1, "languages": 1 }, { - "order": 1032, + "order": 1033, "name": "alvarominarro", "count": 1, "languages": 1 }, { - "order": 1033, + "order": 1034, "name": "borjadelgadodev", "count": 1, "languages": 1 }, { - "order": 1034, + "order": 1035, "name": "elpeque29", "count": 1, "languages": 1 }, { - "order": 1035, + "order": 1036, "name": "jaennova", "count": 1, "languages": 1 }, { - "order": 1036, + "order": 1037, "name": "luisalberto22", "count": 1, "languages": 1 }, { - "order": 1037, + "order": 1038, "name": "daniel-cas", "count": 1, "languages": 1 }, { - "order": 1038, + "order": 1039, "name": "davidcv-dev", "count": 1, "languages": 1 }, { - "order": 1039, + "order": 1040, "name": "francisleble", "count": 1, "languages": 1 }, { - "order": 1040, + "order": 1041, "name": "jhordanluyo", "count": 1, "languages": 1 }, { - "order": 1041, + "order": 1042, "name": "acirdevelper", "count": 1, "languages": 1 }, { - "order": 1042, + "order": 1043, "name": "marcosjarrin", "count": 1, "languages": 1 }, { - "order": 1043, + "order": 1044, "name": "implevacui", "count": 1, "languages": 1 }, { - "order": 1044, + "order": 1045, "name": "jandresalvar", "count": 1, "languages": 1 }, { - "order": 1045, + "order": 1046, "name": "ca2puntosv", "count": 1, "languages": 1 }, { - "order": 1046, + "order": 1047, "name": "angelcruzg23", "count": 1, "languages": 1 }, { - "order": 1047, + "order": 1048, "name": "corvo-99", "count": 1, "languages": 1 }, { - "order": 1048, + "order": 1049, "name": "devm0nk3y", "count": 1, "languages": 1 }, { - "order": 1049, + "order": 1050, "name": "danielcastillo1112", "count": 1, "languages": 1 }, { - "order": 1050, + "order": 1051, "name": "sirvega83", "count": 1, "languages": 1 }, { - "order": 1051, + "order": 1052, "name": "franpua", "count": 1, "languages": 1 }, { - "order": 1052, + "order": 1053, "name": "malkarmah", "count": 1, "languages": 1 }, { - "order": 1053, + "order": 1054, "name": "palons29", "count": 1, "languages": 1 }, { - "order": 1054, + "order": 1055, "name": "diegopardomontero", "count": 1, "languages": 1 }, { - "order": 1055, + "order": 1056, "name": "robermejia", "count": 1, "languages": 1 }, { - "order": 1056, + "order": 1057, "name": "zyn7e", "count": 1, "languages": 1 }, { - "order": 1057, + "order": 1058, "name": "javiir", "count": 1, "languages": 1 }, { - "order": 1058, + "order": 1059, "name": "antoniojzp86", "count": 1, "languages": 1 }, { - "order": 1059, + "order": 1060, "name": "v1k770r", "count": 1, "languages": 1 }, { - "order": 1060, + "order": 1061, "name": "clespinosa2024", "count": 1, "languages": 1 }, { - "order": 1061, + "order": 1062, "name": "gianellannie", "count": 1, "languages": 1 }, { - "order": 1062, + "order": 1063, "name": "dany3gs", "count": 1, "languages": 1 }, { - "order": 1063, + "order": 1064, "name": "queralesdev", "count": 1, "languages": 1 }, { - "order": 1064, + "order": 1065, "name": "bycris13", "count": 1, "languages": 1 }, { - "order": 1065, + "order": 1066, "name": "reneguzman7", "count": 1, "languages": 1 }, { - "order": 1066, + "order": 1067, "name": "adriansaint07", "count": 1, "languages": 1 }, { - "order": 1067, + "order": 1068, "name": "dovinhoyos", "count": 1, "languages": 1 }, { - "order": 1068, + "order": 1069, "name": "fredylopez01", "count": 1, "languages": 1 }, { - "order": 1069, + "order": 1070, "name": "lautimorales", "count": 1, "languages": 1 }, { - "order": 1070, + "order": 1071, "name": "jlrojano", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1072, "name": "jrgim", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1073, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1074, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1075, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1076, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1077, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1078, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1079, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1080, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1081, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1082, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1083, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1084, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1085, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1086, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1087, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1088, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1089, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1090, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1091, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1092, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1093, "name": "ivanserran", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1094, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1095, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1095, + "order": 1096, "name": "nolemoon", "count": 1, "languages": 1 }, { - "order": 1096, + "order": 1097, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1098, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1099, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1100, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1101, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1102, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1103, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1104, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1105, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1106, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1107, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1108, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1109, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1110, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1111, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1112, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1113, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1114, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1115, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1116, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1117, "name": "trollface77", "count": 1, "languages": 1 }, { - "order": 1117, + "order": 1118, "name": "brunom-93", "count": 1, "languages": 1 }, { - "order": 1118, + "order": 1119, "name": "jhonnfl", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1120, "name": "alejandroruiz23", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1121, "name": "jaimesoftdev", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1122, "name": "jarzatedev", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1123, "name": "edm1ya", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1124, "name": "serg-pq", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1125, "name": "tartabullroberto", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1126, "name": "alexisbarradev", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1127, "name": "lara-vel-dev", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1128, "name": "kelvincb", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1129, "name": "armm77", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1130, "name": "paluzz", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1131, "name": "arathhh8", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1132, "name": "1cel4nc3", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1133, "name": "theposi", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1134, "name": "vinyoles", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1135, "name": "omarroman29", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1136, "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1137, "name": "tetotille", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1138, "name": "luisgarm", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1139, "name": "pipeyz21", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1140, "name": "santiagomac", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1141, "name": "vorosdev", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1142, "name": "mickysoft", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1143, "name": "melonconyogurt", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1144, "name": "cdryampi", "count": 1, "languages": 1 }, { - "order": 1144, + "order": 1145, "name": "bellodeveloper", "count": 1, "languages": 1 }, { - "order": 1145, + "order": 1146, "name": "nachitoe", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1147, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1148, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1148, + "order": 1149, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1149, + "order": 1150, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1150, + "order": 1151, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1151, + "order": 1152, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1152, + "order": 1153, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1153, + "order": 1154, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1154, + "order": 1155, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1155, + "order": 1156, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1156, + "order": 1157, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1157, + "order": 1158, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1158, + "order": 1159, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1159, + "order": 1160, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1160, + "order": 1161, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1161, + "order": 1162, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1162, + "order": 1163, "name": "qwik-zghieb", "count": 1, "languages": 1 }, { - "order": 1163, + "order": 1164, "name": "gonzalinuz18", "count": 1, "languages": 1 }, { - "order": 1164, + "order": 1165, "name": "tilordqwerty", "count": 1, "languages": 1 }, { - "order": 1165, + "order": 1166, "name": "dgquintero", "count": 1, "languages": 1 }, { - "order": 1166, + "order": 1167, "name": "torvicv", "count": 1, "languages": 1 }, { - "order": 1167, + "order": 1168, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1168, + "order": 1169, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1169, + "order": 1170, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1170, + "order": 1171, "name": "mvidab", "count": 1, "languages": 1 }, { - "order": 1171, + "order": 1172, "name": "leonardo-henao", "count": 1, "languages": 1 }, { - "order": 1172, + "order": 1173, "name": "pwrxman", "count": 1, "languages": 1 }, { - "order": 1173, + "order": 1174, "name": "c-blskv", "count": 1, "languages": 1 }, { - "order": 1174, + "order": 1175, "name": "emaerniquez", "count": 1, "languages": 1 }, { - "order": 1175, + "order": 1176, "name": "carolhs92", "count": 1, "languages": 1 }, { - "order": 1176, + "order": 1177, "name": "juancamilofvx", "count": 1, "languages": 1 }, { - "order": 1177, + "order": 1178, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1178, + "order": 1179, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1179, + "order": 1180, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1180, + "order": 1181, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1181, + "order": 1182, "name": "matinbohorquez", "count": 1, "languages": 1 }, { - "order": 1182, + "order": 1183, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1183, + "order": 1184, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1184, + "order": 1185, "name": "alecraft8", "count": 1, "languages": 1 }, { - "order": 1185, + "order": 1186, "name": "arperezinf", "count": 1, "languages": 1 }, { - "order": 1186, + "order": 1187, "name": "nightmare79", "count": 1, "languages": 1 }, { - "order": 1187, + "order": 1188, "name": "vikernes27666", "count": 1, "languages": 1 }, { - "order": 1188, + "order": 1189, "name": "cub-tor", "count": 1, "languages": 1 }, { - "order": 1189, + "order": 1190, "name": "carlosmperezm", "count": 1, "languages": 1 }, { - "order": 1190, + "order": 1191, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1191, + "order": 1192, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1192, + "order": 1193, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1193, + "order": 1194, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1194, + "order": 1195, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1195, + "order": 1196, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1196, + "order": 1197, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1197, + "order": 1198, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1198, + "order": 1199, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1199, + "order": 1200, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1200, + "order": 1201, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1201, + "order": 1202, "name": "ddaniel27", "count": 1, "languages": 1 From bf7e3dbbded5d6b53b0405e85090c0c71047b3fc Mon Sep 17 00:00:00 2001 From: Rastaxico Date: Sun, 22 Sep 2024 21:31:08 -0500 Subject: [PATCH 488/539] Create Rastaxico.py 00 - Python --- .../python/Rastaxico.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Rastaxico.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Rastaxico.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Rastaxico.py new file mode 100644 index 0000000000..17f9c4b97c --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Rastaxico.py @@ -0,0 +1,38 @@ +# Ejercicio realizado por Rastaxico + +# Ruta web Python https://www.python.org/ + +# Comentario de una sola linea + +""" +Comentario +de +varias lineas +""" + +# Ejemplo de como crear una variable +mi_variable = "Mi variable" +mi_variable = 9 + +#Como crear una constante - Se hace por convencion +MI_CONSTANTE = "Mi Constante" + +# Crear variables con cada uno de los tipo de datos primitivos + +# Strings o Cadenas de texto +nombre_github = "Rastaxico" +mi_lenguaje = "Python" +mis_disculpas = "Por favor Disculpenme por llegar tarde al curso, espero no haberme hecho bolas para subir la tarea al github" + +# Integer o Enteros +edad_en_años = 42 + +# Floats o Flotantes +estarura = 1,72 + +# Booleanos o de verdad +desea_programar = True + +# Imprimir en terminal +print("Hola, soy", nombre_github, "y uso", mi_lenguaje) +print(mis_disculpas) From fdf98986798a26f9ed73c8f071c9e37fc59bc335 Mon Sep 17 00:00:00 2001 From: fborjalv Date: Mon, 23 Sep 2024 10:49:56 +0200 Subject: [PATCH 489/539] #35 - Python --- .../python/fborjalv.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/fborjalv.py diff --git a/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/fborjalv.py b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/fborjalv.py new file mode 100644 index 0000000000..0fe4104e55 --- /dev/null +++ b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/python/fborjalv.py @@ -0,0 +1,66 @@ +""" +/* + * EJERCICIO: + * ¡La temporada 2 de "Los Anillos de Poder" está a punto de estrenarse! + * ¿Qué pasaría si tuvieras que encargarte de repartir los anillos + * entre las razas de la Tierra Media? + * Desarrolla un programa que se encargue de distribuirlos. + * Requisitos: + * 1. Los Elfos recibirán un número impar. + * 2. Los Enanos un número primo. + * 3. Los Hombres un número par. + * 4. Sauron siempre uno. + * Acciones: + * 1. Crea un programa que reciba el número total de anillos + * y busque una posible combinación para repartirlos. + * 2. Muestra el reparto final o el error al realizarlo. + */ + +""" + + +n_rings = int(input("Introduce el número de anillos a repartirse: ")) +total_rings = {"Sauron": 0, "Elfos": 0, "Hombres": 0, "Enanos": 0} + +def es_primo(number): + if number <= 1: + return False + for element in range(2, number): + if number % element == 0: + return False + return True + +if n_rings > 0: + n_rings -= 1 + total_rings["Sauron"] += 1 + +while n_rings > 0: + distributed = False + if (total_rings["Hombres"] + 1) % 2 == 0: + n_rings -= 1 + total_rings["Hombres"] += 1 + distributed = True + + if (total_rings["Elfos"] + 1) % 3 == 0: + n_rings -= 1 + total_rings["Elfos"] += 1 + distributed = True + + if es_primo(total_rings["Enanos"]+1): + n_rings -= 1 + total_rings["Enanos"] +=1 + distributed = True + + if not distributed and n_rings > 0: + min_group = min(total_rings, key = lambda x: total_rings[x] if x != "Sauron" else float("inf")) + total_rings[min_group] += 1 + n_rings -= 1 + +for key, value in total_rings.items(): + print(f"{key} recibe {value}") + +print(f"Quedan {n_rings}") + + + + \ No newline at end of file From e9cb632da1e63e19b313777810da3ae96f77633a Mon Sep 17 00:00:00 2001 From: Zeta Date: Mon, 23 Sep 2024 10:41:24 +0100 Subject: [PATCH 490/539] Retos del 10 al 17 --- Roadmap/10 - EXCEPCIONES/python/zetared92.py | 54 ++++++++++ .../python/zetared92.py | 98 +++++++++++++++++ Roadmap/12 - JSON Y XML/python/zetared92.py | 101 ++++++++++++++++++ .../python/zetared92.py | 67 ++++++++++++ Roadmap/14 - FECHAS/python/zetared92.py | 48 +++++++++ .../python/zetared92.py" | 41 +++++++ .../python/zetared92.py | 39 +++++++ Roadmap/17 - ITERACIONES/python/zetared92.py | 57 ++++++++++ 8 files changed, 505 insertions(+) create mode 100644 Roadmap/10 - EXCEPCIONES/python/zetared92.py create mode 100644 Roadmap/11 - MANEJO DE FICHEROS/python/zetared92.py create mode 100644 Roadmap/12 - JSON Y XML/python/zetared92.py create mode 100644 Roadmap/13 - PRUEBAS UNITARIAS/python/zetared92.py create mode 100644 Roadmap/14 - FECHAS/python/zetared92.py create mode 100644 "Roadmap/15 - ASINCRON\303\215A/python/zetared92.py" create mode 100644 Roadmap/16 - EXPRESIONES REGULARES/python/zetared92.py create mode 100644 Roadmap/17 - ITERACIONES/python/zetared92.py diff --git a/Roadmap/10 - EXCEPCIONES/python/zetared92.py b/Roadmap/10 - EXCEPCIONES/python/zetared92.py new file mode 100644 index 0000000000..0d61b4cc6a --- /dev/null +++ b/Roadmap/10 - EXCEPCIONES/python/zetared92.py @@ -0,0 +1,54 @@ +# Reto 10 EXCEPCIONES + +""" +Una excepción es un evento que ocurre durante la ejecución de un programa +y que interrumpe el flujo normal del código. +Sucede cuando el programa encuentra una situación que no +puede manejar, como intentar dividir por cero, +acceder a un índice fuera de los límites de una lista, +o tratar de abrir un archivo que no existe. +""" + +try: + print(10/0) + print([1, 2, 3, 4][4]) +except Exception as e: + print(f"An error has occurred: {e} ({type(e).__name__})") + + +# Extra + +print("🧩 DIFICULTAD EXTRA - FUNCIÓN CON EXCEPCIONES 🧩") + +class StrTypeError(Exception): + pass + +def params(parameters: list): + + if len(parameters) < 4: + raise IndexError() + elif parameters[1] == 0: + raise ZeroDivisionError() + elif type(parameters[2]) == str: + raise StrTypeError( + "The third parameter cannot be a text string.") + + print(parameters[2]) + print(parameters[0]/parameters[1]) + print(parameters[2] + 5) + + +try: + params([1, 2, 3, 4]) +except IndexError as e: + print("The number of items in the list must be greater than three.") +except ZeroDivisionError as e: + print("The second element in the list cannot be a zero.") +except StrTypeError as e: + print(f"{e}") +except Exception as e: + print(f"Unexpected error: {e}") +else: + print("No error has occurred.") +finally: + print("The program ends without stopping.") \ No newline at end of file diff --git a/Roadmap/11 - MANEJO DE FICHEROS/python/zetared92.py b/Roadmap/11 - MANEJO DE FICHEROS/python/zetared92.py new file mode 100644 index 0000000000..132cee7e4c --- /dev/null +++ b/Roadmap/11 - MANEJO DE FICHEROS/python/zetared92.py @@ -0,0 +1,98 @@ +# RETO 11 MANEJO DE FICHEROS +import os +"Crea un programa capaz de crear un archivo txt, imprime el contenido y borra el fichero" + +file_name = "zetared92.txt" + +with open(file_name, "w") as file: + file.write("Zeta Vega\n") + file.write("31\n") + file.write("Python") + +with open(file_name, "r") as file: + print(file.read()) + +os.remove(file_name) + + +# Extra + +print("🧩 DIFICULTAD EXTRA - GESTIÓN DE VENTAS 🧩") +file_name = "zeta_sales.txt" + +open(file_name, "a") + +while True: + print("1. Add product") + print("2. Check product") + print("3. Update product") + print("4. Delete product") + print("5. Show products") + print("6. Calculate total sales") + print("7. Calculate sales by product") + print("8. Exit") + + option = input("Select an option") + + if option == "1": + name = input("Name: ") + quantity = input("Quantity: ") + price = input("Price: ") + with open(file_name, "a") as file: + file.write(f"{name}, {quantity}, {price}\n") + elif option == "2": + name = input("Name: ") + with open(file_name, "r") as file: + for line in file.readlines(): + if line.split(", ")[0] == name: + print(line) + break + elif option == "3": + name = input("Name: ") + quantity = input("Quantity: ") + price = input("Price: ") + with open(file_name, "r") as file: + lines = file.readlines() + with open(file_name, "w") as file: + for line in lines: + if line.split(", ")[0] == name: + file.write(f"{name}, {quantity}, {price}\n") + else: + file.write(line) + elif option == "4": + name = input("Name: ") + with open(file_name, "r") as file: + lines = file.readlines() + with open(file_name, "w") as file: + for line in lines: + if line.split(", ")[0] != name: + file.write(line) + elif option == "5": + with open(file_name, "r") as file: + print(file.read()) + elif option == "6": + total = 0 + with open(file_name, "r") as file: + for line in file.readlines(): + components = line.split(", ") + quantity = int(components[1]) + price = float(components[2]) + total == quantity * price + print(total) + elif option == "7": + name = input("Name: ") + total = 0 + with open(file_name, "r") as file: + for line in file.readlines(): + components = line.split(", ") + if components[0] == name: + quantity = int(components[1]) + price = float(components[2]) + total += quantity * price + break + print(total) + elif option == "8": + os.remove(file_name) + break + else: + print("Select one of the available options.1") \ No newline at end of file diff --git a/Roadmap/12 - JSON Y XML/python/zetared92.py b/Roadmap/12 - JSON Y XML/python/zetared92.py new file mode 100644 index 0000000000..27747a65c5 --- /dev/null +++ b/Roadmap/12 - JSON Y XML/python/zetared92.py @@ -0,0 +1,101 @@ +# RETO 12 JSON Y XML + +import os +import xml.etree.ElementTree as xml +import json + +"Desarrolla un programa para crear archivo XML y JSON" + +data = { + "name": "Zeta Vega", + "age": 31, + "birth_date": "03-12-1992", + "languages": ["Python", "Swift", "Rust"] +} + +xml_file = "zetared.xml" +json_file = "zetared.json" + +""" +EJERCICIO +""" + +# XML + +def create_xml(): + + root = xml.Element("data") + + for key, value in data.items(): + child = xml.SubElement(root, key) + if isinstance(value, list): + for item in value: + xml.SubElement(child, "item").text = item + else: + child.text = str(value) + + tree = xml.ElementTree(root) + tree.write(xml_file) + +create_xml() + +with open(xml_file, "r") as xml_data: + print(xml_data.read()) + +os.remove(xml_file) + +# JSON + +def create_json(): + with open(json_file, "w") as json_data: + json.dump(data, json_data) + + +create_json() + +with open(json_file, "r") as json_data: + print(json_data.read()) + +os.remove(json_file) + + +# Extra + +print("🧩 DIFICULTAD EXTRA - ARCHIVOS 🧩") + +create_xml() +create_json() + +class Data: + + def __init__(self, name, age, birth_date, languages) -> None: + self.name = name + self.age = age + self.birth_date = birth_date + self.languages = languages + +with open(xml_file, "r") as xml_data: + + root = xml.fromstring(xml_data.read()) + name = root.find("name").text + age = root.find("age").text + birth_date = root.find("birth_date").text + languages = [] + for item in root.find("languages"): + languages.append(item.text) + + xml_class = Data(name, age, birth_date, languages) + print(xml_class.__dict__) + +with open(json_file, "r") as json_data: + json_dict = json.load(json_data) + json_class = Data( + json_dict["name"], + json_dict["age"], + json_dict["birth_date"], + json_dict["languages"] + ) + print(json_class.__dict__) + +os.remove(xml_file) +os.remove(json_file) \ No newline at end of file diff --git a/Roadmap/13 - PRUEBAS UNITARIAS/python/zetared92.py b/Roadmap/13 - PRUEBAS UNITARIAS/python/zetared92.py new file mode 100644 index 0000000000..0a3979133e --- /dev/null +++ b/Roadmap/13 - PRUEBAS UNITARIAS/python/zetared92.py @@ -0,0 +1,67 @@ +# RETO 13 PRUEBAS UNITARIAS + +import unittest +from datetime import datetime, date + +""" +Crea una función que sume dos números y retorne el resultado. +Crea un test capaz de determinar si esa funcion se ejecuta bien +""" + +def sum(a, b): + if not isinstance(a, (int, float)) or not isinstance(b, (int, float)): + raise ValueError("Arguments must be integers or decimals.") + return a + b + + +class TestSum(unittest.TestCase): + + def test_sum(self): + self.assertEqual(sum(5, 7), 12) + self.assertEqual(sum(5, -7), -2) + self.assertEqual(sum(0, 0), 0) + self.assertEqual(sum(2.5, 2.1), 4.6) + self.assertEqual(sum(2, 2.1), 4.1) + self.assertEqual(sum(2.5, 2.5), 5) + + def test_sum_type(self): + with self.assertRaises(ValueError): + sum("5", 7) + with self.assertRaises(ValueError): + sum(5, "7") + with self.assertRaises(ValueError): + sum("5", "7") + with self.assertRaises(ValueError): + sum("a", 7) + with self.assertRaises(ValueError): + sum(None, 7) + + +# Extra + +print("🧩 DIFICULTAD EXTRA - DICCIONARIO 🧩") + +class TestData(unittest.TestCase): + + def setUp(self) -> None: + self.data = { + "name": "Zeta Vega", + "age": 31, + "birth_date": datetime.strptime("03-12-92", "%d-%m-%y").date(), + "languages": ["Python", "Rust", "Swift"] + } + + def test_fields_exist(self): + self.assertIn("name", self.data) + self.assertIn("age", self.data) + self.assertIn("birth_date", self.data) + self.assertIn("languages", self.data) + + def test_data_is_correct(self): + self.assertIsInstance(self.data["name"], str) + self.assertIsInstance(self.data["age"], int) + self.assertIsInstance(self.data["birth_date"], date) + self.assertIsInstance(self.data["languages"], list) + + +unittest.main() diff --git a/Roadmap/14 - FECHAS/python/zetared92.py b/Roadmap/14 - FECHAS/python/zetared92.py new file mode 100644 index 0000000000..3d9c17e838 --- /dev/null +++ b/Roadmap/14 - FECHAS/python/zetared92.py @@ -0,0 +1,48 @@ +# RETO 14 FECHAS + +from datetime import datetime + +""" +CREA DOS VARIABLES CON LOS OBJETOS FECHA +(año, mes, día, hora, minutos, segundos) +1: FECHA ACTUAL +2: FECHA DE NACIMIENTO += AÑOS TRANSCURRIDOS ENTRE AMBAS FECHAS +""" + +now = datetime.now() +birth_date = datetime(1992, 12, 3, 16, 30, 0) + +print(now) +print(birth_date) + +diferrence = now - birth_date +print(type(diferrence)) + +print(f"I have {diferrence.days // 365} years.") + + +# Extra + +print("🧩 DIFICULTAD EXTRA - 10 MANERAS DE MOSTRAR LA FECHA 🧩") + +# Día, mes y año +print(birth_date.strftime("%d/%m/%y")) + +# Hora, minutos y segundos +print(birth_date.strftime("%H:%M:%S")) + +# Día del año +print(birth_date.strftime("%j")) + +# Día de la semana +print(birth_date.strftime("%A")) + +# Nombre del mes +print(birth_date.strftime("%B")) + +# Locale +print(birth_date.strftime("%c")) + +# AM/PM +print(birth_date.strftime("%p")) \ No newline at end of file diff --git "a/Roadmap/15 - ASINCRON\303\215A/python/zetared92.py" "b/Roadmap/15 - ASINCRON\303\215A/python/zetared92.py" new file mode 100644 index 0000000000..139025af6b --- /dev/null +++ "b/Roadmap/15 - ASINCRON\303\215A/python/zetared92.py" @@ -0,0 +1,41 @@ +# RETO 15 ASINCRONÍA + +import datetime +import asyncio + +""" +PROGRAMA QUE EJECUTE UNA FUNCIÓN ASÍNCRONA +""" + +async def task(name: str, duration: int): + print( + f"Task: {name}. Duration: {duration}sec. Start: {datetime.datetime.now()}") + await asyncio.sleep(duration) + print( + f"Task: {name}. End: {datetime.datetime.now()}") + + +asyncio.run(task("1", 2)) + + + +# Extra + +print("🧩 DIFICULTAD EXTRA - 10 MANERAS DE MOSTRAR LA FECHA 🧩") + +""" +Utilizando el concepto de asincronía y la función anterior, crea +el siguiente programa que ejecuta en este orden: +Una función C que dura 3 segundos. +Una función B que dura 2 segundos. +Una función A que dura 1 segundo. +Una función D que dura 1 segundo. +Las funciones C, B y A se ejecutan en paralelo. +La función D comienza su ejecución cuando las 3 anteriores han +finalizado. +""" + +async def async_task(): + await asyncio.gather(task("C", 3), task("B", 2), task("A", 1), task("D", 1)) + +asyncio.run(async_task()) \ No newline at end of file diff --git a/Roadmap/16 - EXPRESIONES REGULARES/python/zetared92.py b/Roadmap/16 - EXPRESIONES REGULARES/python/zetared92.py new file mode 100644 index 0000000000..b19bf3cd90 --- /dev/null +++ b/Roadmap/16 - EXPRESIONES REGULARES/python/zetared92.py @@ -0,0 +1,39 @@ +# RETO 16 EXPRESIONES REGULARES + +import re + +""" +EXPRESIÓN REGULAR QUE SEA CAPAZ DE +EXTRAER TODOS LOS NÚMEROS DE UN TEXTO +""" + +def find_numbers(text: str) -> list: + return re.findall(r"\d+", text) + +print(find_numbers("El 20/07/1969, la misión estadounidense Apolo 11 colocó a los primeros hombres en la Luna: el comandante Neil Armstrong y el piloto Edwin F. Aldrin")) + +# Extra + +print("🧩 DIFICULTAD EXTRA - 3 EXPRESIONES REGULARES 🧩") + +""" +CREA 3 EXPRESIONES REGULARES CAPACES DE: +1.- VALIDAR UN EMAIL +2.- VALIDAR UN NÚMERO DE TELÉFONO +3.- VALIDAR UNA URL +""" + +def validate_email(email: str) -> bool: + return bool(re.match(r"^[w.+-]+@[\w]+ \.[a-zA-Z]+$", email)) + +print(validate_email("zetar92@mail.com")) + +def validate_phone(phone: str) -> bool: + return bool(re.match(r"^\+?[\d\s]{3,}$", phone)) + +print(validate_phone("+34 928 00 00 00")) + +def validate_url(url: str) -> bool: + return bool(re.match(r"^http[s]?://(www.)?[\w]+\.[a-zA-Z]{2,}$", url)) + +print(validate_url("http://www.zeta92.dev")) \ No newline at end of file diff --git a/Roadmap/17 - ITERACIONES/python/zetared92.py b/Roadmap/17 - ITERACIONES/python/zetared92.py new file mode 100644 index 0000000000..01c5db433a --- /dev/null +++ b/Roadmap/17 - ITERACIONES/python/zetared92.py @@ -0,0 +1,57 @@ +# RETO 17 ITERACIONES + +""" +EMPLEA 3 MECANISMOS DIFERENTES PARA +IMPRIMIR NÚMEROS DEL 1-10 MEDIANTE ITEACIÓN +""" + +# FOR +for i in range(1,11): + print(i) + +# WHILE +i = 1 +while i <= 10: + print(i) + i += 1 + +# RECURSIVIDAD +def count_ten(i=1): + if i <= 10: + print(i) + count_ten(i + 1) + +count_ten() + +# Extra + +print("🧩 DIFICULTAD EXTRA - MECANISMOS PARA ITERAR VALORES 🧩") + +for e in [1, 2, 3, 4]: + print(e) + +for e in {1, 2, 3, 4}: + print(e) + +for e in (1, 2, 3, 4): + print(e) + +for e in {1: "a", 2: "b", 3: "c", 4: "d"}: + print(e) + +for e in {1: "a", 2: "b", 3: "c", 4: "d"}.values(): + print(e) + +print(*[i for i in range(1, 11)], sep="\n") + +for c in "Python": + print(c) + +for e in reversed([1, 2, 3, 4]): + print(e) + +for e in sorted(["z", "e", "t", "a"]): + print(e) + +for i, e in enumerate(sorted(["z", "e", "t", "a"])): + print(f"Index: {i}, value: {e}") \ No newline at end of file From 626dd45a516e161a378d628d5c74e91b78037ecc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Gallego?= <75795616+kontroldev@users.noreply.github.com> Date: Mon, 23 Sep 2024 12:04:09 +0200 Subject: [PATCH 491/539] Rename Nazhir_Avila_Reto1 to NazhirAvila.java --- .../java/{Nazhir_Avila_Reto1 => NazhirAvila.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/{Nazhir_Avila_Reto1 => NazhirAvila.java} (100%) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Nazhir_Avila_Reto1 b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/NazhirAvila.java similarity index 100% rename from Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/Nazhir_Avila_Reto1 rename to Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/NazhirAvila.java From 7b8444a29a8db8110a8091421fcf47081343fa8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Gallego?= <75795616+kontroldev@users.noreply.github.com> Date: Mon, 23 Sep 2024 12:11:45 +0200 Subject: [PATCH 492/539] Rename MohamedElderkaoui{.java to MohamedElderkaoui.java --- .../java/{MohamedElderkaoui{.java => MohamedElderkaoui.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/38 - MOUREDEV PRO/java/{MohamedElderkaoui{.java => MohamedElderkaoui.java} (100%) diff --git a/Roadmap/38 - MOUREDEV PRO/java/MohamedElderkaoui{.java b/Roadmap/38 - MOUREDEV PRO/java/MohamedElderkaoui.java similarity index 100% rename from Roadmap/38 - MOUREDEV PRO/java/MohamedElderkaoui{.java rename to Roadmap/38 - MOUREDEV PRO/java/MohamedElderkaoui.java From 8e913d635bc2cbe5e4ffa0b842d26a4a7ee0fca7 Mon Sep 17 00:00:00 2001 From: ddanone Date: Mon, 23 Sep 2024 13:43:11 +0200 Subject: [PATCH 493/539] #38 - javascript --- .../38 - MOUREDEV PRO/javascript/ddanone.js | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/javascript/ddanone.js diff --git a/Roadmap/38 - MOUREDEV PRO/javascript/ddanone.js b/Roadmap/38 - MOUREDEV PRO/javascript/ddanone.js new file mode 100644 index 0000000000..bed98de9c2 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/javascript/ddanone.js @@ -0,0 +1,39 @@ +/* +* Solución mixta con html y javascript para poder ser testeada en local +*/ + + + From d0872e5df3593cb207cb3d11d8005b874f6db218 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20D=C3=B3ezon?= Date: Mon, 23 Sep 2024 07:15:53 -0600 Subject: [PATCH 494/539] #38 - JavaScript --- .../javascript/RaulDoezon.js | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/javascript/RaulDoezon.js diff --git a/Roadmap/38 - MOUREDEV PRO/javascript/RaulDoezon.js b/Roadmap/38 - MOUREDEV PRO/javascript/RaulDoezon.js new file mode 100644 index 0000000000..d550e1d5d1 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/javascript/RaulDoezon.js @@ -0,0 +1,74 @@ +/* +He presentado mi proyecto más importante del año: mouredev pro. +EJERCICIO: + Un campus para la comunidad, que lanzaré en octubre, donde estudiar + programación de una manera diferente. + Cualquier persona suscrita a la newsletter de https://mouredev.pro + accederá a sorteos mensuales de suscripciones, regalos y descuentos. + + Desarrolla un programa que lea los registros de un fichero .csv y + seleccione de manera aleatoria diferentes ganadores. + Requisitos: + 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + o "inactivo" (y datos ficticios). + Ejemplo: 1 | test@test.com | activo + 2 | test2@test.com | inactivo + (El .csv no debe subirse como parte de la corrección) + 2. Recupera los datos desde el programa y selecciona email aleatorios. + Acciones: + 1. Accede al fichero .csv y selecciona de manera aleatoria un email + ganador de una suscripción, otro ganador de un descuento y un último + ganador de un libro (sólo si tiene status "activo" y no está repetido). + 2. Muestra los emails ganadores y su id. + 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + no debe tenerse en cuenta. +*/ + +const fs = require('fs'); +const readline = require('readline'); +const stream = fs.createReadStream('/ruta-del/archivo.csv'); +const reader = readline.createInterface({ input: stream }); +const awards = ['Suscripción', 'Descuento', 'Libro']; +let participants = []; +let aleatoryNumbers = []; +let selectedEmails = []; +let assignedAwards = -1; + +reader.on('line', (line) => { + const row = line.split(','); + + participants.push(row); +}); + +reader.on('close', () => { + console.table(participants); + + const numberOfParticipants = participants.length - 1; + + while(aleatoryNumbers.length < numberOfParticipants) { + let randomNumber = Math.round((Math.random() * (numberOfParticipants - 1) + 1)); + + if (aleatoryNumbers.indexOf(randomNumber) === -1) { + aleatoryNumbers.push(randomNumber); + } + } + + for (let index = 0; assignedAwards < 2; index++) { + let selectedNumber = aleatoryNumbers[index]; + let currentEmail = selectedEmails.find((email) => { + return email === participants[selectedNumber][1]; + }); + + if (currentEmail === undefined && participants[selectedNumber][2] === 'activo') { + selectedEmails.push(participants[selectedNumber][1]); + assignedAwards++; + + console.log(`🎁 El participante con correo ${participants[selectedNumber][1]} y ID ${participants[selectedNumber][0]} recibe el premio de ${awards[assignedAwards]}.`); + } else { + console.log(`⚠️ El participante con correo ${participants[selectedNumber][1]} salió premiado, pero no se le puede entregar premio porque está inactivo y/o repetido.`); + } + } + + console.log(`\nOrden de números aleatorios: ${aleatoryNumbers}`); + console.log(`Correos seleccionados: ${selectedEmails}`); +}); From 9e528ee959d9f8f6b7a88e11f0f03dd2d6d87acf Mon Sep 17 00:00:00 2001 From: Bruce <88008233+Roswell468@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:16:53 -0300 Subject: [PATCH 495/539] Rename gabrielCharibPollsdev.cbl to gabrielCharibPolls.cbl --- .../cobol/{gabrielCharibPollsdev.cbl => gabrielCharibPolls.cbl} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/{gabrielCharibPollsdev.cbl => gabrielCharibPolls.cbl} (99%) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/gabrielCharibPollsdev.cbl b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/gabrielCharibPolls.cbl similarity index 99% rename from Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/gabrielCharibPollsdev.cbl rename to Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/gabrielCharibPolls.cbl index 4c2c60d724..8f32e846b3 100644 --- a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/gabrielCharibPollsdev.cbl +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/gabrielCharibPolls.cbl @@ -52,4 +52,4 @@ - \ No newline at end of file + From 1cddecdc4a40988c132c418b7c94919d6fc8bb72 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Mon, 23 Sep 2024 09:19:01 -0500 Subject: [PATCH 496/539] #19 java --- .../java/martinbohorquez.java | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Roadmap/19 - ENUMERACIONES/java/martinbohorquez.java diff --git a/Roadmap/19 - ENUMERACIONES/java/martinbohorquez.java b/Roadmap/19 - ENUMERACIONES/java/martinbohorquez.java new file mode 100644 index 0000000000..d9d61f5212 --- /dev/null +++ b/Roadmap/19 - ENUMERACIONES/java/martinbohorquez.java @@ -0,0 +1,99 @@ +import java.util.Arrays; +import java.util.Scanner; + +/** + * #19 ENUMERACIONES + * + * @author martinbohorquez + */ +public class martinbohorquez { + + public static void main(String[] args) { + System.out.println("Ingresar el número de semana que desea consultar(1 al 7):"); + Scanner sc = new Scanner(System.in); + printDayOfWeek(sc.nextInt()); + + /* + * DIFICULTAD EXTRA: Crea un pequeño sistema de gestión del estado de pedidos. + */ + Order order1 = new Order(1); + order1.deliver(); + order1.ship(); + order1.deliver(); + order1.cancel(); + Order order2 = new Order(2); + order2.ship(); + order2.cancel(); + order2.deliver(); + } + + private static void printDayOfWeek(Integer dayNumber) { + String day = Arrays.stream(DayWeek.values()) + .filter(d -> d.getNumberDay().equals(dayNumber)) + .map(Enum::name) + .findFirst() + .orElse("No existe un día para el número escogido. Debe escoger un número del 1 al 7."); + System.out.println(day); + } + + enum DayWeek { + MONDAY(1), + TUESDAY(2), + WEDNESDAY(3), + THURSDAY(4), + FRIDAY(5), + SATURDAY(6), + SUNDAY(7); + private Integer numberDay = 0; + + private DayWeek(Integer numberDay) { + this.numberDay = numberDay; + } + + private Integer getNumberDay() { + return numberDay; + } + } + + enum OrderStatus { + PENDING, + SHIPPED, + DELIVERED, + CANCELED; + } + + private static class Order { + Integer orderId; + OrderStatus status; + + public Order(Integer orderId) { + this.orderId = orderId; + status = OrderStatus.PENDING; + } + + private void ship() { + if (status == OrderStatus.PENDING) { + status = OrderStatus.SHIPPED; + displayStatus(); + } else System.out.println("El pedido ya ha sido enviado o cancelado!"); + } + + private void deliver() { + if (status == OrderStatus.SHIPPED) { + status = OrderStatus.DELIVERED; + displayStatus(); + } else System.out.println("El pedido necesita ser enviado antes de entregarse!"); + } + + private void cancel() { + if (status != OrderStatus.DELIVERED) { + status = OrderStatus.CANCELED; + displayStatus(); + } else System.out.println("El pedido ya ha sido entregado, no es posible cancelar!"); + } + + private void displayStatus() { + System.out.printf("El estado del pedido %d es %s%n", orderId, status); + } + } +} From f436454221cf8011adae4d3abcbf4560f87c7efb Mon Sep 17 00:00:00 2001 From: carlosguariglia Date: Mon, 23 Sep 2024 11:45:53 -0300 Subject: [PATCH 497/539] =?UTF-8?q?Soluci=C3=B3n=20Reto=20#00=20c++?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../c++/carlosguariglia.cpp | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/carlosguariglia.cpp diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/carlosguariglia.cpp b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/carlosguariglia.cpp new file mode 100644 index 0000000000..fcc637155b --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/c++/carlosguariglia.cpp @@ -0,0 +1,39 @@ +// URL del sitio web oficial de C++: https://isocpp.org/ +// Generado por Chatgpt + +// Comentarios en una línea + +/* + Comentarios + en varias + líneas +*/ + +#include // Para poder usar std::cout +#include // Para poder usar el tipo std::string + +// Constante (en C++) +const double PI = 3.14159; + +int main() { + // Variables con diferentes tipos de datos primitivos + int numeroEntero = 42; + float numeroDecimal = 3.14f; + double numeroDoble = 2.718281828; + bool esVerdadero = true; + char letra = 'C'; + std::string cadenaDeTexto = "¡Hola, C++!"; + + // Imprimir por terminal + std::cout << "¡Hola, C++!" << std::endl; + + // Imprimir el valor de las variables + std::cout << "Número Entero: " << numeroEntero << std::endl; + std::cout << "Número Decimal (float): " << numeroDecimal << std::endl; + std::cout << "Número Doble (double): " << numeroDoble << std::endl; + std::cout << "Booleano: " << (esVerdadero ? "Verdadero" : "Falso") << std::endl; + std::cout << "Carácter: " << letra << std::endl; + std::cout << "Cadena de Texto: " << cadenaDeTexto << std::endl; + + return 0; +} From c41437c0eca89e70ed702fb4ffe773ac29fa3d63 Mon Sep 17 00:00:00 2001 From: carlosguariglia Date: Mon, 23 Sep 2024 12:16:07 -0300 Subject: [PATCH 498/539] =?UTF-8?q?Soluci=C3=B3n=20Reto=20#01=20c++?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../c++/carlosguariglia.cpp | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/carlosguariglia.cpp diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/carlosguariglia.cpp b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/carlosguariglia.cpp new file mode 100644 index 0000000000..9a1b4b4bcf --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/c++/carlosguariglia.cpp @@ -0,0 +1,128 @@ +/* # #01 OPERADORES Y ESTRUCTURAS DE CONTROL +> #### Dificultad: Fácil | Publicación: 02/01/24 | Corrección: 08/01/24 + + * EJERCICIO: + * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: + * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) + * - Utilizando las operaciones con operadores que tú quieras, crea ejemplos + * que representen todos los tipos de estructuras de control que existan + * en tu lenguaje: + * Condicionales, iterativas, excepciones... + * - Debes hacer print por consola del resultado de todos los ejemplos. + * + * DIFICULTAD EXTRA (opcional): + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + * + * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. + */ + +/* # #01 OPERADORES Y ESTRUCTURAS DE CONTROL +> #### Dificultad: Fácil | Publicación: 02/01/24 | Corrección: 08/01/24 + + * EJERCICIO: + * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: + * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... + * - Utilizando las operaciones con operadores que tú quieras, crea ejemplos + * que representen todos los tipos de estructuras de control que existan + * en tu lenguaje: Condicionales, iterativas, excepciones... + * - Debes hacer print por consola del resultado de todos los ejemplos. + */ +// generado por Chatgpt + + +#include +using namespace std; + +int main() { + // Operadores aritméticos + int a = 10; + int b = 3; + cout << "Operadores aritméticos:" << endl; + cout << "Suma: " << a + b << endl; + cout << "Resta: " << a - b << endl; + cout << "Multiplicación: " << a * b << endl; + cout << "División: " << a / b << endl; + cout << "Módulo: " << a % b << endl; + + // Operadores lógicos + bool x = true; + bool y = false; + cout << "\nOperadores lógicos:" << endl; + cout << "AND: " << (x && y) << endl; + cout << "OR: " << (x || y) << endl; + cout << "NOT: " << !x << endl; + + // Operadores de comparación + cout << "\nOperadores de comparación:" << endl; + cout << "a == b: " << (a == b) << endl; + cout << "a != b: " << (a != b) << endl; + cout << "a > b: " << (a > b) << endl; + cout << "a < b: " << (a < b) << endl; + cout << "a >= b: " << (a >= b) << endl; + cout << "a <= b: " << (a <= b) << endl; + + // Operadores de asignación + cout << "\nOperadores de asignación:" << endl; + int c = 5; + cout << "c = 5: " << c << endl; + c += 3; // c = c + 3 + cout << "c += 3: " << c << endl; + c *= 2; // c = c * 2 + cout << "c *= 2: " << c << endl; + c -= 4; // c = c - 4 + cout << "c -= 4: " << c << endl; + + // Operadores de bits + cout << "\nOperadores de bits:" << endl; + int d = 5; // 0101 en binario + int e = 3; // 0011 en binario + cout << "AND binario (d & e): " << (d & e) << endl; + cout << "OR binario (d | e): " << (d | e) << endl; + cout << "XOR binario (d ^ e): " << (d ^ e) << endl; + cout << "Shift izquierdo (d << 1): " << (d << 1) << endl; + cout << "Shift derecho (d >> 1): " << (d >> 1) << endl; + + // Estructuras de control + // Condicionales + cout << "\nEstructuras de control - Condicionales:" << endl; + if (a > b) { + cout << "a es mayor que b" << endl; + } else { + cout << "a no es mayor que b" << endl; + } + + // Bucle for + cout << "\nEstructuras de control - Bucle for:" << endl; + for (int i = 0; i < 5; i++) { + cout << "i: " << i << endl; + } + + // Bucle while + cout << "\nEstructuras de control - Bucle while:" << endl; + int count = 0; + while (count < 3) { + cout << "count: " << count << endl; + count++; + } + + // Bucle do-while + cout << "\nEstructuras de control - Bucle do-while:" << endl; + int num = 5; + do { + cout << "num: " << num << endl; + num--; + } while (num > 0); + + // DIFICULTAD EXTRA: imprimir los números pares entre 10 y 55 que no sean 16 ni múltiplos de 3 + cout << "\nDificultad extra: Números pares entre 10 y 55, excluyendo 16 y múltiplos de 3" << endl; + for (int i = 10; i <= 55; i++) { + if (i % 2 == 0 && i != 16 && i % 3 != 0) { + cout << i << " "; + } + } + cout << endl; + + return 0; +} From 8127cb07c009baca7d4c77a8d1592a9b2a69346e Mon Sep 17 00:00:00 2001 From: carlosguariglia Date: Mon, 23 Sep 2024 14:05:18 -0300 Subject: [PATCH 499/539] Reto #02 - c++ --- .../c++/carlosguariglia.cpp | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/c++/carlosguariglia.cpp diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/c++/carlosguariglia.cpp b/Roadmap/02 - FUNCIONES Y ALCANCE/c++/carlosguariglia.cpp new file mode 100644 index 0000000000..97e86e43e9 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/c++/carlosguariglia.cpp @@ -0,0 +1,95 @@ +/* +# #02 FUNCIONES Y ALCANCE +> #### Dificultad: Fácil | Publicación: 08/01/24 | Corrección: 15/01/24 + + * EJERCICIO: + * - Crea ejemplos de funciones básicas que representen las diferentes + * posibilidades del lenguaje: + * Sin parámetros ni retorno, con uno o varios parámetros, con retorno... + * - Comprueba si puedes crear funciones dentro de funciones. + * - Utiliza algún ejemplo de funciones ya creadas en el lenguaje. + * - Pon a prueba el concepto de variable LOCAL y GLOBAL. + * - Debes hacer print por consola del resultado de todos los ejemplos. + * (y tener en cuenta que cada lenguaje puede poseer más o menos posibilidades) + * + * DIFICULTAD EXTRA (opcional): + * Crea una función que reciba dos parámetros de tipo cadena de texto y retorne un número. + * - La función imprime todos los números del 1 al 100. Teniendo en cuenta que: + * - Si el número es múltiplo de 3, muestra la cadena de texto del primer parámetro. + * - Si el número es múltiplo de 5, muestra la cadena de texto del segundo parámetro. + * - Si el número es múltiplo de 3 y de 5, muestra las dos cadenas de texto concatenadas. + * - La función retorna el número de veces que se ha impreso el número en lugar de los textos. + * + * Presta especial atención a la sintaxis que debes utilizar en cada uno de los casos. + * Cada lenguaje sigue una convenciones que debes de respetar para que el código se entienda. + */ + + #include +#include +using namespace std; + +// Variables globales +int globalVar = 10; + +// Función sin parámetros ni retorno +void saludar() { + cout << "Hola, esta es una función sin parámetros ni retorno." << endl; +} + +// Función con parámetros pero sin retorno +void mostrarSuma(int a, int b) { + cout << "La suma de " << a << " y " << b << " es: " << a + b << endl; +} + +// Función con retorno +int multiplicar(int a, int b) { + return a * b; +} + +// Prueba de variable local y global +void modificarVariables() { + int localVar = 5; + cout << "Variable local: " << localVar << endl; + cout << "Variable global: " << globalVar << endl; + globalVar = 20; // Modificamos la variable global +} + +// Función que imprime todos los números del 1 al 100 siguiendo las reglas descritas +int imprimirMultiples(string cadena1, string cadena2) { + int contadorNumeros = 0; + for (int i = 1; i <= 100; i++) { + if (i % 3 == 0 && i % 5 == 0) { // Si el número es múltiplo de 3 y de 5 + cout << cadena1 + cadena2 << endl; // Imprime las dos cadenas de texto concatenadas + } else if (i % 3 == 0) { // Si el número es múltiplo de 3 y no de 5 + cout << cadena1 << endl; // Imprime la cadena de texto del primer parámetro + } else if (i % 5 == 0) { // Si el número es múltiplo de 5 y no de 3 + cout << cadena2 << endl; // Imprime la cadena de texto del segundo parámetro + } else { // Si el número no es múltiplo de 3 ni de 5 + cout << i << endl; // Imprime el número + contadorNumeros++; // Incrementa el contador + } + } + return contadorNumeros; // Retorna el contador +} + +int main() { + // Ejemplo de uso de las funciones + saludar(); + + mostrarSuma(5, 7); + + int resultado = multiplicar(3, 4); + cout << "El resultado de la multiplicación es: " << resultado << endl; + + // Prueba de variable local y global + modificarVariables(); + cout << "Variable global después de modificarla: " << globalVar << endl; + + // DIFICULTAD EXTRA: Función con dos cadenas de texto que imprime los múltiplos + string palabra1 = "Carlos"; + string palabra2 = "Guariglia"; + int vecesNumeros = imprimirMultiples(palabra1, palabra2); + cout << "Número de veces que se imprimió un número: " << vecesNumeros << endl; + + return 0; +} From 285a2591a9792cd2193bce3cd0ec5e1f7d7658dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20S=C3=A1nchez=20Escribano?= Date: Mon, 23 Sep 2024 19:16:12 +0200 Subject: [PATCH 500/539] reto 05 C --- Roadmap/05 - VALOR Y REFERENCIA/c/d1d4cum.c | 64 +++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 Roadmap/05 - VALOR Y REFERENCIA/c/d1d4cum.c diff --git a/Roadmap/05 - VALOR Y REFERENCIA/c/d1d4cum.c b/Roadmap/05 - VALOR Y REFERENCIA/c/d1d4cum.c new file mode 100644 index 0000000000..f1112594ae --- /dev/null +++ b/Roadmap/05 - VALOR Y REFERENCIA/c/d1d4cum.c @@ -0,0 +1,64 @@ +#include + +/* +// Variables por valor +int age1 = 28; +printf("Edad 1: %d\n", age1); + +int age2 = age1; +printf("Edad 2: %d\n", age1); +age2 = 30; +printf("Edad 1: %d\n", age1); +printf("Edad 2: %d\n", age2); + +// Variables por referencia usando punteros +int* age3 = &age1; +printf("Edad 1: %d\n", age1); +*age3 = 45; +printf("Edad 1: %d\n", age1); +*/ + +int valor1 = 1; +int valor2 = 2; +int newValor1; +int newValor2; + +void valor(int valor1, int valor2) { + int old1 = valor1; + int old2 = valor2; + + valor2 = old1; + valor1 = old2; + + newValor1 = valor1; + newValor2 = valor2; +} + +void reference(int *valor1, int *valor2) { + int old1 = *valor1; + int old2 = *valor2; + + *valor1 = old2; + *valor2 = old1; + + newValor1 = *valor1; + newValor2 = *valor2; +} + +int main() { + printf("**Paso por valor**\n"); + valor(valor1, valor2); + printf("Valor 1 original: %d\n", valor1); + printf("Valor 2 original: %d\n", valor2); + printf("Valor 1 nuevo: %d\n", newValor1); + printf("Valor 2 nuevo: %d\n", newValor2); + + printf("**Paso por referencia**\n"); + reference(&valor1, &valor2); + printf("Valor 1 original: %d\n", valor1); + printf("Valor 2 original: %d\n", valor2); + printf("Valor 1 nuevo: %d\n", newValor1); + printf("Valor 2 nuevo: %d\n", newValor2); + + return 0; +} From 9349cd02d8e807acd9c7f4b6e26e32657d947c65 Mon Sep 17 00:00:00 2001 From: TizoG Date: Mon, 23 Sep 2024 20:37:20 +0200 Subject: [PATCH 501/539] # 02 - python --- .../02 - FUNCIONES Y ALCANCE/python/TizoG.py | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 Roadmap/02 - FUNCIONES Y ALCANCE/python/TizoG.py diff --git a/Roadmap/02 - FUNCIONES Y ALCANCE/python/TizoG.py b/Roadmap/02 - FUNCIONES Y ALCANCE/python/TizoG.py new file mode 100644 index 0000000000..65d717a7f8 --- /dev/null +++ b/Roadmap/02 - FUNCIONES Y ALCANCE/python/TizoG.py @@ -0,0 +1,118 @@ +# Funciones basicas sin retorno +def saludo(): + print("Hola mundo") + + +saludo() + +# Funcion con retorno + + +def saludo_retorno(): + return "Hola mundo" + + +print(saludo_retorno()) + +# Con un argumento + + +def arg_saludo(nombre): + print(f"Hola {nombre}") + + +print(arg_saludo("Juan")) + +# Con argumentos + + +def argts_saludo(nombre, apellido): + print(f"hola {nombre} {apellido}") + + +argts_saludo("Juan", "Yesca") + +# Con argumentos predefinidos + + +def arg_definido(nombre="Juan"): + print(f"Hola {nombre}") + + +arg_definido() +arg_definido("Juanito") + +# Con argumento y retorno + + +def ret_arg(nombre, apellido): + return f"Hola {nombre} {apellido}" + + +print(ret_arg("Juan", "Yesca")) + +# Con un numero variable de argumentos + + +def num_arg(*nombres): + for nombre in nombres: + print(f"Hola {nombre}") + + +num_arg("Juan", "Yesca", "Pedro", "Maria") + + +""" +Funciones dentro de funciones +""" + + +def funcion_out(): + def funcion_in(): + print("Hola mundo") + funcion_in() + + +funcion_out() + +# Funciones del lenguaje +print(len("Juan")) +print(type("Juan")) +print("Juan".upper()) + +""" +Variables globales y locales +""" +var_global = "Juan" + + +def hola_juan(): + var_local = "Juanito" + print(f"{var_global}, {var_local}") + + +print(var_global) +hola_juan() + + +""" +Extra +""" + + +def print_numeros(texzto1, texto2) -> int: + count = 0 + for numeros in range(1, 101): + if numeros % 3 == 0 and numeros % 5 == 0: + print(texzto1 + texto2) + elif numeros % 3 == 0: + print(texzto1) + elif numeros % 5 == 0: + print(texto2) + else: + print(numeros) + count += 1 + return count + + +print(print_numeros("Fizz", "Buzz")) From 1045d2da3ea77d80e790e4b037c5f3d733dfec5b Mon Sep 17 00:00:00 2001 From: sarismejiasanchez <93800332+sarismejiasanchez@users.noreply.github.com> Date: Mon, 23 Sep 2024 18:50:42 +0000 Subject: [PATCH 502/539] #05 - Python --- .../python/sarismejiasanchez.py | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 Roadmap/05 - VALOR Y REFERENCIA/python/sarismejiasanchez.py diff --git a/Roadmap/05 - VALOR Y REFERENCIA/python/sarismejiasanchez.py b/Roadmap/05 - VALOR Y REFERENCIA/python/sarismejiasanchez.py new file mode 100644 index 0000000000..7631752c7a --- /dev/null +++ b/Roadmap/05 - VALOR Y REFERENCIA/python/sarismejiasanchez.py @@ -0,0 +1,84 @@ +# #05 VALOR Y REFERENCIA + +""" +* - Muestra ejemplos de asignación de variables "por valor" y "por referencia", según +* su tipo de dato. +""" + +# PASO POR VALOR +# Variables inmutables (se comportan como si fueran "por valor") +# Los tipos de datos inmutables en Python incluyen int, float, bool, str, tuple. +# Si modificas una variable de un tipo inmutable, se crea un nuevo objeto en memoria. + +print("PASO POR VALOR") +# Variables inmutables (int, str) +a = 10 +b = a # Apunta al mismo valor que a + +b = 20 # Se crea un nuevo valor, b apunta a otro lugar en memoria + +print(a) # 10 (a no ha cambiado) +print(b) # 20 (b tiene un nuevo valor) + +# PASO POR REFERENCIA +# Variables mutables (se comportan como si fueran "por referencia") +# Los tipos de datos mutables incluyen list, dict, set. Modificar una variable mutable afecta # a todas las referencias que apuntan a ese objeto. + +print("PASO POR REFERENCIA") +# Variables mutables (listas) +x = [1, 2, 3] +y = x # y apunta al mismo espacio en memoria de x + +y.append(4) # Modifica la lista a la que ambos apuntan + +print(x) # Output: [1, 2, 3, 4] (x ha cambiado) +print(y) # Output: [1, 2, 3, 4] (y también ha cambiado) + + +""" +* - 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) +* +""" + +# Función con inmutables (se comportan como si fueran "por valor") +# Cuando pasas un tipo inmutable a una función, cualquier modificación dentro de la función no # afectará al valor original fuera de la función. + +print("\nFunciones: Paso por Valor vs Referencia") + +print("PASO POR VALOR") + +def modificar_numero(n): + n = 100 # Se asigna un nuevo valor a n + print(f"Valor dentro de la función: {n}") # # Valor dentro de la función: 100 + +numero = 10 +modificar_numero(numero) +print(f"Valor fuera de la función: {numero}") # Valor fuera de la función: 10 + +# Función con mutables (se comportan como si fueran "por referencia") +# Cuando pasas un tipo mutable a una función, las modificaciones dentro de la función +# afectarán al objeto original. + +print("PASO POR REFERENCIA") + +def modificar_lista(lista): + lista.append(100) # Modifica la lista original + +mi_lista = [1, 2, 3] +modificar_lista(mi_lista) +print(mi_lista) # [1, 2, 3, 100] (la lista ha sido modificada) + + +""" +* 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. +*/ + +""" \ No newline at end of file From 4048bafa6f9c0a3cb8be8af0ce4983e151e3fce9 Mon Sep 17 00:00:00 2001 From: resbaloso <134111217+raynerpv2022@users.noreply.github.com> Date: Mon, 23 Sep 2024 21:07:27 +0200 Subject: [PATCH 503/539] #20 Python and Go --- .../20 - PETICIONES HTTP/go/raynerpv2022.go | 238 ++++++++++++++++++ .../python/raynerpv2022.py | 87 +++++++ 2 files changed, 325 insertions(+) create mode 100644 Roadmap/20 - PETICIONES HTTP/go/raynerpv2022.go create mode 100644 Roadmap/20 - PETICIONES HTTP/python/raynerpv2022.py diff --git a/Roadmap/20 - PETICIONES HTTP/go/raynerpv2022.go b/Roadmap/20 - PETICIONES HTTP/go/raynerpv2022.go new file mode 100644 index 0000000000..53bc822539 --- /dev/null +++ b/Roadmap/20 - PETICIONES HTTP/go/raynerpv2022.go @@ -0,0 +1,238 @@ +/* + * 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. + * + * 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 + */ + +package main + +import ( + "encoding/json" + "fmt" + "io" + + "net/http" +) + +func exercice(url string) { + resp, err := http.Get(url) + + if err != nil { + + fmt.Printf("Error readinng web site %v\n", err) + return + } + defer resp.Body.Close() + data, err := io.ReadAll(resp.Body) + + if err != nil { + fmt.Printf("Error readinng data %v", err) + } + if resp.StatusCode == 200 { + fmt.Println("Conexion Exitosa. Code :", resp.StatusCode) + } + fmt.Println(string(data)) + +} + +func getPokeUrl(url string) *http.Response { + response, e := http.Get(url) + + if e != nil { + + fmt.Printf("Error de Red %v \n", e) + return nil + } + + if response.StatusCode == http.StatusNotFound { + fmt.Println("Pokemmon no encontrado ") + return nil + } + + return response +} + +func extra() { + + var PokemonName string + fmt.Println("Nombre o NUmero del Pokemon ") + fmt.Scanln(&PokemonName) + url := fmt.Sprintf("https://pokeapi.co/api/v2/pokemon/%v", PokemonName) + fmt.Println(url) + + response := getPokeUrl(url) + if response == nil { + return + } + // response, e := http.Get(url) + + // if e != nil { + + // fmt.Printf("Error de Red %v \n", e) + // return + // } + + // if response.StatusCode == http.StatusNotFound { + // fmt.Println("Pokemmon no encontrado ") + // return + // } + + defer response.Body.Close() + + data, e := io.ReadAll(response.Body) + if e != nil { + fmt.Printf("Error reading Data %v \n", e) + return + } + + var poke Pokemon + e = json.Unmarshal(data, &poke) + if e != nil { + fmt.Printf("Error json data %v\n", e) + return + } + + fmt.Printf("Name : %v\t", poke.Name) + fmt.Printf("ID : %v\t", poke.Id) + fmt.Printf("Weight : %v\t", poke.Weight) + fmt.Printf("Height : %v\t\n", poke.Height) + + fmt.Println("tIpOs") + + for _, v := range poke.Types { + fmt.Printf(" \t Name %v URL %v \n", v.Type.Name, v.Type.Url) + + } + fmt.Println("Games") + for _, v := range poke.GameIndices { + fmt.Printf(" \t Index %v Name %v URL %v \n", v.GameIndex, v.Version.Name, v.Version.Url) + } + + specie_url := fmt.Sprintf("https://pokeapi.co/api/v2/pokemon-species//%v", PokemonName) + + Respspecie := getPokeUrl(specie_url) + + if Respspecie == nil { + + return + } + + defer Respspecie.Body.Close() + + data, e = io.ReadAll(Respspecie.Body) + + if e != nil { + fmt.Printf("Error reading Data %v \n", e) + return + } + + var evolutionChain EvolutionChainUrl + e = json.Unmarshal(data, &evolutionChain) + if e != nil { + fmt.Printf("Error json data %v\n", e) + return + } + + fmt.Println("URL", evolutionChain.Evolution_chain.Url) + + evolution_chain := getPokeUrl(evolutionChain.Evolution_chain.Url) + if evolution_chain == nil { + + return + } + defer evolution_chain.Body.Close() + + var evolution_to eEvo + respEvolutio_to, _ := io.ReadAll(evolution_chain.Body) + _ = json.Unmarshal(respEvolutio_to, &evolution_to) + + fmt.Println("EStado Original : ", evolution_to.Chain.Species.Name) + fmt.Println("Cadena de Evolution: ") + printEvo(evolution_to.Chain) + +} + +func printEvo(dd Ggg) { + + for _, evo := range dd.Evolve_to { + printEvo(evo) + fmt.Println(evo.Species.Name) + + } + +} + +func GetPokemon(url string) *http.Response { + response, e := http.Get(url) + + if e != nil { + + fmt.Printf("Error de Red %v \n", e) + return nil + } + + if response.StatusCode == http.StatusNotFound { + fmt.Println("Pokemmon no encontrado ") + return nil + } + + defer response.Body.Close() + return response + +} + +type eEvo struct { + Chain Ggg `json:"chain"` +} + +type Ggg struct { + Evolve_to []Ggg `json:"evolves_to"` + + Species struct { + Name string `json:"name"` + } `json:"species"` +} + +type EvolutionChainUrl struct { + Evolution_chain struct { + Url string `json:"url"` + } `json:"evolution_chain"` +} + +type Pokemon struct { + Id int `json:"id"` + Name string `json:"name"` + Weight int `json:"weight"` + Height int `json:"height"` + + GameIndices []struct { + GameIndex int `json:"game_index"` + Version struct { + Name string `json:"name"` + Url string `json:"url"` + } `json:"version"` + } `json:"game_indices"` + + Types []struct { + Slot int `json:"slot"` + Type struct { + Name string `json:"name"` + Url string `json:"url"` + } `json:"type"` + } `json:"types"` +} + +func main() { + // exercice("https://mouredev.pro") + extra() +} diff --git a/Roadmap/20 - PETICIONES HTTP/python/raynerpv2022.py b/Roadmap/20 - PETICIONES HTTP/python/raynerpv2022.py new file mode 100644 index 0000000000..85908a42d2 --- /dev/null +++ b/Roadmap/20 - PETICIONES HTTP/python/raynerpv2022.py @@ -0,0 +1,87 @@ +# /* +# * 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. +# * +# * 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 +# */ + +import requests + + +def execrcice(url: str): + try: + response = requests.get(url) + response.raise_for_status() + except requests.exceptions.RequestException as e: + + print("Error Conexion Lost Code :", e) + + else : + print("Conexion Succesfully, Code :", response.status_code) + print("Data") + print() + print(response.text) + +def extra(): + value = input("Numero o Nombredel pOkEmOn:") + url = f"https://pokeapi.co/api/v2/pokemon/{value}" + + poke = get_Poke_url(url) + if not poke : + return + + print(f' Nombre {poke["name"]}' ) + print(f' ID {poke["id"]}' ) + print(f' Weight {poke["weight"]}' ) + print(f' Height {poke["height"]}' ) + print("Tipos ") + for t in poke["types"] : + print(f"\tNOmbre: {t['type']['name']} URL: {t['type']['url']}") + print() + + print("GAmes ") + for g in poke["game_indices"]: + print(f" \t {g['version']['name']} *** url: {g['version']['url']}") + + + specie_url = f"https://pokeapi.co/api/v2/pokemon-species/{value}" + specie_json = get_Poke_url(specie_url) + if not specie_json: + return + + evolution_chain_json = get_Poke_url(specie_json["evolution_chain"]["url"]) + if not evolution_chain_json: + return + + print("EVOLUTION CHAIN") + get_evolution(evolution_chain_json["chain"]) + +def get_evolution(evolution): + + if "evolves_to" in evolution: + for i in evolution["evolves_to"]: + + get_evolution(i) + print(f'\t {evolution["species"]["name"]}') + +def get_Poke_url(url): + response = requests.get(url) + status_code = response.status_code + if status_code >= 300 or status_code < 200: + print(f"Pokemon No encontrado, Error : {status_code}") + return False + return response.json() + + + +# execrcice("https://mouredev.pro/") +extra() From 62c31bc9d6b623928cd8d3f8160d21f3b7116dba Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 23 Sep 2024 21:20:07 +0200 Subject: [PATCH 504/539] =?UTF-8?q?Correcci=C3=B3n=20Roadmap=2038=20+=20Nu?= =?UTF-8?q?evo=20ejercicio=2039?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +-- Roadmap/38 - MOUREDEV PRO/python/mouredev.py | 41 +++++++++++++++++ Roadmap/39 - BATMAN DAY/ejercicio.md | 46 ++++++++++++++++++++ 3 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/mouredev.py create mode 100644 Roadmap/39 - BATMAN DAY/ejercicio.md diff --git a/README.md b/README.md index fbeae21deb..2521f6b3e7 100644 --- a/README.md +++ b/README.md @@ -27,8 +27,8 @@ ## Corrección y próximo ejercicio -> #### Lunes 16 de septiembre de 2024 a las 20:00 (hora España) desde **[Twitch](https://twitch.tv/mouredev)** -> #### Consulta el **[horario](https://discord.gg/8cxgGTxm?event=1280229634524450877)** por país y crea un **[recordatorio](https://discord.gg/8cxgGTxm?event=1280229634524450877)** +> #### Lunes 30 de septiembre de 2024 a las 20:00 (hora España) desde **[Twitch](https://twitch.tv/mouredev)** +> #### Consulta el **[horario](https://discord.gg/Ak6SdZZ8?event=1285336208586833930)** por país y crea un **[recordatorio](https://discord.gg/Ak6SdZZ8?event=1285336208586833930)** ## Roadmap @@ -72,7 +72,8 @@ |35|[REPARTIENDO LOS ANILLOS DE PODER](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/ejercicio.md)|[📝](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/python/mouredev.py)|[▶️](https://youtu.be/10i2dnaMLj8)|[👥](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/) |36|[EL SOMBRERO SELECCIONADOR](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/ejercicio.md)|[📝](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/python/mouredev.py)|[▶️](https://youtu.be/_UjOD587elY)|[👥](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/) |37|[OASIS VS LINKIN PARK](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/ejercicio.md)|[📝](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/python/mouredev.py)|[▶️](https://youtu.be/q-zBKriHupY)|[👥](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/) -|38|[MOUREDEV PRO](./Roadmap/38%20-%20MOUREDEV%20PRO/ejercicio.md)|[🗓️ 23/09/24](https://discord.gg/xeebRweK?event=1283082037917519985)||[👥](./Roadmap/38%20-%20MOUREDEV%20PRO/) +|38|[MOUREDEV PRO](./Roadmap/38%20-%20MOUREDEV%20PRO/ejercicio.md)|[📝](./Roadmap/38%20-%20MOUREDEV%20PRO/python/mouredev.py)||[👥](./Roadmap/38%20-%20MOUREDEV%20PRO/) +|39|[BATMAN DAY](./Roadmap/39%20-%20BATMAN%20DAY/ejercicio.md)|[🗓️ 30/09/24](https://discord.gg/Ak6SdZZ8?event=1285336208586833930)||[👥](./Roadmap/39%20-%20BATMAN%20DAY/) ## Cursos en YouTube diff --git a/Roadmap/38 - MOUREDEV PRO/python/mouredev.py b/Roadmap/38 - MOUREDEV PRO/python/mouredev.py new file mode 100644 index 0000000000..93d39d4445 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/mouredev.py @@ -0,0 +1,41 @@ +import os +import csv +import random + + +def read_csv_data() -> list: + + file_dir = os.path.dirname(os.path.abspath(__file__)) + csv_file = f"{file_dir}/subs.csv" + + data = [] + + with open(csv_file, mode="r") as file: + reader = csv.DictReader(file) + for row in reader: + if row["status"] == "activo": + data.append(row) + + return data + + +def select_winners(data: list) -> list: + + if len(data) < 3: + raise ValueError("El número de elementos debe ser mínimo 3.") + + return random.sample(data, 3) + + +def display_winners(winners): + prizes = ["Suscripción", "Descuento", "Libro"] + for winner, prize in zip(winners, prizes): + print(f"{prize}: {winner["email"]} (ID: {winner["id"]})") + + +try: + data = read_csv_data() + winners = select_winners(data) + display_winners(winners) +except Exception as e: + print(e) diff --git a/Roadmap/39 - BATMAN DAY/ejercicio.md b/Roadmap/39 - BATMAN DAY/ejercicio.md new file mode 100644 index 0000000000..4c1643f85f --- /dev/null +++ b/Roadmap/39 - BATMAN DAY/ejercicio.md @@ -0,0 +1,46 @@ +# #39 BATMAN DAY +> #### Dificultad: Media | Publicación: 23/09/24 | Corrección: 30/09/24 + +## Ejercicio + +``` +/* + * EJERCICIO: + * Cada año se celebra el Batman Day durante la tercera semana de septiembre... + * ¡Y este año cumple 85 años! Te propongo un reto doble: + * + * RETO 1: + * Crea un programa que calcule cuándo se va a celebrar el Batman Day hasta + * su 100 aniversario. + * + * RETO 2: + * Crea un programa que implemente el sistema de seguridad de la Batcueva. + * Este sistema está diseñado para monitorear múltiples sensores distribuidos + * por Gotham, detectar intrusos y activar respuestas automatizadas. + * Cada sensor reporta su estado en tiempo real, y Batman necesita un programa + * que procese estos datos para tomar decisiones estratégicas. + * Requisitos: + * - El mapa de Gotham y los sensores se representa con una cuadrícula 20x20. + * - Cada sensor se identifica con una coordenada (x, y) y un nivel + * de amenaza entre 0 a 10 (número entero). + * - Batman debe concentrar recursos en el área más crítica de Gotham. + * - El programa recibe un listado de tuplas representando coordenadas de los + * sensores y su nivel de amenaza. El umbral de activación del protocolo de + * seguridad es 20 (sumatorio de amenazas en una cuadrícula 3x3). + * Acciones: + * - Identifica el área con mayor concentración de amenazas + * (sumatorio de amenazas en una cuadrícula 3x3). + * - Si el sumatorio de amenazas es mayor al umbral, activa el + * protocolo de seguridad. + * - Calcula la distancia desde la Batcueva, situada en (0, 0). La distancia es + * la suma absoluta de las coordenadas al centro de la cuadrícula amenazada. + * - Muestra la coordenada al centro de la cuadrícula más amenazada, la suma de + * sus amenazas, la distancia a la Batcueva y si se debe activar el + * protocolo de seguridad. + */ +``` +#### Tienes toda la información extendida sobre el roadmap de retos de programación en **[retosdeprogramacion.com/roadmap](https://retosdeprogramacion.com/roadmap)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file From 74243a003adb934c137bf8f00cfdff954ec4d648 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 23 Sep 2024 13:24:33 -0600 Subject: [PATCH 505/539] aporte --- Roadmap/18 - CONJUNTOS/python/danielhdzr.py | 83 +++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Roadmap/18 - CONJUNTOS/python/danielhdzr.py diff --git a/Roadmap/18 - CONJUNTOS/python/danielhdzr.py b/Roadmap/18 - CONJUNTOS/python/danielhdzr.py new file mode 100644 index 0000000000..0701ad6620 --- /dev/null +++ b/Roadmap/18 - CONJUNTOS/python/danielhdzr.py @@ -0,0 +1,83 @@ +# #18 CONJUNTOS +#### Dificultad: Fácil | Publicación: 29/04/24 | Corrección: 06/05/24 + +''' + * EJERCICIO: + * Utilizando tu lenguaje crea un conjunto de datos y realiza las siguientes + * operaciones (debes utilizar una estructura que las soporte): + * - Añade un elemento al final. + * - Añade un elemento al principio. + * - Añade varios elementos en bloque al final. + * - Añade varios elementos en bloque en una posición concreta. + * - Elimina un elemento en una posición concreta. + * - Actualiza el valor de un elemento en una posición concreta. + * - Comprueba si un elemento está en un conjunto. + * - Elimina todo el contenido del conjunto. + * + * DIFICULTAD EXTRA (opcional): + * Muestra ejemplos de las siguientes operaciones con conjuntos: + * - Unión. + * - Intersección. + * - Diferencia. + * - Diferencia simétrica. +''' +# Añade un elemento al final. +datos = [1,2,3,4] +datos.append(5) +print(datos) + +# Añade un elemento al principio. +datos.insert(0,0) +print(datos) + +# Añade varios elementos en bloque al final. +un_set = {1,2,3} +print(un_set) +nuevo_set = {4,5,6} +print(nuevo_set) +un_set.update(nuevo_set) +print(un_set) + +# Añade varios elementos en bloque en una posición concreta. +diccionario = {"k1":1, "k5":5, "k6":6} +print(diccionario) +otro_dicc = {"k2":2, "k3":3, "k4":4} +print(otro_dicc) +diccionario.update(otro_dicc) +nuevo_dict = [key for key in sorted(diccionario)] +print(f"Sin mostrar values {nuevo_dict}") +nuevo_dict = {key: diccionario[key] for key in sorted(diccionario)} +print(f"Mostrando values: {nuevo_dict}") + +# Elimina un elemento en una posición concreta. +datos.remove(4) # lista +print(datos) + +my_set = {1, 2, 3} # set +my_set.remove(3) +print(my_set) + +del nuevo_dict["k6"] # dicc +print(nuevo_dict) + + # Actualiza el valor de un elemento en una posición concreta. +datos[1] = 4 # lista +print(datos) +nuevo_dict["k1"] = 0.5 # dicc +print(nuevo_dict) + +# Comprueba si un elemento está en un conjunto. +print(2 in datos) +print("k1" in nuevo_dict) +print(1 in my_set) + + +# Elimina todo el contenido del conjunto. +datos.clear() # lista +print(datos) + +nuevo_dict.clear() # dicc +print(nuevo_dict) + +my_set.clear() # set +print(my_set) \ No newline at end of file From 9f4df4cac32ae1b8c0a5c431caf5c2476f76879d Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 23 Sep 2024 13:29:47 -0600 Subject: [PATCH 506/539] correccion --- .../python/danielhdzr.py | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Roadmap/03 - ESTRUCTURAS DE DATOS/python/danielhdzr.py b/Roadmap/03 - ESTRUCTURAS DE DATOS/python/danielhdzr.py index fbc90e003d..a7fdd7fdce 100644 --- a/Roadmap/03 - ESTRUCTURAS DE DATOS/python/danielhdzr.py +++ b/Roadmap/03 - ESTRUCTURAS DE DATOS/python/danielhdzr.py @@ -22,40 +22,40 @@ def main(): # CREAMOS LISTA this_is_a_list = [1, 2, 3, 4] print(this_is_a_list) - # Para insertar podemos usar el metodo insert en el index que deseamos (en este caso lo inserto al inicio) + # insertar podemos usar el metodo insert en el index que deseamos (en este caso lo inserto al inicio) this_is_a_list.insert(0, 0) print(this_is_a_list) - # Para actualizar podemos usar el metodo append (agrega el objeto al final de la lista) + # actualizar podemos usar el metodo append (agrega el objeto al final de la lista) this_is_a_list.append(5) print(this_is_a_list) - # Para ordenar podemos usar el metodo sort (yo lo use para odenarlo al reves con el parametro reverse=True) + # ordenar podemos usar el metodo sort (yo lo use para odenarlo al reves con el parametro reverse=True) this_is_a_list.sort(reverse=True) print(this_is_a_list) - # Para borrar el contenido de la lista (no la lista en si misma) podemos usar el metodo clear + # borrar el contenido de la lista (no la lista en si misma) podemos usar el metodo clear this_is_a_list.clear() print(this_is_a_list) # CREAMOS DICCIONARIO this_is_a_dictionary = {"key1" : 1, "key2" : 2, "key3" : 3} print(this_is_a_dictionary) - # Para insertar, nombramos una nueva key en el diccionario, y asignamos su value correspondiente + # insertar, nombramos una nueva key en el diccionario, y asignamos su value correspondiente this_is_a_dictionary["key4"] = 4 print(this_is_a_dictionary) - # Podemos actualizar los objetos de un dict, incluyendo en este los objetos de un segundo dict + # actualizar los objetos de un dict, incluyendo en este los objetos de un segundo dict this_is_another_dictionary = {"key5": 5} this_is_a_dictionary.update(this_is_another_dictionary) print(this_is_a_dictionary) - # Tambien podemos actualizar, si accedemos al key que queremos modificar y le reasignamos un value nuevo + # podemos actualizar, si accedemos al key que queremos modificar y le reasignamos un value nuevo this_is_a_dictionary["key4"] = "four" print(this_is_a_dictionary) # Nuevo diccionario new_dict = {"one":1, "three":3, "two": 2, "five": 5, "four" : 4} - # Podemos ordenar mediante la funcion sorted y un dict comprehension (ordenando por keys) + # ordenar mediante la funcion sorted y un dict comprehension (ordenando por keys) # Ya que las keys son str, se ordenan en orden alfabetico sorted_by_keys = {key: new_dict[key] for key in sorted(new_dict)} print(f"Sorted by keys: {sorted_by_keys}") - # Podemos ordenar mediante la funcion sorted y un dict comprehension (ordenado por values) + # ordenar mediante la funcion sorted y un dict comprehension (ordenado por values) sorted_by_values = {k: v for k, v in sorted(new_dict.items(), key=lambda item: item[1])} print(f"Sorted by values: {sorted_by_values}") @@ -73,25 +73,25 @@ def main(): # CREAMOS SET (desordenado, no admite duplicados) this_is_a_set = {2, 1, 3} print(this_is_a_set) - # Para insertar podemos usar el metodo add y se agrega al final + # insertar podemos usar el metodo add y se agrega al final this_is_a_set.add(4) print(this_is_a_set) - # Para actualizar podemos usar el metodo update que actualiza el set uniendo los datos de otro set + # actualizar podemos usar el metodo update que actualiza el set uniendo los datos de otro set new_set = {6, 5} print(new_set) this_is_a_set.update(new_set) print(this_is_a_set) - # Para ordenar podemos convertir el set a una lista y ordenar la lista + # ordenar podemos convertir el set a una lista y ordenar la lista list_from_set = sorted(this_is_a_set) print(list_from_set) - # Para borrar el contenido del set usamos el metodo clear + # borrar el contenido del set usamos el metodo clear this_is_a_set.clear() print(this_is_a_set) # CREAMOS TUPLA (inmutable) this_is_a_tuple = (1, 2, 3, 4) print(this_is_a_tuple) - # Para insertar y actualizar, convertimos la tupla a lista, le agregamos el miembro nuevo, y la reconvertimos a tupla + # insertar y actualizar, convertimos la tupla a lista, le agregamos el miembro nuevo, y la reconvertimos a tupla print("Tupla convertida a lista para insertar y actualizar") list_from_tuple = list(this_is_a_tuple) list_from_tuple.append(5) @@ -103,14 +103,14 @@ def main(): this_is_a_tuple = tuple(list_from_tuple) print(this_is_a_tuple) - # Para ordenar la tupla, la convertimos a lista, usamos sort, y la reconvertimos a tupla tuple("nombre de la lista") + # ordenar la tupla, la convertimos a lista, usamos sort, y la reconvertimos a tupla tuple("nombre de la lista") unordered_tuple = (4,2,5,3,1) print(f"Tupla desordenada {unordered_tuple}") ordered_list = list(unordered_tuple) ordered_list.sort() unordered_tuple = tuple(ordered_list) print(f"Tupla Ordenada {unordered_tuple}") - # Para borrar la tuple usamos la palabra reservada del + # borrar la tuple usamos la palabra reservada del del this_is_a_tuple if __name__=="__main__": From edec4e9cac9a8cf07ef97675e50ccbfdcfd3eecf Mon Sep 17 00:00:00 2001 From: JesusWay69 HP elitebook Date: Mon, 23 Sep 2024 22:15:50 +0200 Subject: [PATCH 507/539] #38 - Python --- .../38 - MOUREDEV PRO/python/JesusWay69.py | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/python/JesusWay69.py diff --git a/Roadmap/38 - MOUREDEV PRO/python/JesusWay69.py b/Roadmap/38 - MOUREDEV PRO/python/JesusWay69.py new file mode 100644 index 0000000000..e3f10b9ba5 --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/JesusWay69.py @@ -0,0 +1,135 @@ +import os, platform, csv, random, time + +if (platform.platform().startswith("macOS") or platform.platform().startswith("Linux")): + os.system('clear') +else: + os.system('cls') + +""" * EJERCICIO: + * He presentado mi proyecto más importante del año: mouredev pro. + * Un campus para la comunidad, que lanzaré en octubre, donde estudiar + * programación de una manera diferente. + * Cualquier persona suscrita a la newsletter de https://mouredev.pro + * accederá a sorteos mensuales de suscripciones, regalos y descuentos. + * + * Desarrolla un programa que lea los registros de un fichero .csv y + * seleccione de manera aleatoria diferentes ganadores. + * Requisitos: + * 1. Crea un .csv con 3 columnas: id, email y status con valor "activo" + * o "inactivo" (y datos ficticios). + * Ejemplo: 1 | test@test.com | activo + * 2 | test2@test.com | inactivo + * (El .csv no debe subirse como parte de la corrección) + * 2. Recupera los datos desde el programa y selecciona email aleatorios. + * Acciones: + * 1. Accede al fichero .csv y selecciona de manera aleatoria un email + * ganador de una suscripción, otro ganador de un descuento y un último + * ganador de un libro (sólo si tiene status "activo" y no está repetido). + * 2. Muestra los emails ganadores y su id. + * 3. Ten en cuenta que la primera fila (con el nombre de las columnas) + * no debe tenerse en cuenta.""" + +my_file = "newsletter_users.csv" +columns = ['id', 'email', 'status'] +users = [{'id':1, 'email':'supermario@mouredev.com', 'status':'activo'}, + {'id':2, 'email':'darkvader@mouredev.com', 'status':'activo'}, + {'id':3, 'email':'pikachu@mouredev.com', 'status':'activo'}, + {'id':4, 'email':'joseluistorrente@mouredev.com', 'status':'activo'}, + {'id':5, 'email':'homersimpson@mouredev.com', 'status':'activo'}, + {'id':6, 'email':'mickeymouse@mouredev.com', 'status':'activo'}, + {'id':7, 'email':'sansastark@mouredev.com', 'status':'activo'}, + {'id':8, 'email':'fionagalagher@mouredev.com', 'status':'activo'}, + {'id':9, 'email':'michaelscott@mouredev.com', 'status':'activo'}, + {'id':10, 'email':'sheldoncooper@mouredev.com', 'status':'activo'}, + {'id':11, 'email':'spiderman@mouredev.com', 'status':'activo'}, + {'id':12, 'email':'walterwhite@mouredev.com', 'status':'activo'}, + {'id':13, 'email':'petergriffin@mouredev.com', 'status':'activo'}, + {'id':14, 'email':'rachelgreen@mouredev.com', 'status':'activo'}, + {'id':15, 'email':'jessicajones@mouredev.com', 'status':'activo'}, + {'id':16, 'email':'ricksanchez@mouredev.com', 'status':'activo'}, + {'id':17, 'email':'maxrockatansky@mouredev.com', 'status':'activo'}, + {'id':18, 'email':'hackerman@mouredev.com', 'status':'activo'}, + {'id':19, 'email':'elliotalderson@mouredev.com', 'status':'activo'}, + {'id':20, 'email':'jesusway69@mouredev.com', 'status':'activo'},] + +def create_csv(users_list:list): + with open(my_file, mode='w', newline='') as file: + writer = csv.DictWriter(file, delimiter = ';', fieldnames = columns ) + writer.writeheader() + for user in users_list: + writer.writerow(user) + + + +def read_dict_csv(): + with open(my_file) as file: + content_dict_csv = csv.DictReader(file, delimiter = ';') + for row in content_dict_csv: + print("ID:", '{:<4}'.format(row['id']), "Email:", '{:<30}'.format(row['email']), "Estado: ", row['status']) + content_dict_csv + print() + +def lottery()->list: + active_list = [] + with open(my_file) as file: + content_dict_csv = csv.DictReader(file, delimiter = ';') + content_list_csv = list(content_dict_csv) + for user in content_list_csv: + if user['status'] == 'activo': + active_list.append(dict(user)) + if len(active_list) < 3: + print("No quedan suficientes participantes para lanzar los 3 sorteos, fin del programa.") + return [] + return active_list + + +def menu(): + while True: + print("""\n1- Mostrar listado de participantes +2- Lanzar sorteo +3- Resetear toda la lista de participantes con estado activo +4- Salir""") + option = input("Elija entre estas 4 opciones -> ") + if not option.isdigit() or int(option) < 1 or int(option) > 4: + print("Sólo se pueden introducir números del 1 al 3") + elif option == '1': + read_dict_csv() + elif option == '2': + if len(lottery()) == 0: + break + subscription_winner = random.choice(lottery()) + print(f"\nEl ganador de la subscripción tiene el ID: {subscription_winner['id']} y su email es {subscription_winner['email']}") + subscription_winner['status'] = 'inactivo' + create_csv(list(lottery())) + time.sleep(1) + + discount_winner = random.choice(lottery()) + print(f"El ganador del descuento tiene el ID: {discount_winner['id']} y su email es {discount_winner['email']}") + discount_winner['status'] = 'inactivo' + create_csv(list(lottery())) + time.sleep(1) + + book_winner = random.choice(lottery()) + print(f"El ganador del libro tiene el ID: {book_winner['id']} y su email es {book_winner['email']}") + book_winner['status'] = 'inactivo' + create_csv(list(lottery())) + + elif option == '3': + create_csv(users) + else: + break +menu() + + + + + + + + + + + + + +#ejemplos: https://pywombat.com/articles/archivos-csv-python \ No newline at end of file From d38392cddbb21d3662cea64c10d8135622bf26df Mon Sep 17 00:00:00 2001 From: MohamedElderkaoui Date: Mon, 23 Sep 2024 23:01:30 +0200 Subject: [PATCH 508/539] #39 -java --- .../java/MohamedElderkaoui.java | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 Roadmap/39 - BATMAN DAY/java/MohamedElderkaoui.java diff --git a/Roadmap/39 - BATMAN DAY/java/MohamedElderkaoui.java b/Roadmap/39 - BATMAN DAY/java/MohamedElderkaoui.java new file mode 100644 index 0000000000..facfb7aa6e --- /dev/null +++ b/Roadmap/39 - BATMAN DAY/java/MohamedElderkaoui.java @@ -0,0 +1,107 @@ +import java.util.*; + +public class MohamedElderkaoui { + + public static void main(String[] args) { + // Challenge 1: Batman Day calculation until 100th anniversary using Calendar + int currentYear = 2024; + int batmanAge = 85; + System.out.println("Batman Day until 100th Anniversary:"); + calculateBatmanDayUsingCalendar(currentYear, batmanAge); + + // Challenge 2: Batcave Security System + System.out.println("\nBatcave Security System:"); + // Sample sensor data: (x, y, threat level) + List sensors = List.of( + new int[]{3, 3, 5}, + new int[]{4, 4, 8}, + new int[]{5, 5, 2}, + new int[]{10, 10, 9}, + new int[]{11, 11, 3}, + new int[]{12, 12, 7} + ); + batcaveSecuritySystem(sensors); + } + + // CHALLENGE 1: Calculate Batman Day until his 100th anniversary using Calendar + public static void calculateBatmanDayUsingCalendar(int currentYear, int batmanAge) { + int yearsLeft = 100 - batmanAge; + for (int i = 0; i <= yearsLeft; i++) { + int year = currentYear + i; + Calendar thirdSaturday = getThirdSaturdayOfSeptember(year); + System.out.printf("Batman Day in %d: %tF\n", year, thirdSaturday.getTime()); + } + } + + // Get the third Saturday of September using Calendar + private static Calendar getThirdSaturdayOfSeptember(int year) { + // Create a calendar instance set to September 1st of the given year + Calendar calendar = Calendar.getInstance(); + calendar.set(year, Calendar.SEPTEMBER, 1); + + // Find the first Saturday of September + while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY) { + calendar.add(Calendar.DAY_OF_MONTH, 1); + } + + // Move to the third Saturday + calendar.add(Calendar.DAY_OF_MONTH, 14); // Add 2 more weeks + + return calendar; + } + + // CHALLENGE 2: Batcave Security System + public static void batcaveSecuritySystem(List sensors) { + // 20x20 grid of Gotham + int[][] gothamGrid = new int[20][20]; + + // Fill the grid with the threat levels from the sensor data + for (int[] sensor : sensors) { + int x = sensor[0]; + int y = sensor[1]; + int threatLevel = sensor[2]; + gothamGrid[x][y] = threatLevel; + } + + int maxThreatSum = 0; + int centerX = 0, centerY = 0; + + // Find the 3x3 grid with the maximum threat level + for (int i = 0; i <= 17; i++) { + for (int j = 0; j <= 17; j++) { + int threatSum = calculateThreatSum(gothamGrid, i, j); + if (threatSum > maxThreatSum) { + maxThreatSum = threatSum; + centerX = i + 1; + centerY = j + 1; + } + } + } + + // Calculate the distance from Batcave (0, 0) to the center of the most threatened grid + int distanceToBatcave = Math.abs(centerX) + Math.abs(centerY); + + // Display the results + System.out.println("Most threatened 3x3 grid center: (" + centerX + ", " + centerY + ")"); + System.out.println("Sum of threats: " + maxThreatSum); + System.out.println("Distance to Batcave: " + distanceToBatcave); + + // Check if the security protocol should be activated + if (maxThreatSum > 20) { + System.out.println("Security Protocol Activated!"); + } else { + System.out.println("Security Protocol NOT Activated."); + } + } + + // Helper function to calculate the sum of threats in a 3x3 grid starting from (x, y) + private static int calculateThreatSum(int[][] grid, int x, int y) { + int sum = 0; + for (int i = x; i < x + 3; i++) { + for (int j = y; j < y + 3; j++) { + sum += grid[i][j]; + } + } + return sum; + } +} From 9f5614659809296ca5fd361e7e2f949c211dc9ac Mon Sep 17 00:00:00 2001 From: sarismejiasanchez Date: Mon, 23 Sep 2024 16:27:26 -0500 Subject: [PATCH 509/539] #05 - Python --- .../python/sarismejiasanchez.py | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/Roadmap/05 - VALOR Y REFERENCIA/python/sarismejiasanchez.py b/Roadmap/05 - VALOR Y REFERENCIA/python/sarismejiasanchez.py index 7631752c7a..fc6c936c47 100644 --- a/Roadmap/05 - VALOR Y REFERENCIA/python/sarismejiasanchez.py +++ b/Roadmap/05 - VALOR Y REFERENCIA/python/sarismejiasanchez.py @@ -22,7 +22,8 @@ # PASO POR REFERENCIA # Variables mutables (se comportan como si fueran "por referencia") -# Los tipos de datos mutables incluyen list, dict, set. Modificar una variable mutable afecta # a todas las referencias que apuntan a ese objeto. +# Los tipos de datos mutables incluyen list, dict, set. Modificar una variable mutable afecta +# a todas las referencias que apuntan a ese objeto. print("PASO POR REFERENCIA") # Variables mutables (listas) @@ -80,5 +81,39 @@ def modificar_lista(lista): * 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. */ +""" -""" \ No newline at end of file +print("\nEXTRA") +# POR VALOR +print("POR VALOR") +def values_exchange(value1, value2): + temp = value1 # Guarda temporalmente el valor de value1 + value1 = value2 # Asigna el valor de value2 a value1 + value2 = temp # Asigna el valor temporal (el original de value1) a value2 + return value1, value2 + +num1 = 10 +num2 = 15 +print(f"Valor original num1: {num1}") +print(f"Valor original num2: {num2}") + +inter_num1, inter_num2 = values_exchange(num1, num2) +print(f"Valor intercambio num1: {inter_num1}") +print(f"Valor intercambio num2: {inter_num2}") + +# POR REFERENCIA +print("\nPOR REFERENCIA") + +def reference_exchange(value1, value2): + # Intercambiar el contenido de los argumentos mutables + value1[:], value2[:] = value2[:], value1[:] # Asignación por slice para modificar in-place + return value1, value2 + + +numbers = [num for num in range(10) if num % 2 == 0] # Numeros pares entre 0 y 10 +fruits = ["naranja", "melon", "manzana"] # Lista de frutas +print(f"Valor original numbers: {numbers}") +print(f"Valor original fruits: {fruits}") +inter_value1, inter_value2 = reference_exchange(numbers, fruits) +print(f"Valor intercambio numbers: {inter_value1}") +print(f"Valor intercambio fruits: {inter_value2}") \ No newline at end of file From a2c43dad4d6a8ef33ca1a032cb49d01f9c23caf5 Mon Sep 17 00:00:00 2001 From: Fabio Date: Mon, 23 Sep 2024 18:34:27 -0300 Subject: [PATCH 510/539] #00 - Python --- .../python/Ipfabio.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Ipfabio.py diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Ipfabio.py b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Ipfabio.py new file mode 100644 index 0000000000..7d658aacbe --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/python/Ipfabio.py @@ -0,0 +1,23 @@ +# https://www.python.org/ + +""" +Esto es +un comentario +multilinea +""" + +''' +Esto también es +un comentario +multilinea +''' + +saludo = "Hola" +CONSTANTE = "Mi 'constante'" # No me cambies. + +my_int = 1 +my_float = 2.5 +my_bool = True +my_bool = False + +print(f'{saludo}, elijo Python') \ No newline at end of file From 2a299f054c856d787a9127cc235b4fd980693ceb Mon Sep 17 00:00:00 2001 From: sarismejiasanchez Date: Mon, 23 Sep 2024 17:36:28 -0500 Subject: [PATCH 511/539] #06 - Python~ --- .../python/sarismejiasanchez.py | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Roadmap/06 - RECURSIVIDAD/python/sarismejiasanchez.py diff --git a/Roadmap/06 - RECURSIVIDAD/python/sarismejiasanchez.py b/Roadmap/06 - RECURSIVIDAD/python/sarismejiasanchez.py new file mode 100644 index 0000000000..b6240bc934 --- /dev/null +++ b/Roadmap/06 - RECURSIVIDAD/python/sarismejiasanchez.py @@ -0,0 +1,71 @@ +# #06 RECURSIVIDAD + +""" +* EJERCICIO: +* Entiende el concepto de recursividad creando una función recursiva que imprima +* números del 100 al 0. +""" + +""" +La recursividad es una técnica de programación donde una función se llama a sí misma para resolver un problema. En cada llamada, se trabaja con una versión reducida del problema hasta alcanzar una condición base, que detiene la recursión. + +Cualquier función recursiva tiene dos secciones de código claramente divididas: + +Por un lado tenemos la sección en la que la función se llama a sí misma. +Por otro lado, tiene que existir siempre una condición en la que la función retorna sin volver a llamarse. Es muy importante porque de lo contrario, la función se llamaría de manera indefinida. +""" + +print("Números del 100 al 0") + +def print_numbers(n): + # Condición base: si n es menor que 0, detenemos la recursión + if n < 0: + return # Termina la ejecución + # Imprimimos el número actual + print(n) + # Llamamos recursivamente a la función con n - 1 + print_numbers(n - 1) + +# Llamamos a la función con 100 como punto de partida +print_numbers(100) + +""" +* DIFICULTAD EXTRA (opcional): + * Utiliza el concepto de recursividad para: + * - Calcular el factorial de un número concreto (la función recibe ese número). + * - Calcular el valor de un elemento concreto (según su posición) en la + * sucesión de Fibonacci (la función recibe la posición). +""" +print("\nDIFICULTAD EXTRA") + +print("\nFactorial de un número") + +def factorial(n): + # Condición base: si n es igual a 1, detenemos la recursión + # n! = 1 si n = 1 + if n == 1: + return 1# Termina la ejecución + # Llamada recursiva + else: + # n! = n * (n-1)! si n > 1 + return n * factorial(n - 1) + +n = 5 +print(f"El factorial de {n} es: {factorial(n)}") + +print("\nCalcular el valor de un elemento concreto (según su posición) en la sucesión de Fibonacci") + +# Dicha serie calcula el elemento n sumando los dos anteriores n - 1 + n - 2 +# Se asume que los dos primeros elementos son 0 y 1. +def fibonacci(n): + # Condicion base + if n == 0: + return 0 + elif n == 1: + return 1 + else: + return fibonacci(n - 1) + fibonacci(n - 2) + +# 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 +n = 7 +print(f"El valor del elemento {n} en la serie fibonacci es: {fibonacci(7)}") \ No newline at end of file From dc5517c64190716d06fa8eecc5f55753027ef41c Mon Sep 17 00:00:00 2001 From: SooHav Date: Mon, 23 Sep 2024 20:04:36 -0300 Subject: [PATCH 512/539] #38 - python --- .../python/SooHav.py | 0 Roadmap/38 - MOUREDEV PRO/python/SooHav.py | 90 +++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 Roadmap/37 - OASIS VS LINKIN PARK/python/SooHav.py create mode 100644 Roadmap/38 - MOUREDEV PRO/python/SooHav.py diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/SooHav.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/SooHav.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Roadmap/38 - MOUREDEV PRO/python/SooHav.py b/Roadmap/38 - MOUREDEV PRO/python/SooHav.py new file mode 100644 index 0000000000..31c877c38b --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/python/SooHav.py @@ -0,0 +1,90 @@ +# 38 MOUREDEV PRO +import csv +import os +import random + +# Ruta al directorio +directorio = os.path.join("sofiah", "documentos", "temporal", "datos") + + +# Crea el directorio si no existe +if not os.path.exists(directorio): + os.makedirs(directorio) + +# Nombre del archivo +nombre_archivo = "fichero.csv" + +# Ruta completa del archivo +ruta_archivo = os.path.join(directorio, nombre_archivo) + +# Datos a escribir en el archivo +datos_usuario = [ + { + 'id': 1, + 'email': 'soo@gmail.com', + 'estatus': 'Activo' + }, + { + 'id': 2, + 'email': 'pepe@gmail.com', + 'estatus': 'Activo' + }, + { + 'id': 3, + 'email': 'juani@gmail.com', + 'estatus': 'Inactivo' + }, + { + 'id': 4, + 'email': 'luquitas@gmail.com', + 'estatus': 'Activo' + }, + { + 'id': 5, + 'email': 'nico@gmail.com', + 'estatus': 'Inactivo' + }, + { + 'id': 6, + 'email': 'alma@gmail.com', + 'estatus': 'Activo' + }, +] + +# Nombre de las columnas +columnas = ['id', 'email', 'estatus'] + +# Crea el fichero +with open(ruta_archivo, mode='w', newline='') as file: + documento = csv.DictWriter(file, delimiter=',', fieldnames=columnas) + documento.writeheader() + for dato in datos_usuario: + documento.writerow(dato) + +print(f"Archivo guardado en: {ruta_archivo}") + +# Lista para guardar la información +info = [] + +# Lectura de fichero +with open(ruta_archivo, mode='r', newline='') as file: + documento = csv.DictReader(file, delimiter=',') + for fila in documento: + info.append([fila['id'], fila['email'], fila['estatus']]) + +# Usuarios con estatus 'Activo' +activos = [usuario for usuario in info if usuario[2] == 'Activo'] + +# Lista filtrada +print("Usuarios activos:", activos) + +# Selección aleatoria de 3 usuarios activos sin repetición +if len(activos) >= 3: + ganador1, ganador2, ganador3 = random.sample(activos, 3) + + # Imprimir los ganadores + print(f"ID ganador de la suscripción: {ganador1[0]} email: {ganador1[1]}") + print(f"ID ganador del descuento: {ganador2[0]} email: {ganador2[1]}") + print(f"ID ganador del libro: {ganador3[0]} email: {ganador3[1]}") +else: + print("No hay suficientes usuarios activos para realizar el sorteo.") From eb77bbc9d174fefdb9c1108e80d6c020651fd033 Mon Sep 17 00:00:00 2001 From: SooHav Date: Mon, 23 Sep 2024 20:11:09 -0300 Subject: [PATCH 513/539] #38 - python --- .../python/SooHav.py | 162 ++++++++++++++++++ 1 file changed, 162 insertions(+) diff --git a/Roadmap/37 - OASIS VS LINKIN PARK/python/SooHav.py b/Roadmap/37 - OASIS VS LINKIN PARK/python/SooHav.py index e69de29bb2..a7f7b2b13a 100644 --- a/Roadmap/37 - OASIS VS LINKIN PARK/python/SooHav.py +++ b/Roadmap/37 - OASIS VS LINKIN PARK/python/SooHav.py @@ -0,0 +1,162 @@ +# 37 - OASIS VS LINKIN PARK + +import pandas as pd +import spotipy +from spotipy.oauth2 import SpotifyOAuth +import os +from dotenv import load_dotenv + +# Datos de la aplicación +load_dotenv() + +# Obtener los valores del entorno +CLIENT_ID = os.getenv("CLIENT_ID") +CLIENT_SECRET = os.getenv("CLIENT_SECRET") +REDIRECT_URI = os.getenv("REDIRECT_URI") +scope = os.getenv("scope") + +sp = spotipy.Spotify(auth_manager=SpotifyOAuth(client_id=CLIENT_ID, + client_secret=CLIENT_SECRET, + redirect_uri=REDIRECT_URI, + scope=scope)) + +# Clase para buscar información sobre artistas + + +class SpotifyAPI: + def __init__(self, sp): + """Inicializa la clase con una instancia autenticada de Spotify.""" + self.sp = sp + + def buscar_artista(self, nombre_artista): + """Busca un artista por endpoint: search.""" + resultados = self.sp.search(q=nombre_artista, type='artist') + if resultados['artists']['items']: + return resultados['artists']['items'][0] + return None + + def obtener_info_artista(self, artist_id): + """Obtiene información detallada de un artista por endpoint: artist.""" + return self.sp.artist(artist_id) + + def obtener_top_tracks(self, artist_uri): + """Obtiene las canciones más populares por endpoint: artist_top_tracks.""" + top_tracks = self.sp.artist_top_tracks(artist_uri) + return top_tracks['tracks'] + + def comparar_artistas(self, artist_id1, artist_id2): + """Compara dos artistas y devuelve un DataFrame.""" + # Buscar artistas + artista_1_data = self.obtener_info_artista(artist_id1) + artista_2_data = self.obtener_info_artista(artist_id2) + popularidad_artista1 = artista_1_data['popularity'] + popularidad_artista2 = artista_2_data['popularity'] + seguidores_artista1 = artista_1_data['followers']['total'] + seguidores_artista2 = artista_2_data['followers']['total'] + + if not artista_1_data or not artista_2_data: + return None + + data = { + "Nombre": [artista_1_data['name'], artista_2_data['name']], + "Géneros": [", ".join(artista_1_data['genres']), ", ".join(artista_2_data['genres'])], + "Popularidad": [artista_1_data['popularity'], artista_2_data['popularity']], + "Seguidores": [artista_1_data['followers']['total'], artista_2_data['followers']['total']] + } + + df = pd.DataFrame(data) + + # Determinar cuál es más exitoso + if popularidad_artista1 > popularidad_artista2: + mensaje = f"{artista_1_data['name']} es más popular." + elif popularidad_artista2 > popularidad_artista1: + mensaje = f"{artista_2_data['name']} es más popular." + else: + mensaje = f"Ambos artistas tienen la misma popularidad." + print(mensaje) + + if seguidores_artista1 > seguidores_artista2: + mensaje = f"{artista_1_data['name']} tiene mas seguidores." + elif seguidores_artista2 > seguidores_artista1: + mensaje = f"{artista_2_data['name']} tiene mas seguidores." + else: + mensaje = f"Ambos artistas tienen la misma cantidad de seguidores." + print(mensaje) + print() + return df + + def comparar_top_tracks(self, artista_id1, artista_id2, num_tracks=1): + """Compara los tracks más populares de dos artistas.""" + + # Buscar artistas + artista_1 = self.obtener_info_artista(artista_id1) + artista_2 = self.obtener_info_artista(artista_id2) + nombre_real_artista1 = artista_1['name'] + nombre_real_artista2 = artista_2['name'] + + if not artista_1 or not artista_2: + return None + + # Obtener los top tracks de cada artista + top_tracks_artista1 = self.obtener_top_tracks(artista_1['uri'])[ + :num_tracks] + top_tracks_artista2 = self.obtener_top_tracks(artista_2['uri'])[ + :num_tracks] + + cancion_mas_popular_artista1 = max( + top_tracks_artista1, key=lambda x: x['popularity']) + cancion_mas_popular_artista2 = max( + top_tracks_artista2, key=lambda x: x['popularity']) + + # DataFrame + data = { + "Artista": [nombre_real_artista1, nombre_real_artista2], + "Tema": [cancion_mas_popular_artista1['name'], cancion_mas_popular_artista2['name']], + "Popularidad": [cancion_mas_popular_artista1['popularity'], cancion_mas_popular_artista2['popularity']] + } + + df = pd.DataFrame(data) + + # Artista más popular + if cancion_mas_popular_artista1['popularity'] > cancion_mas_popular_artista2['popularity']: + artista_mas_popular = nombre_real_artista1 + mensaje = f"{artista_mas_popular} tiene una canción más popular." + else: + artista_mas_popular = nombre_real_artista2 + mensaje = f"{artista_mas_popular} tiene una canción más popular." + print(mensaje) + print() + + return df + + +# Uso del codigo + +sp_api = SpotifyAPI(sp) +print("Bandas de ayer, hoy y siempre:") +print("Hoy comparamos ...") +artista_nombre = "Oasis" +artista = sp_api.buscar_artista(artista_nombre) +artista_id_1 = artista['id'] +print(artista['name']) + +artista_nombre = "Linkin Park" +artista = sp_api.buscar_artista(artista_nombre) +artista_id_2 = artista['id'] +print(artista['name']) +print("De los dos concluimos que ...") + +# Comparar dos artistas +df_comparacion = sp_api.comparar_artistas(artista_id_1, artista_id_2) +if df_comparacion is not None: + print(df_comparacion) +else: + print("Uno o ambos artistas no fueron encontrados.") +print() + +# Comparar los track de dos artistas +df_comparacion = sp_api.comparar_top_tracks(artista_id_1, artista_id_2) +if df_comparacion is not None: + print(df_comparacion) +else: + print("Uno o ambos artistas no fueron encontrados.") From 44ccd5fcb0047ac886917bd189f76e8e886a1bcd Mon Sep 17 00:00:00 2001 From: Rafa Canosa Date: Tue, 24 Sep 2024 01:24:08 +0200 Subject: [PATCH 514/539] created --- .../38 - MOUREDEV PRO/javascript/Rafacv23.js | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Roadmap/38 - MOUREDEV PRO/javascript/Rafacv23.js diff --git a/Roadmap/38 - MOUREDEV PRO/javascript/Rafacv23.js b/Roadmap/38 - MOUREDEV PRO/javascript/Rafacv23.js new file mode 100644 index 0000000000..6c3696112f --- /dev/null +++ b/Roadmap/38 - MOUREDEV PRO/javascript/Rafacv23.js @@ -0,0 +1,53 @@ +const fs = require("fs") //importamos libreria nativa de node para leer archivos del sistema +const readline = require("readline") + +// utilizamos el método readFile para obtener la información del .csv + +const stream = fs.createReadStream("./usuarios.csv") + +const reader = readline.createInterface({ input: stream }) + +let data = [] +let isFirstLine = true + +// función para coger un item random del array de usuarios +function getRandomItem(exclude = []) { + let item + do { + item = data[Math.floor(Math.random() * data.length)] + } while (exclude.includes(item)) //buscamos otro ganador si el usuario previo ya ha sido premiado + return item +} + +reader.on("line", (row) => { + if (isFirstLine) { + isFirstLine = false + return // salimos del evento linea ya que no queremos procesar la primera línea (cabecera) del CSV. + } + + const columns = row.split(",") + const status = columns[2].trim() //cogemos el valor de columna status + + // solo añadimos al "sorteo" a los usuarios con el status === activo + if (status === "activo") { + data.push(columns) + } +}) + +reader.on("close", () => { + // manejo de errores por si no hubiese suficientes usuarios + + if (data.length === 0) { + console.log("No hay usuarios activos disponibles para seleccionar.") + return + } + + const suscriptionWinner = getRandomItem() // Elegimos el primer ganador + console.log(`${suscriptionWinner} es el ganador de una suscripción`) + + const discountWinner = getRandomItem([suscriptionWinner]) // Elegimos otro ganador distinto + console.log(`${discountWinner} es el ganador de un descuento`) + + const bookWinner = getRandomItem([suscriptionWinner, discountWinner]) // Elegimos un tercer ganador distinto + console.log(`${bookWinner} es el ganador de un libro`) +}) From 600bd1387033ae6789589893f24e0bd27b5c0db6 Mon Sep 17 00:00:00 2001 From: mouredev Date: Tue, 24 Sep 2024 00:15:43 +0000 Subject: [PATCH 515/539] Update stats --- Roadmap/stats.json | 2545 +++++++++++++++++++++++--------------------- 1 file changed, 1314 insertions(+), 1231 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index a7ae1c7414..1000cbf66c 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,23 +1,23 @@ { - "challenges_total": 39, + "challenges_total": 40, "languages_total": 48, - "files_total": 7210, - "users_total": 1202, + "files_total": 7270, + "users_total": 1215, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1301 + "count": 1316 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 790 + "count": 792 }, { "order": 3, "name": "02 - FUNCIONES Y ALCANCE", - "count": 601 + "count": 604 }, { "order": 4, @@ -37,7 +37,7 @@ { "order": 7, "name": "05 - VALOR Y REFERENCIA", - "count": 295 + "count": 296 }, { "order": 8, @@ -47,7 +47,7 @@ { "order": 9, "name": "08 - CLASES", - "count": 232 + "count": 236 }, { "order": 10, @@ -57,52 +57,52 @@ { "order": 11, "name": "10 - EXCEPCIONES", - "count": 186 + "count": 187 }, { "order": 12, "name": "11 - MANEJO DE FICHEROS", - "count": 160 + "count": 162 }, { "order": 13, - "name": "14 - FECHAS", - "count": 133 + "name": "13 - PRUEBAS UNITARIAS", + "count": 134 }, { "order": 14, - "name": "13 - PRUEBAS UNITARIAS", - "count": 132 + "name": "14 - FECHAS", + "count": 134 }, { "order": 15, "name": "12 - JSON Y XML", - "count": 131 + "count": 133 }, { "order": 16, "name": "16 - EXPRESIONES REGULARES", - "count": 129 + "count": 132 }, { "order": 17, "name": "15 - ASINCRON\u00cdA", - "count": 127 + "count": 128 }, { "order": 18, "name": "17 - ITERACIONES", - "count": 118 + "count": 121 }, { "order": 19, "name": "18 - CONJUNTOS", - "count": 115 + "count": 116 }, { "order": 20, "name": "19 - ENUMERACIONES", - "count": 103 + "count": 104 }, { "order": 21, @@ -147,12 +147,12 @@ { "order": 29, "name": "28 - SOLID LSP", - "count": 58 + "count": 60 }, { "order": 30, "name": "29 - SOLID ISP", - "count": 55 + "count": 56 }, { "order": 31, @@ -172,118 +172,123 @@ { "order": 34, "name": "31 - SIMULADOR JUEGOS OL\u00cdMPICOS", - "count": 42 + "count": 43 }, { "order": 35, "name": "36 - EL SOMBRERO SELECCIONADOR", - "count": 42 + "count": 43 }, { "order": 36, "name": "35 - REPARTIENDO LOS ANILLOS DE PODER", - "count": 41 + "count": 42 }, { "order": 37, + "name": "38 - MOUREDEV PRO", + "count": 38 + }, + { + "order": 38, "name": "34 - \u00c1RBOL GENEAL\u00d3GICO LA CASA DEL DRAG\u00d3N", "count": 36 }, { - "order": 38, + "order": 39, "name": "37 - OASIS VS LINKIN PARK", "count": 35 }, { - "order": 39, - "name": "38 - MOUREDEV PRO", - "count": 27 + "order": 40, + "name": "39 - BATMAN DAY", + "count": 1 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 3111, - "percentage": 43.15 + "count": 3141, + "percentage": 43.2 }, { "order": 2, "name": "javascript", - "count": 1414, - "percentage": 19.61 + "count": 1422, + "percentage": 19.56 }, { "order": 3, "name": "java", - "count": 668, - "percentage": 9.26 + "count": 679, + "percentage": 9.34 }, { "order": 4, "name": "typescript", - "count": 325, - "percentage": 4.51 + "count": 327, + "percentage": 4.5 }, { "order": 5, "name": "c#", "count": 260, - "percentage": 3.61 + "percentage": 3.58 }, { "order": 6, "name": "kotlin", "count": 222, - "percentage": 3.08 + "percentage": 3.05 }, { "order": 7, "name": "go", "count": 219, - "percentage": 3.04 + "percentage": 3.01 }, { "order": 8, "name": "swift", "count": 167, - "percentage": 2.32 + "percentage": 2.3 }, { "order": 9, "name": "php", - "count": 163, - "percentage": 2.26 + "count": 165, + "percentage": 2.27 }, { "order": 10, "name": "c++", - "count": 118, - "percentage": 1.64 + "count": 122, + "percentage": 1.68 }, { "order": 11, "name": "rust", "count": 115, - "percentage": 1.6 + "percentage": 1.58 }, { "order": 12, "name": "c", - "count": 72, + "count": 73, "percentage": 1.0 }, { "order": 13, "name": "dart", "count": 49, - "percentage": 0.68 + "percentage": 0.67 }, { "order": 14, "name": "bash", - "count": 44, - "percentage": 0.61 + "count": 45, + "percentage": 0.62 }, { "order": 15, @@ -329,13 +334,13 @@ }, { "order": 22, - "name": "nasm", - "count": 11, - "percentage": 0.15 + "name": "cobol", + "count": 12, + "percentage": 0.17 }, { "order": 23, - "name": "cobol", + "name": "nasm", "count": 11, "percentage": 0.15 }, @@ -529,21 +534,21 @@ }, { "order": 7, - "name": "achapeton", - "count": 72, - "languages": 3 + "name": "eulogioep", + "count": 75, + "languages": 6 }, { "order": 8, - "name": "nlarrea", + "name": "achapeton", "count": 72, "languages": 3 }, { "order": 9, - "name": "eulogioep", - "count": 71, - "languages": 6 + "name": "nlarrea", + "count": 72, + "languages": 3 }, { "order": 10, @@ -578,7 +583,7 @@ { "order": 15, "name": "jesusantonioeescamilla", - "count": 58, + "count": 59, "languages": 3 }, { @@ -625,21 +630,21 @@ }, { "order": 23, - "name": "garos01", + "name": "santyjl", "count": 44, - "languages": 2 + "languages": 3 }, { "order": 24, - "name": "aldroide", - "count": 42, - "languages": 4 + "name": "garos01", + "count": 44, + "languages": 2 }, { "order": 25, - "name": "santyjl", + "name": "aldroide", "count": 42, - "languages": 3 + "languages": 4 }, { "order": 26, @@ -673,80 +678,80 @@ }, { "order": 31, - "name": "alexdevrep", - "count": 38, - "languages": 3 + "name": "mouredev", + "count": 39, + "languages": 1 }, { "order": 32, - "name": "emmanuelmmontesinos", - "count": 38, + "name": "asjordi", + "count": 39, "languages": 1 }, { "order": 33, - "name": "mouredev", + "name": "alexdevrep", "count": 38, - "languages": 1 + "languages": 3 }, { "order": 34, - "name": "asjordi", + "name": "emmanuelmmontesinos", "count": 38, "languages": 1 }, { "order": 35, + "name": "rauldoezon", + "count": 38, + "languages": 1 + }, + { + "order": 36, "name": "qv1ko", "count": 37, "languages": 4 }, { - "order": 36, + "order": 37, "name": "raynerpv2022", "count": 37, "languages": 2 }, { - "order": 37, + "order": 38, "name": "luishendrix92", "count": 37, "languages": 2 }, { - "order": 38, + "order": 39, "name": "soohav", "count": 37, "languages": 1 }, { - "order": 39, - "name": "rauldoezon", + "order": 40, + "name": "rigo93acosta", "count": 37, "languages": 1 }, { - "order": 40, + "order": 41, "name": "n0hagonada", "count": 36, "languages": 3 }, - { - "order": 41, - "name": "avcenal", - "count": 36, - "languages": 1 - }, { "order": 42, - "name": "rigo93acosta", + "name": "fborjalv", "count": 36, "languages": 1 }, { "order": 43, - "name": "fborjalv", - "count": 35, + "name": "avcenal", + "count": 36, "languages": 1 }, { @@ -799,124 +804,124 @@ }, { "order": 52, - "name": "marcode24", - "count": 30, + "name": "zetared92", + "count": 31, "languages": 3 }, { "order": 53, "name": "alanshakir", - "count": 30, + "count": 31, "languages": 1 }, { "order": 54, + "name": "marcode24", + "count": 30, + "languages": 3 + }, + { + "order": 55, "name": "any7dev", "count": 29, "languages": 2 }, { - "order": 55, + "order": 56, + "name": "parababire", + "count": 29, + "languages": 1 + }, + { + "order": 57, "name": "simonguzman", "count": 29, "languages": 1 }, { - "order": 56, + "order": 58, "name": "bernatcs", "count": 28, "languages": 2 }, { - "order": 57, - "name": "parababire", - "count": 28, - "languages": 1 - }, - { - "order": 58, + "order": 59, "name": "thegera4", "count": 27, "languages": 2 }, { - "order": 59, + "order": 60, "name": "lucasrebuffo", "count": 27, "languages": 1 }, { - "order": 60, + "order": 61, "name": "isilanes", "count": 27, "languages": 1 }, { - "order": 61, + "order": 62, "name": "isaacus98", "count": 26, "languages": 4 }, { - "order": 62, + "order": 63, "name": "nightblockchain30", "count": 26, "languages": 2 }, { - "order": 63, + "order": 64, "name": "caverobrandon", "count": 26, "languages": 1 }, { - "order": 64, + "order": 65, "name": "ggilperez", "count": 26, "languages": 1 }, { - "order": 65, + "order": 66, "name": "monicavaquerano", "count": 25, "languages": 2 }, { - "order": 66, + "order": 67, "name": "allbertomd", "count": 25, "languages": 1 }, { - "order": 67, + "order": 68, "name": "fedeairala", "count": 24, "languages": 1 }, { - "order": 68, + "order": 69, "name": "deyvid-10", "count": 24, "languages": 1 }, { - "order": 69, + "order": 70, "name": "victoriaparraf", "count": 24, "languages": 1 }, { - "order": 70, + "order": 71, "name": "jamerrq", "count": 24, "languages": 1 }, - { - "order": 71, - "name": "zetared92", - "count": 23, - "languages": 3 - }, { "order": 72, "name": "juandaw37", @@ -967,157 +972,157 @@ }, { "order": 80, + "name": "martinbohorquez", + "count": 21, + "languages": 2 + }, + { + "order": 81, "name": "restevean", "count": 21, "languages": 1 }, { - "order": 81, + "order": 82, "name": "davidmoralesdeveloper", "count": 21, "languages": 1 }, { - "order": 82, + "order": 83, "name": "igledev", "count": 21, "languages": 1 }, { - "order": 83, + "order": 84, "name": "gringoam", "count": 21, "languages": 1 }, { - "order": 84, + "order": 85, "name": "chartypes", "count": 19, "languages": 2 }, { - "order": 85, + "order": 86, "name": "sorubadguy", "count": 19, "languages": 1 }, { - "order": 86, + "order": 87, "name": "yenneralayon142", "count": 19, "languages": 1 }, { - "order": 87, + "order": 88, "name": "saezmd", "count": 19, "languages": 1 }, { - "order": 88, + "order": 89, "name": "trufoplus", "count": 19, "languages": 1 }, { - "order": 89, + "order": 90, "name": "pguillo02", "count": 18, "languages": 5 }, { - "order": 90, + "order": 91, "name": "estuardodev", "count": 18, "languages": 4 }, { - "order": 91, + "order": 92, + "name": "danielhdzr", + "count": 18, + "languages": 1 + }, + { + "order": 93, "name": "lumanet", "count": 18, "languages": 1 }, { - "order": 92, + "order": 94, "name": "mvidalb", "count": 18, "languages": 1 }, { - "order": 93, + "order": 95, "name": "mensius87", "count": 17, "languages": 4 }, { - "order": 94, + "order": 96, "name": "kevined11", "count": 17, "languages": 3 }, { - "order": 95, + "order": 97, "name": "saicobys", "count": 17, "languages": 2 }, { - "order": 96, - "name": "martinbohorquez", - "count": 17, - "languages": 2 - }, - { - "order": 97, + "order": 98, "name": "raulfauli", "count": 17, "languages": 2 }, { - "order": 98, + "order": 99, "name": "hyromy", "count": 17, "languages": 1 }, { - "order": 99, + "order": 100, "name": "andreavzqz", "count": 17, "languages": 1 }, { - "order": 100, + "order": 101, "name": "rxvlc", "count": 16, "languages": 3 }, { - "order": 101, + "order": 102, "name": "mariovelascodev", "count": 16, "languages": 2 }, { - "order": 102, + "order": 103, "name": "sergiogi99", "count": 16, "languages": 2 }, { - "order": 103, + "order": 104, "name": "tofedev", "count": 16, "languages": 2 }, - { - "order": 104, - "name": "oniricoh", - "count": 16, - "languages": 1 - }, { "order": 105, - "name": "danielhdzr", + "name": "oniricoh", "count": 16, "languages": 1 }, @@ -1249,373 +1254,373 @@ }, { "order": 127, - "name": "manjaitan", + "name": "a-mayans", "count": 13, "languages": 2 }, { "order": 128, - "name": "javierfiestasbotella", + "name": "manjaitan", "count": 13, - "languages": 1 + "languages": 2 }, { "order": 129, - "name": "neosv", + "name": "d1d4cum", "count": 13, - "languages": 1 + "languages": 2 }, { "order": 130, - "name": "c-gabs", + "name": "javierfiestasbotella", "count": 13, "languages": 1 }, { "order": 131, - "name": "tomu98", + "name": "neosv", "count": 13, "languages": 1 }, { "order": 132, - "name": "7r0n1x", + "name": "c-gabs", "count": 13, "languages": 1 }, { "order": 133, - "name": "ocram1304", + "name": "tomu98", "count": 13, "languages": 1 }, { "order": 134, - "name": "dan-corbo", + "name": "7r0n1x", "count": 13, "languages": 1 }, { "order": 135, - "name": "julian98789", + "name": "ocram1304", "count": 13, "languages": 1 }, { "order": 136, - "name": "jav-mol", + "name": "dan-corbo", "count": 13, "languages": 1 }, { "order": 137, - "name": "andresmcardenas", - "count": 12, - "languages": 2 + "name": "julian98789", + "count": 13, + "languages": 1 }, { "order": 138, - "name": "juanrcoder", - "count": 12, - "languages": 2 + "name": "jav-mol", + "count": 13, + "languages": 1 }, { "order": 139, - "name": "a-mayans", + "name": "h4ckxel", "count": 12, - "languages": 2 + "languages": 3 }, { "order": 140, - "name": "keltoi-dev", + "name": "andresmcardenas", "count": 12, "languages": 2 }, { "order": 141, - "name": "d1d4cum", + "name": "juanrcoder", "count": 12, "languages": 2 }, { "order": 142, + "name": "keltoi-dev", + "count": 12, + "languages": 2 + }, + { + "order": 143, "name": "pipe281", "count": 12, "languages": 1 }, { - "order": 143, + "order": 144, "name": "dataciriano", "count": 12, "languages": 1 }, { - "order": 144, + "order": 145, "name": "josealberto13", "count": 12, "languages": 1 }, { - "order": 145, + "order": 146, "name": "evilpotato04", "count": 12, "languages": 1 }, { - "order": 146, + "order": 147, "name": "clmiranda", "count": 12, "languages": 1 }, { - "order": 147, + "order": 148, "name": "nicoheguaburu", "count": 12, "languages": 1 }, { - "order": 148, + "order": 149, "name": "javierjoyera", "count": 12, "languages": 1 }, { - "order": 149, + "order": 150, "name": "pancratzia", "count": 12, "languages": 1 }, { - "order": 150, + "order": 151, "name": "jeronimocardu", "count": 12, "languages": 1 }, { - "order": 151, + "order": 152, "name": "andrewcodev", "count": 12, "languages": 1 }, { - "order": 152, + "order": 153, "name": "arkmiguel379", "count": 11, "languages": 2 }, { - "order": 153, + "order": 154, "name": "switchdays", "count": 11, "languages": 2 }, { - "order": 154, + "order": 155, "name": "jchavescaceres", "count": 11, "languages": 2 }, { - "order": 155, + "order": 156, "name": "majinka10", "count": 11, "languages": 1 }, { - "order": 156, + "order": 157, "name": "warclimb", "count": 11, "languages": 1 }, { - "order": 157, + "order": 158, "name": "59822", "count": 11, "languages": 1 }, { - "order": 158, + "order": 159, "name": "m1l0j05", "count": 11, "languages": 1 }, { - "order": 159, + "order": 160, "name": "alainmartz", "count": 11, "languages": 1 }, { - "order": 160, + "order": 161, "name": "mirandayuber", "count": 11, "languages": 1 }, { - "order": 161, + "order": 162, "name": "oleojake", "count": 11, "languages": 1 }, { - "order": 162, + "order": 163, "name": "charlerodriguez3", "count": 11, "languages": 1 }, { - "order": 163, + "order": 164, "name": "evanz2608", "count": 11, "languages": 1 }, { - "order": 164, + "order": 165, "name": "gustavogomez19", "count": 11, "languages": 1 }, { - "order": 165, + "order": 166, "name": "abelade", "count": 11, "languages": 1 }, { - "order": 166, + "order": 167, "name": "jeigar2", "count": 11, "languages": 1 }, { - "order": 167, + "order": 168, "name": "ialmontedr0", "count": 11, "languages": 1 }, { - "order": 168, + "order": 169, "name": "bertomp", "count": 10, "languages": 5 }, { - "order": 169, + "order": 170, "name": "othamae", "count": 10, "languages": 3 }, { - "order": 170, + "order": 171, "name": "m-doce", "count": 10, "languages": 2 }, { - "order": 171, + "order": 172, "name": "rianojnicolas", "count": 10, "languages": 2 }, { - "order": 172, + "order": 173, "name": "vixxtory", "count": 10, "languages": 2 }, { - "order": 173, + "order": 174, "name": "marcose-ferretoe", "count": 10, "languages": 1 }, { - "order": 174, + "order": 175, "name": "josecox13", "count": 10, "languages": 1 }, { - "order": 175, + "order": 176, "name": "littlemabbit", "count": 10, "languages": 1 }, { - "order": 176, + "order": 177, "name": "thonys07", "count": 10, "languages": 1 }, { - "order": 177, + "order": 178, "name": "k-90", "count": 10, "languages": 1 }, { - "order": 178, + "order": 179, "name": "daparradom", "count": 10, "languages": 1 }, { - "order": 179, + "order": 180, "name": "xemita007", "count": 10, "languages": 1 }, { - "order": 180, + "order": 181, "name": "popmaquin", "count": 10, "languages": 1 }, { - "order": 181, + "order": 182, "name": "glitzypanic", "count": 10, "languages": 1 }, { - "order": 182, + "order": 183, "name": "natalyjoanna", "count": 10, "languages": 1 }, { - "order": 183, + "order": 184, "name": "kleyner098", "count": 10, "languages": 1 }, { - "order": 184, + "order": 185, "name": "mauricio-leyva", "count": 10, "languages": 1 }, { - "order": 185, + "order": 186, "name": "teren91", "count": 10, "languages": 1 }, { - "order": 186, + "order": 187, "name": "julianbuitragocharry-dev", "count": 9, "languages": 3 }, - { - "order": 187, - "name": "luisolivaresj", - "count": 9, - "languages": 2 - }, { "order": 188, - "name": "h4ckxel", + "name": "luisolivaresj", "count": 9, "languages": 2 }, @@ -1885,451 +1890,451 @@ }, { "order": 233, - "name": "hectordbh", + "name": "mohamedelderkaoui", "count": 7, "languages": 1 }, { "order": 234, - "name": "glossypath", + "name": "hectordbh", "count": 7, "languages": 1 }, { "order": 235, + "name": "glossypath", + "count": 7, + "languages": 1 + }, + { + "order": 236, "name": "fidelysla", "count": 6, "languages": 3 }, { - "order": 236, + "order": 237, "name": "curtobrull", "count": 6, "languages": 3 }, { - "order": 237, + "order": 238, "name": "luisk0706", "count": 6, "languages": 2 }, { - "order": 238, + "order": 239, "name": "luterfloyd", "count": 6, "languages": 2 }, { - "order": 239, + "order": 240, "name": "danilo0203", "count": 6, "languages": 2 }, { - "order": 240, + "order": 241, "name": "rserradev", "count": 6, "languages": 2 }, { - "order": 241, + "order": 242, "name": "kronstadt-lambda", "count": 6, "languages": 2 }, { - "order": 242, + "order": 243, "name": "isaias-alt", "count": 6, "languages": 2 }, { - "order": 243, + "order": 244, "name": "oixild", "count": 6, "languages": 2 }, { - "order": 244, + "order": 245, "name": "adrs1166ma", "count": 6, "languages": 2 }, { - "order": 245, + "order": 246, "name": "troleomotor10", "count": 6, "languages": 2 }, { - "order": 246, + "order": 247, "name": "devknn", "count": 6, "languages": 2 }, { - "order": 247, + "order": 248, "name": "roswer13", "count": 6, "languages": 2 }, { - "order": 248, + "order": 249, "name": "blancowilson", "count": 6, "languages": 1 }, { - "order": 249, + "order": 250, "name": "eamartin96", "count": 6, "languages": 1 }, { - "order": 250, + "order": 251, "name": "eduhumanes91", "count": 6, "languages": 1 }, { - "order": 251, + "order": 252, "name": "lazar171717ech", "count": 6, "languages": 1 }, { - "order": 252, + "order": 253, "name": "abascal92", "count": 6, "languages": 1 }, { - "order": 253, + "order": 254, "name": "facundo-muoio", "count": 6, "languages": 1 }, { - "order": 254, + "order": 255, "name": "wolffcode", "count": 6, "languages": 1 }, { - "order": 255, + "order": 256, "name": "dannymarperone", "count": 6, "languages": 1 }, { - "order": 256, + "order": 257, "name": "guillemduno", "count": 6, "languages": 1 }, { - "order": 257, + "order": 258, "name": "mxtrar23", "count": 6, "languages": 1 }, { - "order": 258, + "order": 259, "name": "yeisonagm", "count": 6, "languages": 1 }, { - "order": 259, + "order": 260, "name": "gliadev", "count": 6, "languages": 1 }, { - "order": 260, + "order": 261, "name": "dafi02", "count": 6, "languages": 1 }, { - "order": 261, + "order": 262, "name": "elbarbero", "count": 6, "languages": 1 }, { - "order": 262, + "order": 263, "name": "bryan112094", "count": 5, "languages": 3 }, { - "order": 263, + "order": 264, "name": "alabacw74", "count": 5, "languages": 3 }, { - "order": 264, + "order": 265, "name": "espinoleandroo", "count": 5, "languages": 2 }, { - "order": 265, + "order": 266, "name": "vmatmarco", "count": 5, "languages": 2 }, { - "order": 266, + "order": 267, "name": "andresmendozaf", "count": 5, "languages": 2 }, { - "order": 267, + "order": 268, "name": "icedrek", "count": 5, "languages": 2 }, { - "order": 268, + "order": 269, "name": "jalivur", "count": 5, "languages": 2 }, { - "order": 269, + "order": 270, "name": "alejandrodave", "count": 5, "languages": 2 }, { - "order": 270, + "order": 271, "name": "d0ubt0", "count": 5, "languages": 1 }, { - "order": 271, + "order": 272, "name": "yharyarias", "count": 5, "languages": 1 }, { - "order": 272, + "order": 273, "name": "jorgeadamowicz", "count": 5, "languages": 1 }, { - "order": 273, + "order": 274, "name": "zakkdrte", "count": 5, "languages": 1 }, { - "order": 274, + "order": 275, "name": "jose-luis-lanza", "count": 5, "languages": 1 }, { - "order": 275, + "order": 276, "name": "santiago434c", "count": 5, "languages": 1 }, { - "order": 276, + "order": 277, "name": "augustdev2003", "count": 5, "languages": 1 }, { - "order": 277, + "order": 278, "name": "alberba", "count": 5, "languages": 1 }, { - "order": 278, + "order": 279, "name": "thezhizn", "count": 5, "languages": 1 }, { - "order": 279, + "order": 280, "name": "gabrielramos02", "count": 5, "languages": 1 }, { - "order": 280, + "order": 281, "name": "javitron100", "count": 5, "languages": 1 }, { - "order": 281, + "order": 282, "name": "gmbarrios", "count": 5, "languages": 1 }, { - "order": 282, + "order": 283, "name": "nomellamodante", "count": 5, "languages": 1 }, { - "order": 283, + "order": 284, "name": "sarismejiasanchez", "count": 5, "languages": 1 }, { - "order": 284, + "order": 285, "name": "franz-arzapalo", "count": 5, "languages": 1 }, { - "order": 285, + "order": 286, "name": "drvito1977", "count": 5, "languages": 1 }, { - "order": 286, + "order": 287, "name": "joanfv-git", "count": 5, "languages": 1 }, { - "order": 287, + "order": 288, "name": "eloychavezdev", "count": 5, "languages": 1 }, { - "order": 288, + "order": 289, "name": "n1sek", "count": 5, "languages": 1 }, { - "order": 289, + "order": 290, "name": "vixito", "count": 5, "languages": 1 }, { - "order": 290, + "order": 291, "name": "d4-n1", "count": 5, "languages": 1 }, { - "order": 291, + "order": 292, "name": "lauracastrillonmp", "count": 5, "languages": 1 }, { - "order": 292, + "order": 293, "name": "danielbustos342", "count": 5, "languages": 1 }, { - "order": 293, + "order": 294, "name": "robmxz", "count": 5, "languages": 1 }, { - "order": 294, + "order": 295, "name": "douglasdiazr", "count": 5, "languages": 1 }, { - "order": 295, + "order": 296, "name": "vasilealexandru02", "count": 5, "languages": 1 }, { - "order": 296, + "order": 297, "name": "victormugo", "count": 5, "languages": 1 }, { - "order": 297, + "order": 298, "name": "esaens12", "count": 5, "languages": 1 }, - { - "order": 298, - "name": "adridoce", - "count": 5, - "languages": 1 - }, { "order": 299, - "name": "lucasag01", + "name": "adridoce", "count": 5, "languages": 1 }, { "order": 300, - "name": "karolle", + "name": "lucasag01", "count": 5, "languages": 1 }, { "order": 301, - "name": "jcrodmir", + "name": "karolle", "count": 5, "languages": 1 }, { "order": 302, - "name": "alvarofernandezavalos", + "name": "jcrodmir", "count": 5, "languages": 1 }, { "order": 303, - "name": "thaishdz", + "name": "alvarofernandezavalos", "count": 5, "languages": 1 }, { "order": 304, - "name": "boterop", + "name": "thaishdz", "count": 5, "languages": 1 }, { "order": 305, - "name": "bastianalq", + "name": "boterop", "count": 5, "languages": 1 }, { "order": 306, - "name": "rafacv23", + "name": "bastianalq", "count": 5, "languages": 1 }, { "order": 307, - "name": "mohamedelderkaoui", + "name": "rafacv23", "count": 5, "languages": 1 }, @@ -2341,5364 +2346,5442 @@ }, { "order": 309, + "name": "llonardo798", + "count": 4, + "languages": 4 + }, + { + "order": 310, "name": "zarakilancelot", "count": 4, "languages": 3 }, { - "order": 310, + "order": 311, "name": "ruthmp", "count": 4, "languages": 2 }, { - "order": 311, + "order": 312, "name": "mendozalz", "count": 4, "languages": 2 }, { - "order": 312, + "order": 313, "name": "salkalero", "count": 4, "languages": 2 }, { - "order": 313, + "order": 314, "name": "willr30", "count": 4, "languages": 2 }, { - "order": 314, + "order": 315, "name": "eonozux", "count": 4, "languages": 2 }, { - "order": 315, + "order": 316, "name": "josefuentes-dev", "count": 4, "languages": 2 }, { - "order": 316, + "order": 317, "name": "k3nvd", "count": 4, "languages": 2 }, { - "order": 317, + "order": 318, "name": "daeduol", "count": 4, "languages": 2 }, { - "order": 318, + "order": 319, "name": "fullovellas", "count": 4, "languages": 2 }, { - "order": 319, + "order": 320, "name": "yablik", "count": 4, "languages": 2 }, { - "order": 320, + "order": 321, "name": "nox456", "count": 4, "languages": 1 }, { - "order": 321, + "order": 322, "name": "mplatab", "count": 4, "languages": 1 }, { - "order": 322, + "order": 323, "name": "davstudy", "count": 4, "languages": 1 }, { - "order": 323, + "order": 324, "name": "rodrigoghr", "count": 4, "languages": 1 }, { - "order": 324, + "order": 325, "name": "ramxv", "count": 4, "languages": 1 }, { - "order": 325, + "order": 326, "name": "inkhemi", "count": 4, "languages": 1 }, { - "order": 326, + "order": 327, "name": "tobibordino", "count": 4, "languages": 1 }, { - "order": 327, + "order": 328, "name": "mallcca", "count": 4, "languages": 1 }, { - "order": 328, + "order": 329, "name": "guillermo-k", "count": 4, "languages": 1 }, { - "order": 329, + "order": 330, "name": "angell4s", "count": 4, "languages": 1 }, { - "order": 330, + "order": 331, "name": "axelprz", "count": 4, "languages": 1 }, { - "order": 331, + "order": 332, "name": "luissssoto", "count": 4, "languages": 1 }, { - "order": 332, + "order": 333, "name": "dlgai12", "count": 4, "languages": 1 }, { - "order": 333, + "order": 334, "name": "carrenoalexander", "count": 4, "languages": 1 }, { - "order": 334, + "order": 335, "name": "txuky", "count": 4, "languages": 1 }, { - "order": 335, + "order": 336, "name": "zerek247", "count": 4, "languages": 1 }, { - "order": 336, + "order": 337, "name": "buriticasara", "count": 4, "languages": 1 }, { - "order": 337, + "order": 338, "name": "jadraz", "count": 4, "languages": 1 }, { - "order": 338, + "order": 339, "name": "cdbiancotti", "count": 4, "languages": 1 }, { - "order": 339, + "order": 340, "name": "albertorevel", "count": 4, "languages": 1 }, { - "order": 340, + "order": 341, "name": "anvildestroyer", "count": 4, "languages": 1 }, { - "order": 341, + "order": 342, "name": "vicman-182", "count": 4, "languages": 1 }, { - "order": 342, + "order": 343, "name": "sunjamer", "count": 4, "languages": 1 }, { - "order": 343, + "order": 344, "name": "javirub", "count": 4, "languages": 1 }, { - "order": 344, + "order": 345, "name": "lrpeset", "count": 4, "languages": 1 }, { - "order": 345, + "order": 346, "name": "joshbaez", "count": 4, "languages": 1 }, { - "order": 346, + "order": 347, "name": "joapalobael", "count": 4, "languages": 1 }, { - "order": 347, + "order": 348, "name": "joaquinlopez14", "count": 4, "languages": 1 }, { - "order": 348, + "order": 349, "name": "juperdev", "count": 4, "languages": 1 }, { - "order": 349, + "order": 350, "name": "angelurrutdev", "count": 4, "languages": 1 }, { - "order": 350, + "order": 351, "name": "duendeintemporal", "count": 4, "languages": 1 }, { - "order": 351, + "order": 352, "name": "omegatroy", "count": 4, "languages": 1 }, { - "order": 352, + "order": 353, "name": "socramwd", "count": 4, "languages": 1 }, { - "order": 353, + "order": 354, "name": "mateo423", "count": 4, "languages": 1 }, { - "order": 354, + "order": 355, "name": "dieswae", "count": 4, "languages": 1 }, { - "order": 355, + "order": 356, "name": "elianisdev", "count": 4, "languages": 1 }, { - "order": 356, + "order": 357, "name": "marcoslombardo", "count": 4, "languages": 1 }, { - "order": 357, + "order": 358, "name": "andeveling", "count": 4, "languages": 1 }, { - "order": 358, + "order": 359, "name": "sbs24", "count": 4, "languages": 1 }, { - "order": 359, + "order": 360, "name": "carzep09", "count": 4, "languages": 1 }, { - "order": 360, + "order": 361, "name": "traver79", "count": 4, "languages": 1 }, { - "order": 361, + "order": 362, "name": "santiago-munoz-garcia", "count": 4, "languages": 1 }, { - "order": 362, + "order": 363, "name": "blasbarragan", "count": 4, "languages": 1 }, { - "order": 363, + "order": 364, "name": "jerrysantana", "count": 4, "languages": 1 }, { - "order": 364, + "order": 365, "name": "password1989", "count": 4, "languages": 1 }, { - "order": 365, + "order": 366, "name": "bladi23", "count": 4, "languages": 1 }, { - "order": 366, + "order": 367, "name": "juanca2805", "count": 4, "languages": 1 }, { - "order": 367, + "order": 368, "name": "elhacedordecosas", "count": 4, "languages": 1 }, { - "order": 368, + "order": 369, "name": "hugovrc", "count": 4, "languages": 1 }, { - "order": 369, + "order": 370, "name": "mayerga", "count": 4, "languages": 1 }, { - "order": 370, + "order": 371, "name": "deivitdev", "count": 4, "languages": 1 }, { - "order": 371, + "order": 372, "name": "johnalexguerrero", "count": 4, "languages": 1 }, { - "order": 372, + "order": 373, "name": "jairo-alejandro", "count": 4, "languages": 1 }, { - "order": 373, + "order": 374, "name": "quejuan52", "count": 4, "languages": 1 }, { - "order": 374, + "order": 375, "name": "abel-ade", "count": 4, "languages": 1 }, { - "order": 375, + "order": 376, "name": "angelo-eyama", "count": 3, "languages": 3 }, { - "order": 376, + "order": 377, "name": "owen-ian", "count": 3, "languages": 3 }, { - "order": 377, + "order": 378, "name": "akaisombra", "count": 3, "languages": 3 }, { - "order": 378, + "order": 379, "name": "abelsrzz", "count": 3, "languages": 3 }, { - "order": 379, + "order": 380, "name": "jehiselruth", "count": 3, "languages": 3 }, { - "order": 380, + "order": 381, "name": "oskarcali", "count": 3, "languages": 3 }, { - "order": 381, + "order": 382, "name": "eloitr", "count": 3, "languages": 2 }, { - "order": 382, + "order": 383, "name": "diegopc-dev", "count": 3, "languages": 2 }, { - "order": 383, + "order": 384, "name": "dimasb69", "count": 3, "languages": 2 }, { - "order": 384, + "order": 385, "name": "seba9906", "count": 3, "languages": 2 }, { - "order": 385, + "order": 386, "name": "arliumdev", "count": 3, "languages": 2 }, { - "order": 386, + "order": 387, "name": "robindev1812", "count": 3, "languages": 2 }, { - "order": 387, + "order": 388, "name": "alfarog507", "count": 3, "languages": 2 }, { - "order": 388, + "order": 389, "name": "skala2301", "count": 3, "languages": 2 }, { - "order": 389, + "order": 390, "name": "augustosdev", "count": 3, "languages": 2 }, { - "order": 390, + "order": 391, "name": "clotrack", "count": 3, "languages": 2 }, { - "order": 391, + "order": 392, "name": "pablotaber", "count": 3, "languages": 2 }, { - "order": 392, + "order": 393, "name": "allanoscoding", "count": 3, "languages": 2 }, { - "order": 393, + "order": 394, "name": "n-skot", "count": 3, "languages": 2 }, - { - "order": 394, - "name": "bryanalzate007", - "count": 3, - "languages": 1 - }, { "order": 395, - "name": "tonywarcode", + "name": "bryanalzate007", "count": 3, "languages": 1 }, { "order": 396, - "name": "exanderguitar", + "name": "tonywarcode", "count": 3, "languages": 1 }, { "order": 397, - "name": "elkin-dev", + "name": "exanderguitar", "count": 3, "languages": 1 }, { "order": 398, - "name": "carlosalberto05", + "name": "elkin-dev", "count": 3, "languages": 1 }, { "order": 399, - "name": "minn09", + "name": "carlosalberto05", "count": 3, "languages": 1 }, { "order": 400, - "name": "jorgegarcia-dev", + "name": "minn09", "count": 3, "languages": 1 }, { "order": 401, - "name": "guillesese", + "name": "jorgegarcia-dev", "count": 3, "languages": 1 }, { "order": 402, - "name": "tekatoki", + "name": "guillesese", "count": 3, "languages": 1 }, { "order": 403, - "name": "dandrusco", + "name": "tekatoki", "count": 3, "languages": 1 }, { "order": 404, - "name": "estelacode", + "name": "dandrusco", "count": 3, "languages": 1 }, { "order": 405, - "name": "strooplab", + "name": "estelacode", "count": 3, "languages": 1 }, { "order": 406, - "name": "monikgbar", + "name": "strooplab", "count": 3, "languages": 1 }, { "order": 407, - "name": "mstaz4", + "name": "monikgbar", "count": 3, "languages": 1 }, { "order": 408, - "name": "ramon-almeida", + "name": "mstaz4", "count": 3, "languages": 1 }, { "order": 409, - "name": "oscarhub90", + "name": "ramon-almeida", "count": 3, "languages": 1 }, { "order": 410, - "name": "artdugarte", + "name": "oscarhub90", "count": 3, "languages": 1 }, { "order": 411, - "name": "elder202", + "name": "maxirica", "count": 3, "languages": 1 }, { "order": 412, - "name": "bertolini-victor", + "name": "artdugarte", "count": 3, "languages": 1 }, { "order": 413, - "name": "oscargeovannyrincon", + "name": "elder202", "count": 3, "languages": 1 }, { "order": 414, - "name": "rgeditv1", + "name": "bertolini-victor", "count": 3, "languages": 1 }, { "order": 415, - "name": "frostbitepy", + "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { "order": 416, - "name": "antii16", + "name": "rgeditv1", "count": 3, "languages": 1 }, { "order": 417, - "name": "mmacalli", + "name": "frostbitepy", "count": 3, "languages": 1 }, { "order": 418, - "name": "eliskopun", + "name": "antii16", "count": 3, "languages": 1 }, { "order": 419, - "name": "jofedev", + "name": "mmacalli", "count": 3, "languages": 1 }, { "order": 420, - "name": "suescun845", + "name": "dkp-dev", "count": 3, "languages": 1 }, { "order": 421, - "name": "yeam-10", + "name": "eliskopun", "count": 3, "languages": 1 }, { "order": 422, - "name": "joandevpy", + "name": "jofedev", "count": 3, "languages": 1 }, { "order": 423, - "name": "macova96", + "name": "suescun845", "count": 3, "languages": 1 }, { "order": 424, - "name": "beonzj", + "name": "yeam-10", "count": 3, "languages": 1 }, { "order": 425, - "name": "betzadev", + "name": "joandevpy", "count": 3, "languages": 1 }, { "order": 426, - "name": "mizadlogcia", + "name": "macova96", "count": 3, "languages": 1 }, { "order": 427, - "name": "emilianohoyos", + "name": "beonzj", "count": 3, "languages": 1 }, { "order": 428, - "name": "camilo-zuluaga", + "name": "betzadev", "count": 3, "languages": 1 }, { "order": 429, - "name": "zzepu", + "name": "mizadlogcia", "count": 3, "languages": 1 }, { "order": 430, - "name": "danielperezrubio", + "name": "emilianohoyos", "count": 3, "languages": 1 }, { "order": 431, - "name": "marcoh2325", + "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { "order": 432, - "name": "nathaliamf", + "name": "zzepu", "count": 3, "languages": 1 }, { "order": 433, - "name": "jacarrillob", + "name": "danielperezrubio", "count": 3, "languages": 1 }, { "order": 434, - "name": "fdcorreadev", + "name": "marcoh2325", "count": 3, "languages": 1 }, { "order": 435, - "name": "matiascba27", + "name": "nathaliamf", "count": 3, "languages": 1 }, { "order": 436, - "name": "andresargote", + "name": "jacarrillob", "count": 3, "languages": 1 }, { "order": 437, - "name": "victorsschz", + "name": "fdcorreadev", "count": 3, "languages": 1 }, { "order": 438, - "name": "faga01", + "name": "matiascba27", "count": 3, "languages": 1 }, { "order": 439, - "name": "dariorfm", + "name": "andresargote", "count": 3, "languages": 1 }, { "order": 440, - "name": "hectoriglesias", + "name": "victorsschz", "count": 3, "languages": 1 }, { "order": 441, - "name": "josueeeee", + "name": "faga01", "count": 3, "languages": 1 }, { "order": 442, - "name": "fernandog25", + "name": "dariorfm", "count": 3, "languages": 1 }, { "order": 443, - "name": "migueltfangche", + "name": "hectoriglesias", "count": 3, "languages": 1 }, { "order": 444, - "name": "emaenriquez", + "name": "josueeeee", "count": 3, "languages": 1 }, { "order": 445, - "name": "matrix-miguel", + "name": "fernandog25", "count": 3, "languages": 1 }, { "order": 446, - "name": "r4kso", + "name": "migueltfangche", "count": 3, "languages": 1 }, { "order": 447, - "name": "davidb313", + "name": "emaenriquez", "count": 3, "languages": 1 }, { "order": 448, - "name": "arbenisacosta", + "name": "matrix-miguel", "count": 3, "languages": 1 }, { "order": 449, - "name": "sebascmb", + "name": "r4kso", "count": 3, "languages": 1 }, { "order": 450, - "name": "jelozanov", + "name": "davidb313", "count": 3, "languages": 1 }, { "order": 451, - "name": "singularpigeon", + "name": "arbenisacosta", "count": 3, "languages": 1 }, { "order": 452, - "name": "asaelz", + "name": "sebascmb", "count": 3, "languages": 1 }, { "order": 453, - "name": "gpinedaoviedo", + "name": "jelozanov", "count": 3, "languages": 1 }, { "order": 454, - "name": "orlas135", + "name": "singularpigeon", "count": 3, "languages": 1 }, { "order": 455, - "name": "zuluangel", + "name": "asaelz", "count": 3, "languages": 1 }, { "order": 456, - "name": "uyarra73", + "name": "gpinedaoviedo", "count": 3, "languages": 1 }, { "order": 457, - "name": "sandracalatayud", + "name": "orlas135", "count": 3, "languages": 1 }, { "order": 458, - "name": "agusbelp", + "name": "zuluangel", "count": 3, "languages": 1 }, { "order": 459, - "name": "ahinar", + "name": "uyarra73", "count": 3, "languages": 1 }, { "order": 460, - "name": "magupe09", + "name": "sandracalatayud", "count": 3, "languages": 1 }, { "order": 461, - "name": "daniback95", + "name": "agusbelp", "count": 3, "languages": 1 }, { "order": 462, - "name": "hatorob", + "name": "ahinar", "count": 3, "languages": 1 }, { "order": 463, - "name": "erysnell", + "name": "magupe09", "count": 3, "languages": 1 }, { "order": 464, - "name": "legs30011", + "name": "daniback95", "count": 3, "languages": 1 }, { "order": 465, - "name": "andyfg0289", + "name": "hatorob", "count": 3, "languages": 1 }, { "order": 466, - "name": "14davidnkt", + "name": "erysnell", "count": 3, "languages": 1 }, { "order": 467, - "name": "samuelarandia", + "name": "legs30011", "count": 3, "languages": 1 }, { "order": 468, - "name": "jaimerocel96", + "name": "andyfg0289", "count": 3, "languages": 1 }, { "order": 469, - "name": "gitperalta", + "name": "14davidnkt", "count": 3, "languages": 1 }, { "order": 470, - "name": "dannyvera1234", + "name": "samuelarandia", "count": 3, "languages": 1 }, { "order": 471, - "name": "axelsparta", + "name": "jaimerocel96", "count": 3, "languages": 1 }, { "order": 472, - "name": "tebaah", + "name": "gitperalta", "count": 3, "languages": 1 }, { "order": 473, - "name": "matteozhao98", + "name": "dannyvera1234", "count": 3, "languages": 1 }, { "order": 474, - "name": "crisvigas", + "name": "axelsparta", "count": 3, "languages": 1 }, { "order": 475, - "name": "tomytsa", + "name": "tebaah", "count": 3, "languages": 1 }, { "order": 476, - "name": "blfuentes", + "name": "matteozhao98", "count": 3, "languages": 1 }, { "order": 477, - "name": "sebasgrdev", + "name": "crisvigas", "count": 3, "languages": 1 }, { "order": 478, - "name": "sitnestic", + "name": "tomytsa", "count": 3, "languages": 1 }, { "order": 479, - "name": "confley", + "name": "carlosguariglia", "count": 3, "languages": 1 }, { "order": 480, - "name": "francofmv", + "name": "blfuentes", "count": 3, "languages": 1 }, { "order": 481, - "name": "david-quinones", + "name": "sebasgrdev", "count": 3, "languages": 1 }, { "order": 482, - "name": "marce1084", + "name": "sitnestic", "count": 3, "languages": 1 }, { "order": 483, - "name": "freedainew", + "name": "confley", "count": 3, "languages": 1 }, { "order": 484, - "name": "rubioj17", + "name": "francofmv", "count": 3, "languages": 1 }, { "order": 485, - "name": "kine-jdf", + "name": "david-quinones", "count": 3, "languages": 1 }, { "order": 486, - "name": "kingsaul22", + "name": "marce1084", "count": 3, "languages": 1 }, { "order": 487, - "name": "ainoaran", + "name": "freedainew", "count": 3, "languages": 1 }, { "order": 488, - "name": "fluna29", + "name": "rubioj17", "count": 3, "languages": 1 }, { "order": 489, - "name": "xurxogz", + "name": "kine-jdf", "count": 3, "languages": 1 }, { "order": 490, - "name": "davidsorroche", + "name": "kingsaul22", "count": 3, "languages": 1 }, { "order": 491, - "name": "natalinacn", + "name": "ainoaran", "count": 3, "languages": 1 }, { "order": 492, - "name": "yaretzyrb", + "name": "fluna29", "count": 3, "languages": 1 }, { "order": 493, - "name": "swifty0705", + "name": "xurxogz", "count": 3, "languages": 1 }, { "order": 494, - "name": "marianoemir", + "name": "davidsorroche", "count": 3, "languages": 1 }, { "order": 495, - "name": "guido2288", + "name": "natalinacn", "count": 3, "languages": 1 }, { "order": 496, - "name": "githjuan", + "name": "yaretzyrb", "count": 3, "languages": 1 }, { "order": 497, - "name": "rocallejas", + "name": "swifty0705", "count": 3, "languages": 1 }, { "order": 498, - "name": "jeyker-dev", + "name": "marianoemir", "count": 3, "languages": 1 }, { "order": 499, - "name": "barbafebles", + "name": "guido2288", "count": 3, "languages": 1 }, { "order": 500, - "name": "aggranadoss", + "name": "githjuan", "count": 3, "languages": 1 }, { "order": 501, - "name": "heliercamejo", + "name": "rocallejas", "count": 3, "languages": 1 }, { "order": 502, - "name": "coshiloco", + "name": "jeyker-dev", "count": 3, "languages": 1 }, { "order": 503, - "name": "atienzar", + "name": "barbafebles", "count": 3, "languages": 1 }, { "order": 504, - "name": "javiearth", + "name": "aggranadoss", "count": 3, "languages": 1 }, { "order": 505, - "name": "marlonleon2023", + "name": "heliercamejo", "count": 3, "languages": 1 }, { "order": 506, - "name": "vandresca", + "name": "coshiloco", "count": 3, "languages": 1 }, { "order": 507, - "name": "ggtorca", + "name": "atienzar", "count": 3, "languages": 1 }, { "order": 508, - "name": "ivanpelu7", + "name": "javiearth", "count": 3, "languages": 1 }, { "order": 509, - "name": "alejomazov", + "name": "marlonleon2023", "count": 3, "languages": 1 }, { "order": 510, - "name": "oscar503sv", + "name": "vandresca", "count": 3, "languages": 1 }, { "order": 511, - "name": "dmauricio4", + "name": "ggtorca", "count": 3, "languages": 1 }, { "order": 512, - "name": "davidr1594", + "name": "ivanpelu7", "count": 3, "languages": 1 }, { "order": 513, - "name": "mellamoomar", + "name": "alejomazov", "count": 3, "languages": 1 }, { "order": 514, - "name": "ikeragi05", + "name": "oscar503sv", "count": 3, "languages": 1 }, { "order": 515, - "name": "nikorasu-d", + "name": "dmauricio4", "count": 3, "languages": 1 }, { "order": 516, - "name": "mantaras96", + "name": "davidr1594", "count": 3, "languages": 1 }, { "order": 517, - "name": "davidvilem", + "name": "juanmjimenezs", "count": 3, "languages": 1 }, { "order": 518, - "name": "frangarmez21", + "name": "mellamoomar", "count": 3, "languages": 1 }, { "order": 519, - "name": "dylanb55", + "name": "ikeragi05", "count": 3, "languages": 1 }, { "order": 520, - "name": "juxxon23", + "name": "nikorasu-d", "count": 3, "languages": 1 }, { "order": 521, + "name": "mantaras96", + "count": 3, + "languages": 1 + }, + { + "order": 522, + "name": "davidvilem", + "count": 3, + "languages": 1 + }, + { + "order": 523, + "name": "frangarmez21", + "count": 3, + "languages": 1 + }, + { + "order": 524, + "name": "dylanb55", + "count": 3, + "languages": 1 + }, + { + "order": 525, + "name": "juxxon23", + "count": 3, + "languages": 1 + }, + { + "order": 526, + "name": "andreessj", + "count": 2, + "languages": 2 + }, + { + "order": 527, "name": "juan-wills", "count": 2, "languages": 2 }, { - "order": 522, + "order": 528, + "name": "ddanone", + "count": 2, + "languages": 2 + }, + { + "order": 529, "name": "lilberick", "count": 2, "languages": 2 }, { - "order": 523, + "order": 530, "name": "tecfer", "count": 2, "languages": 2 }, { - "order": 524, + "order": 531, "name": "chuanmi", "count": 2, "languages": 2 }, { - "order": 525, + "order": 532, "name": "carresoft", "count": 2, "languages": 2 }, { - "order": 526, + "order": 533, "name": "tizog", "count": 2, "languages": 2 }, { - "order": 527, + "order": 534, "name": "raul-progr", "count": 2, "languages": 2 }, { - "order": 528, + "order": 535, "name": "felipedev303", "count": 2, "languages": 2 }, { - "order": 529, + "order": 536, "name": "alejosor", "count": 2, "languages": 2 }, { - "order": 530, + "order": 537, "name": "lemito66", "count": 2, "languages": 2 }, { - "order": 531, + "order": 538, "name": "jmofuture", "count": 2, "languages": 2 }, { - "order": 532, + "order": 539, "name": "angel-alvarez-dev", "count": 2, "languages": 2 }, { - "order": 533, + "order": 540, "name": "eberstr", "count": 2, "languages": 2 }, { - "order": 534, + "order": 541, "name": "berentolkien", "count": 2, "languages": 2 }, { - "order": 535, + "order": 542, + "name": "raghnus", + "count": 2, + "languages": 2 + }, + { + "order": 543, "name": "camiloforero1997", "count": 2, "languages": 2 }, { - "order": 536, + "order": 544, "name": "jorgesilencio", "count": 2, "languages": 2 }, { - "order": 537, + "order": 545, "name": "enrgarvic", "count": 2, "languages": 2 }, { - "order": 538, + "order": 546, "name": "jurgen-alfaro", "count": 2, "languages": 2 }, { - "order": 539, + "order": 547, "name": "alexsamboy", "count": 2, "languages": 2 }, { - "order": 540, + "order": 548, "name": "jovany-java", "count": 2, "languages": 2 }, { - "order": 541, + "order": 549, "name": "jlcareglio", "count": 2, "languages": 2 }, { - "order": 542, + "order": 550, "name": "elsanty08", "count": 2, "languages": 2 }, { - "order": 543, + "order": 551, "name": "lydaf", "count": 2, "languages": 2 }, { - "order": 544, + "order": 552, "name": "ismaelmatiz", "count": 2, "languages": 2 }, { - "order": 545, + "order": 553, "name": "sgb004", "count": 2, "languages": 2 }, { - "order": 546, + "order": 554, "name": "devvdroid01", "count": 2, "languages": 2 }, { - "order": 547, + "order": 555, "name": "jhonatanmustiolacas", "count": 2, "languages": 2 }, { - "order": 548, + "order": 556, "name": "lurtur", "count": 2, "languages": 2 }, { - "order": 549, + "order": 557, "name": "juanseevn", "count": 2, "languages": 1 }, { - "order": 550, + "order": 558, "name": "miguelberrio0810", "count": 2, "languages": 1 }, { - "order": 551, + "order": 559, "name": "victore16", "count": 2, "languages": 1 }, { - "order": 552, + "order": 560, "name": "zalazarmartin", "count": 2, "languages": 1 }, { - "order": 553, + "order": 561, "name": "alejandrovelasquezr", "count": 2, "languages": 1 }, { - "order": 554, + "order": 562, "name": "dokeys28", "count": 2, "languages": 1 }, { - "order": 555, + "order": 563, "name": "noaregui", "count": 2, "languages": 1 }, { - "order": 556, + "order": 564, "name": "sofia-d-p", "count": 2, "languages": 1 }, { - "order": 557, + "order": 565, "name": "freyfonseca", "count": 2, "languages": 1 }, { - "order": 558, + "order": 566, "name": "anblackter", "count": 2, "languages": 1 }, { - "order": 559, + "order": 567, "name": "fjsubero", "count": 2, "languages": 1 }, { - "order": 560, + "order": 568, "name": "gregfc95", "count": 2, "languages": 1 }, { - "order": 561, + "order": 569, "name": "nach012", "count": 2, "languages": 1 }, { - "order": 562, + "order": 570, "name": "pablosalme", "count": 2, "languages": 1 }, { - "order": 563, + "order": 571, "name": "kcx46", "count": 2, "languages": 1 }, { - "order": 564, + "order": 572, "name": "aboredllama", "count": 2, "languages": 1 }, { - "order": 565, + "order": 573, "name": "jmontoyac", "count": 2, "languages": 1 }, { - "order": 566, + "order": 574, "name": "josue-py", "count": 2, "languages": 1 }, { - "order": 567, + "order": 575, "name": "dariangl", "count": 2, "languages": 1 }, { - "order": 568, + "order": 576, "name": "alejandro-mantilla", "count": 2, "languages": 1 }, { - "order": 569, + "order": 577, "name": "inf015", "count": 2, "languages": 1 }, { - "order": 570, + "order": 578, "name": "dota43ver", "count": 2, "languages": 1 }, { - "order": 571, + "order": 579, "name": "culebropalido", "count": 2, "languages": 1 }, { - "order": 572, + "order": 580, "name": "rojasricoo", "count": 2, "languages": 1 }, { - "order": 573, + "order": 581, "name": "csaraugusto2", "count": 2, "languages": 1 }, { - "order": 574, + "order": 582, "name": "lauradiazm29", "count": 2, "languages": 1 }, { - "order": 575, + "order": 583, "name": "fernandoatello", "count": 2, "languages": 1 }, { - "order": 576, + "order": 584, "name": "vesubius", "count": 2, "languages": 1 }, { - "order": 577, + "order": 585, "name": "s384", "count": 2, "languages": 1 }, { - "order": 578, + "order": 586, "name": "aegpgrafologo", "count": 2, "languages": 1 }, { - "order": 579, + "order": 587, "name": "e-techgod", "count": 2, "languages": 1 }, { - "order": 580, + "order": 588, "name": "baauus", "count": 2, "languages": 1 }, { - "order": 581, - "name": "maxirica", - "count": 2, - "languages": 1 - }, - { - "order": 582, + "order": 589, "name": "ziellucio01", "count": 2, "languages": 1 }, { - "order": 583, + "order": 590, "name": "santiagodc8", "count": 2, "languages": 1 }, { - "order": 584, + "order": 591, "name": "haroldalb", "count": 2, "languages": 1 }, { - "order": 585, + "order": 592, "name": "eriickm", "count": 2, "languages": 1 }, - { - "order": 586, - "name": "pakomor", - "count": 2, - "languages": 1 - }, - { - "order": 587, - "name": "dkp-dev", + { + "order": 593, + "name": "pakomor", "count": 2, "languages": 1 }, { - "order": 588, + "order": 594, "name": "adogdev", "count": 2, "languages": 1 }, { - "order": 589, + "order": 595, "name": "ignaciogm1973", "count": 2, "languages": 1 }, { - "order": 590, + "order": 596, "name": "josephfaster", "count": 2, "languages": 1 }, { - "order": 591, + "order": 597, "name": "pedrojog", "count": 2, "languages": 1 }, { - "order": 592, + "order": 598, "name": "carlosmarte23", "count": 2, "languages": 1 }, { - "order": 593, + "order": 599, "name": "tic4", "count": 2, "languages": 1 }, { - "order": 594, + "order": 600, "name": "julind0", "count": 2, "languages": 1 }, { - "order": 595, + "order": 601, "name": "christiancoc", "count": 2, "languages": 1 }, { - "order": 596, + "order": 602, "name": "steven9708m", "count": 2, "languages": 1 }, { - "order": 597, + "order": 603, "name": "soydaviddev", "count": 2, "languages": 1 }, { - "order": 598, + "order": 604, "name": "nevaito", "count": 2, "languages": 1 }, { - "order": 599, + "order": 605, "name": "fabianpa505", "count": 2, "languages": 1 }, { - "order": 600, + "order": 606, "name": "nachodev7", "count": 2, "languages": 1 }, { - "order": 601, + "order": 607, "name": "jsacristanbeltri", "count": 2, "languages": 1 }, { - "order": 602, + "order": 608, "name": "cipollalucas", "count": 2, "languages": 1 }, { - "order": 603, + "order": 609, "name": "devcherry1", "count": 2, "languages": 1 }, { - "order": 604, + "order": 610, "name": "zeti1231", "count": 2, "languages": 1 }, { - "order": 605, + "order": 611, "name": "josegago27", "count": 2, "languages": 1 }, { - "order": 606, + "order": 612, "name": "gmigues", "count": 2, "languages": 1 }, { - "order": 607, + "order": 613, "name": "dans182", "count": 2, "languages": 1 }, { - "order": 608, + "order": 614, "name": "jheisonquiroga", "count": 2, "languages": 1 }, { - "order": 609, + "order": 615, "name": "misterdan100", "count": 2, "languages": 1 }, { - "order": 610, + "order": 616, "name": "mickel-arroz", "count": 2, "languages": 1 }, { - "order": 611, + "order": 617, "name": "jhonf1992", "count": 2, "languages": 1 }, { - "order": 612, + "order": 618, "name": "farthaz", "count": 2, "languages": 1 }, { - "order": 613, + "order": 619, "name": "murquisdev", "count": 2, "languages": 1 }, { - "order": 614, + "order": 620, "name": "cpcarlosprieto", "count": 2, "languages": 1 }, { - "order": 615, + "order": 621, "name": "valeriatorrealba", "count": 2, "languages": 1 }, { - "order": 616, + "order": 622, "name": "jorge186414", "count": 2, "languages": 1 }, { - "order": 617, + "order": 623, "name": "davhage", "count": 2, "languages": 1 }, { - "order": 618, + "order": 624, "name": "lmedina96", "count": 2, "languages": 1 }, { - "order": 619, + "order": 625, "name": "matiasfarfan89", "count": 2, "languages": 1 }, { - "order": 620, + "order": 626, "name": "alanox1", "count": 2, "languages": 1 }, { - "order": 621, + "order": 627, "name": "santiagocuevas2003", "count": 2, "languages": 1 }, { - "order": 622, + "order": 628, "name": "franciscocuminilondero", "count": 2, "languages": 1 }, { - "order": 623, + "order": 629, "name": "gianbordon", "count": 2, "languages": 1 }, { - "order": 624, + "order": 630, "name": "christianhernandezb", "count": 2, "languages": 1 }, { - "order": 625, + "order": 631, "name": "leonardo291024", "count": 2, "languages": 1 }, { - "order": 626, + "order": 632, "name": "haryblanco20", "count": 2, "languages": 1 }, { - "order": 627, + "order": 633, "name": "cesarocbu", "count": 2, "languages": 1 }, { - "order": 628, + "order": 634, "name": "christianumb", "count": 2, "languages": 1 }, { - "order": 629, + "order": 635, "name": "aleoe01", "count": 2, "languages": 1 }, { - "order": 630, + "order": 636, "name": "andnikdev", "count": 2, "languages": 1 }, { - "order": 631, + "order": 637, "name": "angelvelasco1", "count": 2, "languages": 1 }, { - "order": 632, + "order": 638, "name": "glaboryp", "count": 2, "languages": 1 }, { - "order": 633, + "order": 639, "name": "nxl22", "count": 2, "languages": 1 }, { - "order": 634, + "order": 640, "name": "erikayeah", "count": 2, "languages": 1 }, { - "order": 635, + "order": 641, "name": "jeisonredondo", "count": 2, "languages": 1 }, { - "order": 636, + "order": 642, "name": "rikar2o", "count": 2, "languages": 1 }, { - "order": 637, + "order": 643, "name": "rolo27s", "count": 2, "languages": 1 }, { - "order": 638, + "order": 644, "name": "miguelrejon96", "count": 2, "languages": 1 }, { - "order": 639, + "order": 645, "name": "doblea74", "count": 2, "languages": 1 }, { - "order": 640, + "order": 646, "name": "jaimemunozdev", "count": 2, "languages": 1 }, { - "order": 641, + "order": 647, "name": "tomasmarquez81", "count": 2, "languages": 1 }, { - "order": 642, + "order": 648, "name": "akzorla", "count": 2, "languages": 1 }, { - "order": 643, + "order": 649, "name": "juangomezn", "count": 2, "languages": 1 }, { - "order": 644, + "order": 650, "name": "soldochris", "count": 2, "languages": 1 }, { - "order": 645, + "order": 651, "name": "k4rv3r", "count": 2, "languages": 1 }, { - "order": 646, + "order": 652, "name": "wesborland-github", "count": 2, "languages": 1 }, { - "order": 647, + "order": 653, "name": "ovjohn", "count": 2, "languages": 1 }, { - "order": 648, + "order": 654, "name": "memogv", "count": 2, "languages": 1 }, { - "order": 649, + "order": 655, "name": "navarroemiliano", "count": 2, "languages": 1 }, { - "order": 650, + "order": 656, "name": "waldid32", "count": 2, "languages": 1 }, { - "order": 651, + "order": 657, "name": "mikelroset", "count": 2, "languages": 1 }, { - "order": 652, + "order": 658, "name": "dararod", "count": 2, "languages": 1 }, { - "order": 653, + "order": 659, "name": "freddyasierraj", "count": 2, "languages": 1 }, { - "order": 654, + "order": 660, "name": "gomezcamilo9701", "count": 2, "languages": 1 }, { - "order": 655, + "order": 661, "name": "nicolastapiasanz", "count": 2, "languages": 1 }, { - "order": 656, + "order": 662, "name": "vicgallego", "count": 2, "languages": 1 }, { - "order": 657, + "order": 663, "name": "porto1090", "count": 2, "languages": 1 }, { - "order": 658, + "order": 664, "name": "0pio", "count": 2, "languages": 1 }, { - "order": 659, + "order": 665, "name": "whiterunjarl", "count": 2, "languages": 1 }, { - "order": 660, + "order": 666, "name": "crisdev3", "count": 2, "languages": 1 }, { - "order": 661, + "order": 667, "name": "gamitocu", "count": 2, "languages": 1 }, { - "order": 662, + "order": 668, "name": "luis-vb", "count": 2, "languages": 1 }, { - "order": 663, + "order": 669, "name": "saracorraless", "count": 2, "languages": 1 }, { - "order": 664, + "order": 670, "name": "vikkanh", "count": 2, "languages": 1 }, { - "order": 665, + "order": 671, "name": "juaruibr", "count": 2, "languages": 1 }, { - "order": 666, + "order": 672, "name": "frealexandro", "count": 2, "languages": 1 }, { - "order": 667, + "order": 673, "name": "roilhi", "count": 2, "languages": 1 }, { - "order": 668, + "order": 674, "name": "evelynnobile", "count": 2, "languages": 1 }, { - "order": 669, + "order": 675, "name": "cristiansystem", "count": 2, "languages": 1 }, { - "order": 670, + "order": 676, "name": "peibolstrike", "count": 2, "languages": 1 }, { - "order": 671, + "order": 677, "name": "nahuelborromeo", "count": 2, "languages": 1 }, { - "order": 672, + "order": 678, "name": "arhl2023", "count": 2, "languages": 1 }, { - "order": 673, + "order": 679, "name": "yowcloud", "count": 2, "languages": 1 }, { - "order": 674, + "order": 680, "name": "jcknot", "count": 2, "languages": 1 }, { - "order": 675, + "order": 681, "name": "coronelsam", "count": 2, "languages": 1 }, { - "order": 676, + "order": 682, "name": "peeanoot", "count": 2, "languages": 1 }, { - "order": 677, + "order": 683, "name": "anaroncero", "count": 2, "languages": 1 }, { - "order": 678, + "order": 684, "name": "marioyellowy", "count": 2, "languages": 1 }, { - "order": 679, + "order": 685, "name": "hersac", "count": 2, "languages": 1 }, { - "order": 680, + "order": 686, "name": "isidrojng", "count": 2, "languages": 1 }, { - "order": 681, + "order": 687, "name": "lorenamesa", "count": 2, "languages": 1 }, { - "order": 682, + "order": 688, "name": "jago86", "count": 2, "languages": 1 }, { - "order": 683, + "order": 689, "name": "johannhsdev", "count": 2, "languages": 1 }, { - "order": 684, + "order": 690, "name": "diegokarabin", "count": 2, "languages": 1 }, { - "order": 685, + "order": 691, "name": "gugliio", "count": 2, "languages": 1 }, { - "order": 686, + "order": 692, "name": "fefestuve", "count": 2, "languages": 1 }, { - "order": 687, + "order": 693, "name": "fsfigueroa77", "count": 2, "languages": 1 }, { - "order": 688, + "order": 694, "name": "reanthonyh", "count": 2, "languages": 1 }, { - "order": 689, + "order": 695, "name": "nandaalf", "count": 2, "languages": 1 }, { - "order": 690, + "order": 696, "name": "vdroiid", "count": 2, "languages": 1 }, { - "order": 691, + "order": 697, "name": "aserranot", "count": 2, "languages": 1 }, { - "order": 692, + "order": 698, "name": "raulallue", "count": 2, "languages": 1 }, { - "order": 693, + "order": 699, "name": "luciarf", "count": 2, "languages": 1 }, { - "order": 694, + "order": 700, "name": "poetry0354", "count": 2, "languages": 1 }, { - "order": 695, + "order": 701, "name": "rikar20", "count": 2, "languages": 1 }, { - "order": 696, + "order": 702, "name": "reaien", "count": 2, "languages": 1 }, { - "order": 697, + "order": 703, "name": "elmarqueli", "count": 2, "languages": 1 }, { - "order": 698, + "order": 704, "name": "hawkbott", "count": 2, "languages": 1 }, { - "order": 699, + "order": 705, "name": "tiaguiito3", "count": 2, "languages": 1 }, { - "order": 700, + "order": 706, + "name": "cdryampi", + "count": 2, + "languages": 1 + }, + { + "order": 707, "name": "bereverte", "count": 2, "languages": 1 }, { - "order": 701, + "order": 708, "name": "sdm29gh", "count": 2, "languages": 1 }, { - "order": 702, + "order": 709, "name": "frannmv", "count": 2, "languages": 1 }, { - "order": 703, + "order": 710, "name": "diegosilval", "count": 2, "languages": 1 }, { - "order": 704, + "order": 711, "name": "ssanjua", "count": 2, "languages": 1 }, { - "order": 705, + "order": 712, "name": "zonnen69", "count": 2, "languages": 1 }, { - "order": 706, + "order": 713, "name": "angelargumedo", "count": 2, "languages": 1 }, { - "order": 707, - "name": "lordzzz777", - "count": 2, - "languages": 1 - }, - { - "order": 708, - "name": "rrcoder", + "order": 714, + "name": "lordzzz777", "count": 2, "languages": 1 }, { - "order": 709, - "name": "jmichael39", + "order": 715, + "name": "rrcoder", "count": 2, "languages": 1 }, { - "order": 710, - "name": "juanmjimenezs", + "order": 716, + "name": "jmichael39", "count": 2, "languages": 1 }, { - "order": 711, + "order": 717, "name": "armentaangel", "count": 2, "languages": 1 }, { - "order": 712, + "order": 718, "name": "vecinacoo", "count": 2, "languages": 1 }, { - "order": 713, + "order": 719, "name": "wijimenezz", "count": 1, "languages": 1 }, { - "order": 714, + "order": 720, "name": "rafapg93", "count": 1, "languages": 1 }, { - "order": 715, + "order": 721, "name": "vickalc", "count": 1, "languages": 1 }, { - "order": 716, + "order": 722, "name": "riukac", "count": 1, "languages": 1 }, { - "order": 717, + "order": 723, "name": "rusian69", "count": 1, "languages": 1 }, { - "order": 718, + "order": 724, "name": "edgarmedranoa", "count": 1, "languages": 1 }, { - "order": 719, + "order": 725, "name": "sve-nnn", "count": 1, "languages": 1 }, { - "order": 720, + "order": 726, "name": "emiliordev", "count": 1, "languages": 1 }, { - "order": 721, + "order": 727, "name": "acirdeveloper", "count": 1, "languages": 1 }, { - "order": 722, + "order": 728, "name": "orzefox", "count": 1, "languages": 1 }, { - "order": 723, + "order": 729, "name": "nicoloboo02", "count": 1, "languages": 1 }, { - "order": 724, + "order": 730, "name": "jony-english22", "count": 1, "languages": 1 }, { - "order": 725, + "order": 731, "name": "deathbat00", "count": 1, "languages": 1 }, { - "order": 726, + "order": 732, "name": "rocha30", "count": 1, "languages": 1 }, { - "order": 727, + "order": 733, "name": "markayala13", "count": 1, "languages": 1 }, { - "order": 728, + "order": 734, "name": "angeloro", "count": 1, "languages": 1 }, { - "order": 729, + "order": 735, "name": "righelch", "count": 1, "languages": 1 }, { - "order": 730, + "order": 736, "name": "albertovf", "count": 1, "languages": 1 }, { - "order": 731, + "order": 737, "name": "sergiopq", "count": 1, "languages": 1 }, { - "order": 732, + "order": 738, "name": "marcosalvarezcalabria", "count": 1, "languages": 1 }, { - "order": 733, + "order": 739, "name": "ouendinga", "count": 1, "languages": 1 }, { - "order": 734, + "order": 740, "name": "evilpodato04", "count": 1, "languages": 1 }, { - "order": 735, + "order": 741, "name": "agustinfccll", "count": 1, "languages": 1 }, { - "order": 736, + "order": 742, "name": "miguel2rar", "count": 1, "languages": 1 }, { - "order": 737, + "order": 743, "name": "anitandil", "count": 1, "languages": 1 }, { - "order": 738, + "order": 744, "name": "neicervb", "count": 1, "languages": 1 }, { - "order": 739, + "order": 745, "name": "eamartin", "count": 1, "languages": 1 }, { - "order": 740, + "order": 746, "name": "miquelrr", "count": 1, "languages": 1 }, { - "order": 741, + "order": 747, "name": "gabriel-dangelo", "count": 1, "languages": 1 }, { - "order": 742, + "order": 748, "name": "francomyburg", "count": 1, "languages": 1 }, { - "order": 743, + "order": 749, "name": "josephinoo", "count": 1, "languages": 1 }, { - "order": 744, + "order": 750, + "name": "carlosvr48", + "count": 1, + "languages": 1 + }, + { + "order": 751, "name": "mmariob", "count": 1, "languages": 1 }, { - "order": 745, + "order": 752, "name": "daichiko", "count": 1, "languages": 1 }, { - "order": 746, + "order": 753, "name": "emanuelgauler", "count": 1, "languages": 1 }, { - "order": 747, + "order": 754, "name": "willypaz243", "count": 1, "languages": 1 }, { - "order": 748, + "order": 755, "name": "rawc1nnamon", "count": 1, "languages": 1 }, { - "order": 749, + "order": 756, "name": "girngoma", "count": 1, "languages": 1 }, { - "order": 750, + "order": 757, "name": "juampaweb", "count": 1, "languages": 1 }, { - "order": 751, + "order": 758, "name": "marcos0803", "count": 1, "languages": 1 }, { - "order": 752, + "order": 759, "name": "anexo01", "count": 1, "languages": 1 }, { - "order": 753, + "order": 760, "name": "juli-m4", "count": 1, "languages": 1 }, { - "order": 754, + "order": 761, "name": "jchernandez87", "count": 1, "languages": 1 }, { - "order": 755, + "order": 762, "name": "juan-cruz01", "count": 1, "languages": 1 }, { - "order": 756, + "order": 763, "name": "kronoscba", "count": 1, "languages": 1 }, { - "order": 757, + "order": 764, "name": "claudios1980", "count": 1, "languages": 1 }, { - "order": 758, + "order": 765, "name": "natanaelzubiri", "count": 1, "languages": 1 }, { - "order": 759, + "order": 766, "name": "lizzymaken", "count": 1, "languages": 1 }, { - "order": 760, + "order": 767, "name": "jereaguilar", "count": 1, "languages": 1 }, { - "order": 761, + "order": 768, "name": "neshurtado", "count": 1, "languages": 1 }, { - "order": 762, + "order": 769, "name": "masenace", "count": 1, "languages": 1 }, { - "order": 763, + "order": 770, "name": "idiegorojas", "count": 1, "languages": 1 }, { - "order": 764, + "order": 771, "name": "chema-dw", "count": 1, "languages": 1 }, { - "order": 765, + "order": 772, "name": "latorredev", "count": 1, "languages": 1 }, { - "order": 766, + "order": 773, "name": "jandortiz", "count": 1, "languages": 1 }, { - "order": 767, + "order": 774, "name": "demegorash", "count": 1, "languages": 1 }, { - "order": 768, + "order": 775, "name": "deivimiller", "count": 1, "languages": 1 }, { - "order": 769, + "order": 776, "name": "snowcardenas", "count": 1, "languages": 1 }, { - "order": 770, + "order": 777, "name": "xalejandrow", "count": 1, "languages": 1 }, { - "order": 771, + "order": 778, "name": "wallsified", "count": 1, "languages": 1 }, { - "order": 772, + "order": 779, "name": "sherkla12e", "count": 1, "languages": 1 }, { - "order": 773, + "order": 780, "name": "luiscalle17", "count": 1, "languages": 1 }, { - "order": 774, + "order": 781, "name": "turudev1979", "count": 1, "languages": 1 }, { - "order": 775, + "order": 782, "name": "miguelmancebo", "count": 1, "languages": 1 }, { - "order": 776, + "order": 783, "name": "alejandro000", "count": 1, "languages": 1 }, { - "order": 777, + "order": 784, "name": "miguelangel861", "count": 1, "languages": 1 }, { - "order": 778, + "order": 785, "name": "obed-tc", "count": 1, "languages": 1 }, { - "order": 779, + "order": 786, "name": "krisipo", "count": 1, "languages": 1 }, { - "order": 780, + "order": 787, "name": "davidgramiro", "count": 1, "languages": 1 }, { - "order": 781, + "order": 788, "name": "luceldasilva", "count": 1, "languages": 1 }, { - "order": 782, + "order": 789, "name": "m4xxdev", "count": 1, "languages": 1 }, { - "order": 783, + "order": 790, "name": "jrgranadosb", "count": 1, "languages": 1 }, { - "order": 784, + "order": 791, "name": "90dread", "count": 1, "languages": 1 }, { - "order": 785, + "order": 792, "name": "dimanu-py", "count": 1, "languages": 1 }, { - "order": 786, + "order": 793, "name": "marcelinoarias369", "count": 1, "languages": 1 }, { - "order": 787, + "order": 794, "name": "gmedinat911", "count": 1, "languages": 1 }, { - "order": 788, + "order": 795, "name": "alejarandro", "count": 1, "languages": 1 }, { - "order": 789, + "order": 796, "name": "e-xtian", "count": 1, "languages": 1 }, { - "order": 790, + "order": 797, "name": "tashidian", "count": 1, "languages": 1 }, { - "order": 791, + "order": 798, "name": "eljavi0", "count": 1, "languages": 1 }, { - "order": 792, + "order": 799, "name": "xtinarita", "count": 1, "languages": 1 }, { - "order": 793, + "order": 800, "name": "pr1de-23", "count": 1, "languages": 1 }, { - "order": 794, + "order": 801, "name": "diegogomezcor4", "count": 1, "languages": 1 }, { - "order": 795, + "order": 802, "name": "v0l0v", "count": 1, "languages": 1 }, { - "order": 796, + "order": 803, "name": "carlostoledoe", "count": 1, "languages": 1 }, { - "order": 797, + "order": 804, + "name": "lisandroarnodo", + "count": 1, + "languages": 1 + }, + { + "order": 805, "name": "pablom-2015", "count": 1, "languages": 1 }, { - "order": 798, + "order": 806, "name": "jafuma0320", "count": 1, "languages": 1 }, { - "order": 799, + "order": 807, "name": "yamiyugi25", "count": 1, "languages": 1 }, { - "order": 800, + "order": 808, "name": "bassalex27", "count": 1, "languages": 1 }, { - "order": 801, + "order": 809, "name": "devkenn", "count": 1, "languages": 1 }, { - "order": 802, + "order": 810, "name": "vmarialuzm", "count": 1, "languages": 1 }, { - "order": 803, + "order": 811, "name": "francgci", "count": 1, "languages": 1 }, { - "order": 804, + "order": 812, "name": "yetlanezils", "count": 1, "languages": 1 }, { - "order": 805, + "order": 813, "name": "judithernandez", "count": 1, "languages": 1 }, { - "order": 806, + "order": 814, "name": "cris10026", "count": 1, "languages": 1 }, { - "order": 807, + "order": 815, "name": "dakkaj", "count": 1, "languages": 1 }, { - "order": 808, + "order": 816, "name": "ferngpv", "count": 1, "languages": 1 }, { - "order": 809, + "order": 817, "name": "mamartinez14", "count": 1, "languages": 1 }, { - "order": 810, + "order": 818, "name": "emmanuelmmontesinos ", "count": 1, "languages": 1 }, { - "order": 811, + "order": 819, "name": "experthacker444", "count": 1, "languages": 1 }, { - "order": 812, + "order": 820, "name": "pushodev", "count": 1, "languages": 1 }, { - "order": 813, + "order": 821, "name": "ignacioskm", "count": 1, "languages": 1 }, { - "order": 814, + "order": 822, "name": "luisangeles20", "count": 1, "languages": 1 }, { - "order": 815, + "order": 823, "name": "xcortes", "count": 1, "languages": 1 }, { - "order": 816, + "order": 824, "name": "isaacdci", "count": 1, "languages": 1 }, { - "order": 817, + "order": 825, "name": "yeisongil", "count": 1, "languages": 1 }, { - "order": 818, + "order": 826, "name": "jalonso76", "count": 1, "languages": 1 }, { - "order": 819, + "order": 827, "name": "devjerez", "count": 1, "languages": 1 }, { - "order": 820, + "order": 828, "name": "betulioo", "count": 1, "languages": 1 }, { - "order": 821, + "order": 829, "name": "neftalyr", "count": 1, "languages": 1 }, { - "order": 822, + "order": 830, "name": "josuelopez5", "count": 1, "languages": 1 }, { - "order": 823, + "order": 831, "name": "vickalck", "count": 1, "languages": 1 }, { - "order": 824, + "order": 832, "name": "xhinto", "count": 1, "languages": 1 }, { - "order": 825, + "order": 833, "name": "jgregoris", "count": 1, "languages": 1 }, { - "order": 826, + "order": 834, "name": "sofiamfernandez", "count": 1, "languages": 1 }, { - "order": 827, + "order": 835, "name": "g4nd4lf", "count": 1, "languages": 1 }, { - "order": 828, + "order": 836, "name": "manueldenisdev", "count": 1, "languages": 1 }, { - "order": 829, + "order": 837, "name": "kshields51", "count": 1, "languages": 1 }, { - "order": 830, + "order": 838, "name": "omar8102", "count": 1, "languages": 1 }, { - "order": 831, + "order": 839, "name": "lluistech", "count": 1, "languages": 1 }, { - "order": 832, + "order": 840, "name": "vicvilla30", "count": 1, "languages": 1 }, { - "order": 833, + "order": 841, "name": "gilbertho502", "count": 1, "languages": 1 }, { - "order": 834, + "order": 842, "name": "13sauca13", "count": 1, "languages": 1 }, { - "order": 835, + "order": 843, "name": "cd1974", "count": 1, "languages": 1 }, { - "order": 836, + "order": 844, "name": "salas89", "count": 1, "languages": 1 }, { - "order": 837, + "order": 845, "name": "eatsangels", "count": 1, "languages": 1 }, { - "order": 838, + "order": 846, "name": "sergiomhernandez", "count": 1, "languages": 1 }, { - "order": 839, + "order": 847, "name": "carlosbb70", "count": 1, "languages": 1 }, { - "order": 840, + "order": 848, "name": "mjordanaam", "count": 1, "languages": 1 }, { - "order": 841, + "order": 849, "name": "howlett9999", "count": 1, "languages": 1 }, { - "order": 842, + "order": 850, "name": "copamire", "count": 1, "languages": 1 }, { - "order": 843, + "order": 851, "name": "erickcis", "count": 1, "languages": 1 }, { - "order": 844, + "order": 852, "name": "and-y21", "count": 1, "languages": 1 }, { - "order": 845, + "order": 853, "name": "leo18q", "count": 1, "languages": 1 }, { - "order": 846, + "order": 854, "name": "adcarret", "count": 1, "languages": 1 }, { - "order": 847, + "order": 855, "name": "arturodlapaz17", "count": 1, "languages": 1 }, { - "order": 848, + "order": 856, "name": "danidan1214", "count": 1, "languages": 1 }, { - "order": 849, + "order": 857, "name": "julioorozco05", "count": 1, "languages": 1 }, { - "order": 850, + "order": 858, "name": "juanalbornoz32", "count": 1, "languages": 1 }, { - "order": 851, + "order": 859, "name": "ambrociojrdelacruz", "count": 1, "languages": 1 }, { - "order": 852, + "order": 860, "name": "manuu42", "count": 1, "languages": 1 }, { - "order": 853, + "order": 861, "name": "sergiovelayos", "count": 1, "languages": 1 }, { - "order": 854, + "order": 862, "name": "snowale", "count": 1, "languages": 1 }, { - "order": 855, + "order": 863, + "name": "rastaxico", + "count": 1, + "languages": 1 + }, + { + "order": 864, "name": "gl-informatica", "count": 1, "languages": 1 }, { - "order": 856, + "order": 865, "name": "dacaldev", "count": 1, "languages": 1 }, { - "order": 857, + "order": 866, "name": "javirr4", "count": 1, "languages": 1 }, { - "order": 858, + "order": 867, "name": "amitchellg", "count": 1, "languages": 1 }, { - "order": 859, + "order": 868, "name": "henrydavidprimera", "count": 1, "languages": 1 }, { - "order": 860, + "order": 869, + "name": "oxtornado", + "count": 1, + "languages": 1 + }, + { + "order": 870, "name": "cristianvergaraf", "count": 1, "languages": 1 }, { - "order": 861, + "order": 871, "name": "geridage", "count": 1, "languages": 1 }, { - "order": 862, + "order": 872, "name": "osneidert", "count": 1, "languages": 1 }, { - "order": 863, + "order": 873, "name": "perla-zg", "count": 1, "languages": 1 }, { - "order": 864, + "order": 874, "name": "zeraven09", "count": 1, "languages": 1 }, { - "order": 865, + "order": 875, "name": "acobo3", "count": 1, "languages": 1 }, { - "order": 866, + "order": 876, "name": "fergz1988", "count": 1, "languages": 1 }, { - "order": 867, + "order": 877, "name": "johao23", "count": 1, "languages": 1 }, { - "order": 868, + "order": 878, "name": "hnaranjog", "count": 1, "languages": 1 }, { - "order": 869, + "order": 879, "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { - "order": 870, + "order": 880, "name": "jgarteag", "count": 1, "languages": 1 }, { - "order": 871, + "order": 881, "name": "ndepaul82", "count": 1, "languages": 1 }, { - "order": 872, + "order": 882, "name": "neusier101", "count": 1, "languages": 1 }, { - "order": 873, + "order": 883, "name": "wilsonbarrera", "count": 1, "languages": 1 }, { - "order": 874, + "order": 884, "name": "mrf1989", "count": 1, "languages": 1 }, { - "order": 875, + "order": 885, "name": "charly024", "count": 1, "languages": 1 }, { - "order": 876, + "order": 886, "name": "nico70012", "count": 1, "languages": 1 }, { - "order": 877, + "order": 887, "name": "gersonoroz", "count": 1, "languages": 1 }, { - "order": 878, + "order": 888, "name": "johannmanrique", "count": 1, "languages": 1 }, { - "order": 879, + "order": 889, "name": "facundorsabia", "count": 1, "languages": 1 }, { - "order": 880, + "order": 890, "name": "cisneros2404", "count": 1, "languages": 1 }, { - "order": 881, + "order": 891, "name": "josem17-cyber", "count": 1, "languages": 1 }, { - "order": 882, + "order": 892, "name": "sbngl", "count": 1, "languages": 1 }, { - "order": 883, + "order": 893, "name": "x3mboy", "count": 1, "languages": 1 }, { - "order": 884, + "order": 894, "name": "van-02", "count": 1, "languages": 1 }, { - "order": 885, + "order": 895, "name": "franciscokarriere", "count": 1, "languages": 1 }, { - "order": 886, + "order": 896, "name": "jd-gm", "count": 1, "languages": 1 }, { - "order": 887, + "order": 897, "name": "fzcarlitos", "count": 1, "languages": 1 }, { - "order": 888, + "order": 898, "name": "dmhenaopa", "count": 1, "languages": 1 }, { - "order": 889, + "order": 899, "name": "gerespinosa", "count": 1, "languages": 1 }, { - "order": 890, + "order": 900, "name": "alexis0717", "count": 1, "languages": 1 }, { - "order": 891, + "order": 901, "name": "rojasvargas", "count": 1, "languages": 1 }, { - "order": 892, + "order": 902, "name": "alexxawada", "count": 1, "languages": 1 }, { - "order": 893, + "order": 903, "name": "lopesteban", "count": 1, "languages": 1 }, { - "order": 894, + "order": 904, "name": "lytsar", "count": 1, "languages": 1 }, { - "order": 895, + "order": 905, "name": "jsruedatorres", "count": 1, "languages": 1 }, { - "order": 896, + "order": 906, "name": "fullstackarlo", "count": 1, "languages": 1 }, { - "order": 897, + "order": 907, "name": "brayancordova1", "count": 1, "languages": 1 }, { - "order": 898, + "order": 908, "name": "francescoalterio", "count": 1, "languages": 1 }, { - "order": 899, + "order": 909, "name": "francomoreira", "count": 1, "languages": 1 }, { - "order": 900, + "order": 910, "name": "kenzambrano", "count": 1, "languages": 1 }, { - "order": 901, + "order": 911, "name": "edperez07", "count": 1, "languages": 1 }, { - "order": 902, + "order": 912, "name": "edgonzz", "count": 1, "languages": 1 }, { - "order": 903, + "order": 913, "name": "siuldev", "count": 1, "languages": 1 }, { - "order": 904, + "order": 914, "name": "vmga09", "count": 1, "languages": 1 }, { - "order": 905, + "order": 915, + "name": "akaidmaru", + "count": 1, + "languages": 1 + }, + { + "order": 916, "name": "frcan89", "count": 1, "languages": 1 }, { - "order": 906, + "order": 917, "name": "jpiacaruso", "count": 1, "languages": 1 }, { - "order": 907, + "order": 918, "name": "m4xisil", "count": 1, "languages": 1 }, { - "order": 908, + "order": 919, "name": "leydimadrid", "count": 1, "languages": 1 }, { - "order": 909, + "order": 920, "name": "albabp", "count": 1, "languages": 1 }, { - "order": 910, + "order": 921, "name": "juanpablo-a", "count": 1, "languages": 1 }, { - "order": 911, + "order": 922, "name": "cgomezadolfo", "count": 1, "languages": 1 }, { - "order": 912, + "order": 923, "name": "lfam200", "count": 1, "languages": 1 }, { - "order": 913, + "order": 924, + "name": "nfom24", + "count": 1, + "languages": 1 + }, + { + "order": 925, "name": "kocho03", "count": 1, "languages": 1 }, { - "order": 914, + "order": 926, "name": "yessikamichelle", "count": 1, "languages": 1 }, { - "order": 915, + "order": 927, "name": "fernandofl", "count": 1, "languages": 1 }, { - "order": 916, + "order": 928, "name": "peticas", "count": 1, "languages": 1 }, { - "order": 917, + "order": 929, "name": "royhuamanavila", "count": 1, "languages": 1 }, { - "order": 918, + "order": 930, "name": "afl0r3s", "count": 1, "languages": 1 }, { - "order": 919, + "order": 931, "name": "abengl", "count": 1, "languages": 1 }, { - "order": 920, + "order": 932, "name": "isnatthy", "count": 1, "languages": 1 }, { - "order": 921, + "order": 933, "name": "lfwzk", "count": 1, "languages": 1 }, { - "order": 922, + "order": 934, "name": "denisortega", "count": 1, "languages": 1 }, { - "order": 923, + "order": 935, "name": "johnniew81", "count": 1, "languages": 1 }, { - "order": 924, + "order": 936, "name": "sergioab7", "count": 1, "languages": 1 }, { - "order": 925, + "order": 937, "name": "joseperesini", "count": 1, "languages": 1 }, { - "order": 926, + "order": 938, "name": "aleclto7", "count": 1, "languages": 1 }, { - "order": 927, + "order": 939, "name": "pierre-ol", "count": 1, "languages": 1 }, { - "order": 928, + "order": 940, "name": "sixtodev", "count": 1, "languages": 1 }, { - "order": 929, + "order": 941, "name": "nnunezmedina", "count": 1, "languages": 1 }, { - "order": 930, + "order": 942, "name": "conrado85", "count": 1, "languages": 1 }, { - "order": 931, + "order": 943, "name": "patricioguerra30", "count": 1, "languages": 1 }, { - "order": 932, + "order": 944, "name": "walkerlyna", "count": 1, "languages": 1 }, { - "order": 933, + "order": 945, "name": "augustbs", "count": 1, "languages": 1 }, { - "order": 934, + "order": 946, "name": "gc796", "count": 1, "languages": 1 }, { - "order": 935, + "order": 947, "name": "diegoxxd", "count": 1, "languages": 1 }, { - "order": 936, + "order": 948, "name": "ronnieruuz", "count": 1, "languages": 1 }, { - "order": 937, + "order": 949, "name": "nozodev", "count": 1, "languages": 1 }, { - "order": 938, + "order": 950, "name": "pointfs", "count": 1, "languages": 1 }, { - "order": 939, + "order": 951, "name": "saintsluis", "count": 1, "languages": 1 }, { - "order": 940, + "order": 952, "name": "cliverjimny123", "count": 1, "languages": 1 }, { - "order": 941, + "order": 953, "name": "mekanicas", "count": 1, "languages": 1 }, { - "order": 942, + "order": 954, "name": "vainsito1", "count": 1, "languages": 1 }, { - "order": 943, + "order": 955, "name": "kouski", "count": 1, "languages": 1 }, { - "order": 944, + "order": 956, "name": "ricarsur", "count": 1, "languages": 1 }, { - "order": 945, + "order": 957, "name": "s9code", "count": 1, "languages": 1 }, { - "order": 946, + "order": 958, "name": "jacobrwx", "count": 1, "languages": 1 }, { - "order": 947, + "order": 959, "name": "dianelis1", "count": 1, "languages": 1 }, { - "order": 948, + "order": 960, "name": "oscarletelier", "count": 1, "languages": 1 }, { - "order": 949, + "order": 961, "name": "l3v1xx", "count": 1, "languages": 1 }, { - "order": 950, + "order": 962, "name": "codejoss", "count": 1, "languages": 1 }, { - "order": 951, + "order": 963, "name": "miguelsarm", "count": 1, "languages": 1 }, { - "order": 952, + "order": 964, "name": "romanocoder", "count": 1, "languages": 1 }, { - "order": 953, + "order": 965, "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { - "order": 954, + "order": 966, "name": "hfvaronb", "count": 1, "languages": 1 }, { - "order": 955, + "order": 967, "name": "flarien", "count": 1, "languages": 1 }, { - "order": 956, + "order": 968, "name": "abraham9804", "count": 1, "languages": 1 }, { - "order": 957, + "order": 969, "name": "sejotaz", "count": 1, "languages": 1 }, { - "order": 958, + "order": 970, "name": "gustavoguerrero", "count": 1, "languages": 1 }, { - "order": 959, + "order": 971, "name": "javieradev", "count": 1, "languages": 1 }, { - "order": 960, + "order": 972, "name": "frannm29", "count": 1, "languages": 1 }, { - "order": 961, + "order": 973, "name": "mvillegas18", "count": 1, "languages": 1 }, { - "order": 962, + "order": 974, "name": "antonioverdugo", "count": 1, "languages": 1 }, { - "order": 963, + "order": 975, "name": "kronomio", "count": 1, "languages": 1 }, { - "order": 964, + "order": 976, "name": "quirogapau", "count": 1, "languages": 1 }, { - "order": 965, + "order": 977, "name": "ercky1980", "count": 1, "languages": 1 }, { - "order": 966, + "order": 978, "name": "madelefonb", "count": 1, "languages": 1 }, { - "order": 967, + "order": 979, "name": "imista", "count": 1, "languages": 1 }, { - "order": 968, + "order": 980, "name": "mhrosariom", "count": 1, "languages": 1 }, { - "order": 969, + "order": 981, "name": "mdemena", "count": 1, "languages": 1 }, { - "order": 970, + "order": 982, "name": "luchof5", "count": 1, "languages": 1 }, { - "order": 971, + "order": 983, "name": "nicorey89", "count": 1, "languages": 1 }, { - "order": 972, + "order": 984, "name": "santaravena", "count": 1, "languages": 1 }, { - "order": 973, + "order": 985, "name": "xnomada", "count": 1, "languages": 1 }, { - "order": 974, + "order": 986, "name": "yaojema", "count": 1, "languages": 1 }, { - "order": 975, + "order": 987, "name": "diego-santana23", "count": 1, "languages": 1 }, { - "order": 976, + "order": 988, "name": "aidicoop", "count": 1, "languages": 1 }, { - "order": 977, + "order": 989, "name": "agus-ig", "count": 1, "languages": 1 }, { - "order": 978, + "order": 990, "name": "dacronik", "count": 1, "languages": 1 }, { - "order": 979, + "order": 991, "name": "alemar16", "count": 1, "languages": 1 }, { - "order": 980, + "order": 992, "name": "alvarommedia", "count": 1, "languages": 1 }, { - "order": 981, + "order": 993, "name": "rodmiggithub", "count": 1, "languages": 1 }, { - "order": 982, + "order": 994, "name": "lucianogriffa", "count": 1, "languages": 1 }, { - "order": 983, + "order": 995, "name": "datrujillog", "count": 1, "languages": 1 }, { - "order": 984, + "order": 996, "name": "kevinramirez28", "count": 1, "languages": 1 }, { - "order": 985, + "order": 997, "name": "chriszaldana", "count": 1, "languages": 1 }, { - "order": 986, + "order": 998, "name": "1978acb", "count": 1, "languages": 1 }, { - "order": 987, + "order": 999, "name": "maximotoro", "count": 1, "languages": 1 }, { - "order": 988, + "order": 1000, "name": "bjchavez", "count": 1, "languages": 1 }, { - "order": 989, + "order": 1001, "name": "seigigim", "count": 1, "languages": 1 }, { - "order": 990, + "order": 1002, "name": "gizelads", "count": 1, "languages": 1 }, { - "order": 991, + "order": 1003, "name": "mauricioyair", "count": 1, "languages": 1 }, { - "order": 992, + "order": 1004, "name": "is2095", "count": 1, "languages": 1 }, { - "order": 993, + "order": 1005, "name": "axelwestman", "count": 1, "languages": 1 }, { - "order": 994, + "order": 1006, "name": "manugonzalito", "count": 1, "languages": 1 }, { - "order": 995, + "order": 1007, "name": "coletonosh", "count": 1, "languages": 1 }, { - "order": 996, + "order": 1008, "name": "deaconst", "count": 1, "languages": 1 }, { - "order": 997, + "order": 1009, "name": "cibacoa", "count": 1, "languages": 1 }, { - "order": 998, + "order": 1010, "name": "feliaguirre7", "count": 1, "languages": 1 }, { - "order": 999, + "order": 1011, "name": "rulo77", "count": 1, "languages": 1 }, { - "order": 1000, + "order": 1012, "name": "marcosapodaca", "count": 1, "languages": 1 }, { - "order": 1001, + "order": 1013, "name": "manuhssj", "count": 1, "languages": 1 }, { - "order": 1002, + "order": 1014, "name": "serg032", "count": 1, "languages": 1 }, { - "order": 1003, + "order": 1015, "name": "lucc4sz", "count": 1, "languages": 1 }, { - "order": 1004, + "order": 1016, "name": "jancalos", "count": 1, "languages": 1 }, { - "order": 1005, + "order": 1017, "name": "javodevon", "count": 1, "languages": 1 }, { - "order": 1006, + "order": 1018, "name": "astriebeck", "count": 1, "languages": 1 }, { - "order": 1007, + "order": 1019, "name": "ishimaku", "count": 1, "languages": 1 }, { - "order": 1008, + "order": 1020, "name": "afacorroloscos", "count": 1, "languages": 1 }, { - "order": 1009, + "order": 1021, "name": "ledyam", "count": 1, "languages": 1 }, { - "order": 1010, + "order": 1022, "name": "jatomas", "count": 1, "languages": 1 }, { - "order": 1011, + "order": 1023, "name": "marqitos", "count": 1, "languages": 1 }, { - "order": 1012, + "order": 1024, "name": "marvinagui", "count": 1, "languages": 1 }, { - "order": 1013, + "order": 1025, "name": "lobogeekmx", "count": 1, "languages": 1 }, { - "order": 1014, + "order": 1026, "name": "rocadev2714", "count": 1, "languages": 1 }, { - "order": 1015, + "order": 1027, "name": "rootqui", "count": 1, "languages": 1 }, { - "order": 1016, + "order": 1028, "name": "miguelgargallo", "count": 1, "languages": 1 }, { - "order": 1017, + "order": 1029, "name": "sandrarg85", "count": 1, "languages": 1 }, { - "order": 1018, + "order": 1030, "name": "protpus98", "count": 1, "languages": 1 }, { - "order": 1019, + "order": 1031, "name": "pkmaventura", "count": 1, "languages": 1 }, { - "order": 1020, + "order": 1032, "name": "jcrobles99", "count": 1, "languages": 1 }, { - "order": 1021, + "order": 1033, "name": "nunezlagos", "count": 1, "languages": 1 }, { - "order": 1022, + "order": 1034, "name": "chrisfelixgil", "count": 1, "languages": 1 }, { - "order": 1023, + "order": 1035, "name": "deimoshall", "count": 1, "languages": 1 }, { - "order": 1024, + "order": 1036, "name": "fede6299", "count": 1, "languages": 1 }, { - "order": 1025, + "order": 1037, "name": "darkohokage", "count": 1, "languages": 1 }, { - "order": 1026, + "order": 1038, "name": "pablo-lnx", "count": 1, "languages": 1 }, { - "order": 1027, + "order": 1039, "name": "kevin05m", "count": 1, "languages": 1 }, { - "order": 1028, + "order": 1040, "name": "diegomm27", "count": 1, "languages": 1 }, { - "order": 1029, + "order": 1041, "name": "joferpg", "count": 1, "languages": 1 }, { - "order": 1030, + "order": 1042, "name": "mbmaeso", "count": 1, "languages": 1 }, { - "order": 1031, + "order": 1043, "name": "braiso-22", "count": 1, "languages": 1 }, { - "order": 1032, + "order": 1044, "name": "deiiviitdev", "count": 1, "languages": 1 }, { - "order": 1033, + "order": 1045, "name": "alvarominarro", "count": 1, "languages": 1 }, { - "order": 1034, + "order": 1046, "name": "borjadelgadodev", "count": 1, "languages": 1 }, { - "order": 1035, + "order": 1047, "name": "elpeque29", "count": 1, "languages": 1 }, { - "order": 1036, + "order": 1048, "name": "jaennova", "count": 1, "languages": 1 }, { - "order": 1037, + "order": 1049, "name": "luisalberto22", "count": 1, "languages": 1 }, { - "order": 1038, + "order": 1050, "name": "daniel-cas", "count": 1, "languages": 1 }, { - "order": 1039, + "order": 1051, "name": "davidcv-dev", "count": 1, "languages": 1 }, { - "order": 1040, + "order": 1052, "name": "francisleble", "count": 1, "languages": 1 }, { - "order": 1041, + "order": 1053, "name": "jhordanluyo", "count": 1, "languages": 1 }, { - "order": 1042, + "order": 1054, "name": "acirdevelper", "count": 1, "languages": 1 }, { - "order": 1043, + "order": 1055, "name": "marcosjarrin", "count": 1, "languages": 1 }, { - "order": 1044, + "order": 1056, "name": "implevacui", "count": 1, "languages": 1 }, { - "order": 1045, + "order": 1057, "name": "jandresalvar", "count": 1, "languages": 1 }, { - "order": 1046, + "order": 1058, "name": "ca2puntosv", "count": 1, "languages": 1 }, { - "order": 1047, + "order": 1059, "name": "angelcruzg23", "count": 1, "languages": 1 }, { - "order": 1048, + "order": 1060, "name": "corvo-99", "count": 1, "languages": 1 }, { - "order": 1049, + "order": 1061, "name": "devm0nk3y", "count": 1, "languages": 1 }, { - "order": 1050, + "order": 1062, "name": "danielcastillo1112", "count": 1, "languages": 1 }, { - "order": 1051, + "order": 1063, "name": "sirvega83", "count": 1, "languages": 1 }, { - "order": 1052, + "order": 1064, "name": "franpua", "count": 1, "languages": 1 }, { - "order": 1053, + "order": 1065, "name": "malkarmah", "count": 1, "languages": 1 }, { - "order": 1054, + "order": 1066, "name": "palons29", "count": 1, "languages": 1 }, { - "order": 1055, + "order": 1067, "name": "diegopardomontero", "count": 1, "languages": 1 }, { - "order": 1056, + "order": 1068, "name": "robermejia", "count": 1, "languages": 1 }, { - "order": 1057, + "order": 1069, "name": "zyn7e", "count": 1, "languages": 1 }, { - "order": 1058, + "order": 1070, "name": "javiir", "count": 1, "languages": 1 }, { - "order": 1059, + "order": 1071, "name": "antoniojzp86", "count": 1, "languages": 1 }, { - "order": 1060, + "order": 1072, "name": "v1k770r", "count": 1, "languages": 1 }, { - "order": 1061, + "order": 1073, "name": "clespinosa2024", "count": 1, "languages": 1 }, { - "order": 1062, + "order": 1074, "name": "gianellannie", "count": 1, "languages": 1 }, { - "order": 1063, + "order": 1075, "name": "dany3gs", "count": 1, "languages": 1 }, { - "order": 1064, + "order": 1076, "name": "queralesdev", "count": 1, "languages": 1 }, { - "order": 1065, + "order": 1077, "name": "bycris13", "count": 1, "languages": 1 }, { - "order": 1066, + "order": 1078, "name": "reneguzman7", "count": 1, "languages": 1 }, { - "order": 1067, + "order": 1079, "name": "adriansaint07", "count": 1, "languages": 1 }, { - "order": 1068, + "order": 1080, "name": "dovinhoyos", "count": 1, "languages": 1 }, { - "order": 1069, + "order": 1081, "name": "fredylopez01", "count": 1, "languages": 1 }, { - "order": 1070, + "order": 1082, "name": "lautimorales", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1083, "name": "jlrojano", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1084, "name": "jrgim", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1085, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1086, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1087, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1088, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1089, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1090, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1091, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1092, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1093, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1094, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1095, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1096, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1097, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1098, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1099, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1100, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1101, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1102, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1103, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1104, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1105, "name": "ivanserran", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1106, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1095, + "order": 1107, + "name": "nazhiravila", + "count": 1, + "languages": 1 + }, + { + "order": 1108, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1096, + "order": 1109, "name": "nolemoon", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1110, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1111, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1112, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1113, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1114, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1115, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1116, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1117, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1118, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1119, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1120, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1121, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1122, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1123, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1124, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1125, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1126, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1127, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1128, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1129, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1117, + "order": 1130, "name": "trollface77", "count": 1, "languages": 1 }, { - "order": 1118, + "order": 1131, "name": "brunom-93", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1132, "name": "jhonnfl", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1133, "name": "alejandroruiz23", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1134, "name": "jaimesoftdev", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1135, "name": "jarzatedev", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1136, "name": "edm1ya", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1137, + "name": "gabrielcharibpolls", + "count": 1, + "languages": 1 + }, + { + "order": 1138, "name": "serg-pq", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1139, "name": "tartabullroberto", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1140, "name": "alexisbarradev", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1141, "name": "lara-vel-dev", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1142, "name": "kelvincb", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1143, "name": "armm77", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1144, "name": "paluzz", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1145, "name": "arathhh8", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1146, "name": "1cel4nc3", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1147, "name": "theposi", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1148, "name": "vinyoles", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1149, "name": "omarroman29", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1150, "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1151, "name": "tetotille", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1152, "name": "luisgarm", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1153, "name": "pipeyz21", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1154, "name": "santiagomac", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1155, "name": "vorosdev", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1156, "name": "mickysoft", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1157, "name": "melonconyogurt", "count": 1, "languages": 1 }, { - "order": 1144, - "name": "cdryampi", - "count": 1, - "languages": 1 - }, - { - "order": 1145, + "order": 1158, "name": "bellodeveloper", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1159, "name": "nachitoe", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1160, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1148, + "order": 1161, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1149, + "order": 1162, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1150, + "order": 1163, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1151, + "order": 1164, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1152, + "order": 1165, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1153, + "order": 1166, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1154, + "order": 1167, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1155, + "order": 1168, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1156, + "order": 1169, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1157, + "order": 1170, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1158, + "order": 1171, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1159, + "order": 1172, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1160, + "order": 1173, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1161, + "order": 1174, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1162, + "order": 1175, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1163, + "order": 1176, "name": "qwik-zghieb", "count": 1, "languages": 1 }, { - "order": 1164, + "order": 1177, "name": "gonzalinuz18", "count": 1, "languages": 1 }, { - "order": 1165, + "order": 1178, "name": "tilordqwerty", "count": 1, "languages": 1 }, { - "order": 1166, + "order": 1179, "name": "dgquintero", "count": 1, "languages": 1 }, { - "order": 1167, + "order": 1180, "name": "torvicv", "count": 1, "languages": 1 }, { - "order": 1168, + "order": 1181, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1169, + "order": 1182, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1170, + "order": 1183, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1171, + "order": 1184, "name": "mvidab", "count": 1, "languages": 1 }, { - "order": 1172, + "order": 1185, "name": "leonardo-henao", "count": 1, "languages": 1 }, { - "order": 1173, + "order": 1186, "name": "pwrxman", "count": 1, "languages": 1 }, { - "order": 1174, + "order": 1187, "name": "c-blskv", "count": 1, "languages": 1 }, { - "order": 1175, + "order": 1188, "name": "emaerniquez", "count": 1, "languages": 1 }, { - "order": 1176, + "order": 1189, "name": "carolhs92", "count": 1, "languages": 1 }, { - "order": 1177, + "order": 1190, "name": "juancamilofvx", "count": 1, "languages": 1 }, { - "order": 1178, + "order": 1191, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1179, + "order": 1192, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1180, + "order": 1193, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1181, + "order": 1194, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1182, + "order": 1195, "name": "matinbohorquez", "count": 1, "languages": 1 }, { - "order": 1183, + "order": 1196, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1184, + "order": 1197, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1185, + "order": 1198, "name": "alecraft8", "count": 1, "languages": 1 }, { - "order": 1186, + "order": 1199, "name": "arperezinf", "count": 1, "languages": 1 }, { - "order": 1187, + "order": 1200, "name": "nightmare79", "count": 1, "languages": 1 }, { - "order": 1188, + "order": 1201, "name": "vikernes27666", "count": 1, "languages": 1 }, { - "order": 1189, + "order": 1202, "name": "cub-tor", "count": 1, "languages": 1 }, { - "order": 1190, + "order": 1203, "name": "carlosmperezm", "count": 1, "languages": 1 }, { - "order": 1191, + "order": 1204, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1192, + "order": 1205, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1193, + "order": 1206, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1194, + "order": 1207, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1195, + "order": 1208, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1196, + "order": 1209, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1197, + "order": 1210, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1198, + "order": 1211, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1199, + "order": 1212, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1200, + "order": 1213, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1201, + "order": 1214, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1202, + "order": 1215, "name": "ddaniel27", "count": 1, "languages": 1 From fd8c890150c6352ac12056fdf78ccb906094ab69 Mon Sep 17 00:00:00 2001 From: Amador Quispe Date: Mon, 23 Sep 2024 21:19:53 -0500 Subject: [PATCH 516/539] #34 JAVA --- .../java/AmadorQuispe.java" | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 "Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/java/AmadorQuispe.java" diff --git "a/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/java/AmadorQuispe.java" "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/java/AmadorQuispe.java" new file mode 100644 index 0000000000..410b62822d --- /dev/null +++ "b/Roadmap/34 - \303\201RBOL GENEAL\303\223GICO LA CASA DEL DRAG\303\223N/java/AmadorQuispe.java" @@ -0,0 +1,112 @@ +package com.amsoft.roadmap.example34; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class Example34 { + public static void main(String[] args) { + FamilyTree tree = new FamilyTree(); + + Person p1 = new Person("Persona 01"); + Person p2 = new Person("Persona 02"); + Person p3 = new Person("Persona 03"); + Person p4 = new Person("Persona 04"); + Person p5 = new Person("Persona 05"); + + p1.setPartner(p2); + p2.setPartner(p1); + + p1.addChildren(p3, p4); + p2.addChildren(p3, p4); + + p3.addChild(p5); + + tree.addPeople(p1, p2, p3, p4, p5); + + tree.printTree(); + } + + static class Person { + private final UUID id = UUID.randomUUID(); + private final String name; + private Person partner; + private List children; + + public Person(String name) { + this.name = name; + this.children = new ArrayList<>(); + } + + public UUID getId() { + return id; + } + + public String getName() { + return name; + } + + public Person getPartner() { + return partner; + } + + public void setPartner(Person partner) { + Optional.ofNullable(this.partner) + .ifPresentOrElse(p -> System.out.println("Error: " + this.name + " ya tiene pareja."), + () -> this.partner = partner); + } + + public List getChildren() { + return children; + } + + public void addChild(Person child) { + if (children.stream().noneMatch(c -> c.equals(child))) { + children = Stream.concat(children.stream(), Stream.of(child)) + .collect(Collectors.toList()); + } else { + System.out.println("Error: El hijo " + child.getName() + " ya existe."); + } + } + + + public void addChildren(Person... children) { + Arrays.stream(children) + .forEach(this::addChild); + } + } + + static class FamilyTree { + private List people; + + public FamilyTree() { + this.people = new ArrayList<>(); + } + + public void addPeople(Person... persons) { + people = Stream.concat(people.stream(), Arrays.stream(persons)) + .distinct() + .collect(Collectors.toList()); + } + + public void removePerson(Person person) { + Optional.of(people.remove(person)) + .ifPresentOrElse(p -> System.out.println(person.getName() + " eliminado."), + () -> System.out.println("Error: Persona no encontrada.")); + } + + public void printTree() { + people.forEach(person -> { + System.out.println("ID: " + person.getId() + ", Name: " + person.getName()); + Optional.ofNullable(person.getPartner()) + .ifPresent(p -> System.out.println(" Pareja: " + p.getName())); + if (!person.getChildren().isEmpty()) { + System.out.println(" Hijos: " + person.getChildren() + .stream() + .map(Person::getName) + .collect(Collectors.joining(", "))); + } + }); + } + } +} From 2f82f70208226b3e8f19f6b742b386e1e9f1d139 Mon Sep 17 00:00:00 2001 From: Amador Quispe Date: Mon, 23 Sep 2024 21:53:06 -0500 Subject: [PATCH 517/539] #35 JAVA --- .../java/AmadorQuispe.java | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/java/AmadorQuispe.java diff --git a/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/java/AmadorQuispe.java b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/java/AmadorQuispe.java new file mode 100644 index 0000000000..9eaf3aa188 --- /dev/null +++ b/Roadmap/35 - REPARTIENDO LOS ANILLOS DE PODER/java/AmadorQuispe.java @@ -0,0 +1,64 @@ +package com.amsoft.roadmap.example35; + +import java.util.Objects; +import java.util.Optional; +import java.util.Scanner; +import java.util.stream.IntStream; + +public class Example35 { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + System.out.print("Enter the total number of rings: "); + int totalRings = scanner.nextInt(); + + if (totalRings <= 1) { + System.out.println("Error: Not enough rings to distribute."); + return; + } + + int remainingRings = totalRings - 1; + + Optional result = findValidDistribution(remainingRings); + + result.ifPresentOrElse( + Example35::printDistribution, + () -> System.out.println("No valid distribution found for the given number of rings.") + ); + + scanner.close(); + } + + private static Optional findValidDistribution(int remainingRings) { + return IntStream.iterate(1, i -> i + 2) + .limit(remainingRings / 2) + .boxed() + .flatMap(elves -> IntStream.range(2, remainingRings) + .filter(Example35::isPrime) + .boxed() + .map(dwarves -> { + int men = remainingRings - elves - dwarves; + if (men > 0 && men % 2 == 0) { + return new Distribution(elves, dwarves, men); + } + return null; + }) + .filter(Objects::nonNull)) + .findFirst(); + } + + private static boolean isPrime(int number) { + return number > 1 && IntStream.rangeClosed(2, (int) Math.sqrt(number)) + .allMatch(i -> number % i != 0); + } + + private static void printDistribution(Distribution distribution) { + System.out.println("Valid distribution found:"); + System.out.println("Elves: " + distribution.elves()); + System.out.println("Dwarves: " + distribution.dwarves()); + System.out.println("Men: " + distribution.men()); + System.out.println("Sauron: 1"); + } + + record Distribution(int elves, int dwarves, int men) { + } +} From 32d79ecf1aeff2f227d5b421d671d59ee3501665 Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Tue, 24 Sep 2024 06:52:52 +0200 Subject: [PATCH 518/539] =?UTF-8?q?Correcci=C3=B3n=20Roadmap=2038=20en=20v?= =?UTF-8?q?=C3=ADdeo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2521f6b3e7..da5f4b20ce 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ |35|[REPARTIENDO LOS ANILLOS DE PODER](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/ejercicio.md)|[📝](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/python/mouredev.py)|[▶️](https://youtu.be/10i2dnaMLj8)|[👥](./Roadmap/35%20-%20REPARTIENDO%20LOS%20ANILLOS%20DE%20PODER/) |36|[EL SOMBRERO SELECCIONADOR](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/ejercicio.md)|[📝](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/python/mouredev.py)|[▶️](https://youtu.be/_UjOD587elY)|[👥](./Roadmap/36%20-%20EL%20SOMBRERO%20SELECCIONADOR/) |37|[OASIS VS LINKIN PARK](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/ejercicio.md)|[📝](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/python/mouredev.py)|[▶️](https://youtu.be/q-zBKriHupY)|[👥](./Roadmap/37%20-%20OASIS%20VS%20LINKIN%20PARK/) -|38|[MOUREDEV PRO](./Roadmap/38%20-%20MOUREDEV%20PRO/ejercicio.md)|[📝](./Roadmap/38%20-%20MOUREDEV%20PRO/python/mouredev.py)||[👥](./Roadmap/38%20-%20MOUREDEV%20PRO/) +|38|[MOUREDEV PRO](./Roadmap/38%20-%20MOUREDEV%20PRO/ejercicio.md)|[📝](./Roadmap/38%20-%20MOUREDEV%20PRO/python/mouredev.py)|[▶️](https://youtu.be/AbGROLoAVLs)|[👥](./Roadmap/38%20-%20MOUREDEV%20PRO/) |39|[BATMAN DAY](./Roadmap/39%20-%20BATMAN%20DAY/ejercicio.md)|[🗓️ 30/09/24](https://discord.gg/Ak6SdZZ8?event=1285336208586833930)||[👥](./Roadmap/39%20-%20BATMAN%20DAY/) ## Cursos en YouTube From 7e5cce211a1e40b5115cefbff0a3caa605a0ec49 Mon Sep 17 00:00:00 2001 From: jtovart Date: Tue, 24 Sep 2024 01:09:20 -0500 Subject: [PATCH 519/539] #00 - Cobol --- .../cobol/llonardo798.cbl | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/llonardo798.cbl diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/llonardo798.cbl b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/llonardo798.cbl new file mode 100644 index 0000000000..3603a191dc --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/cobol/llonardo798.cbl @@ -0,0 +1,68 @@ + + * CMENTARIO PERSONAL: + * No conozco nada de COBOL, pero al verlo en el roadmap de midudev + * me llamo la atención. + * Todo lo echo es a partir de la documentación de IBM, + * la IA de Gemini y los ejemplos de los usuarios. + + * 1. URL documentación no oficial: + * https://www.ibm.com/docs/es/i/7.3?topic=languages-cobol - IBM COBOL + + IDENTIFICATION DIVISION. + PROGRAM-ID. ROADMAP-MIDUDEV-00. + AUTHOR. LLONARDO798. + DATA DIVISION. + FILE SECTION. + WORKING-STORAGE SECTION. + + * 2. Formas de añadir comentarios + + * Comentarios con * al inicio en la columna 7 de la linea. + * hasta la columna 80. + / Comentario que provoca un salto de página en el listado de compilación. + *> Comentario flotante, todo lo puesto despues de *> es un comentario. + *> Se puede colocar en cualquier columna de la linea de codigo. + *REMARKS. + * Este programa realiza cálculos matemáticos básicos. + * Fue creado el 20 de septiembre de 2023. + * REMARKS no es soportado por todos los compiladores, aunque es parte del + * estandar COBOL original. + + * 3. Variables y constantes + * Variable numerica entera + + * En COBOL, las variables no existen de forma aislada. La declaración 01 + * crea un registro o grupo de datos llamado VARIABLES. + 01 VARIABLES. + 03 WS-NOMBRE PIC X(20). + + * Variables CONSTANTES no hay en COBOL, pero se puede definir un valor + * inicial con VALUE. + + 03 NUM-CONST PIC 99 VALUE 100. + + * 4. Tipos de datos primitivos no existen, estos son los "fundamentales" + 03 WS-CADENA PIC X(20) VALUE "Cobol". + *> Cadena de texto de 20 caracteres + + 03 WS-EDAD PIC 9(3). *> Número entero de hasta 3 dígitos + 03 WS-NUMERO PIC 99. *> Digitos numericos de 0-99 + 03 WS-NEGATIVO PIC S9. *> Número entero negativo + 03 WS-SALARIO PIC 9(7)V99. *> Números decimales + *> 7 enteros y 2 decimales + 03 WS-SALARIO-X PIC 9V99. *> Número decimal, la V indica la + *> posición del punto decimal + 03 WS-ES-MAYOR-EDAD PIC A(3). *> "SI" o "NO" (alfabético) + 03 WS-CODIGO-POSTAL PIC X(5). *> Código postal (alfanumérico) + 03 WS-BINARIO PIC 9(7)V9 COMP. + *> Número almacenado en memoria en formato binario 1/0 + + * 5. Impresión por consola + + PROCEDURE DIVISION. + MAIN-PROCEDURE. + MOVE "LEONARDO-AEDO" TO WS-NOMBRE. + DISPLAY WS-NOMBRE. + DISPLAY "¡Hola, " WS-CADENA "!". + STOP RUN. + END PROGRAM ROADMAP-MIDUDEV-00. \ No newline at end of file From aaf9d3c914937955e72e93d0c176052267abfe39 Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Tue, 24 Sep 2024 01:46:07 -0500 Subject: [PATCH 520/539] #20 java --- .../java/martinbohorquez.java | 149 ++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 Roadmap/20 - PETICIONES HTTP/java/martinbohorquez.java diff --git a/Roadmap/20 - PETICIONES HTTP/java/martinbohorquez.java b/Roadmap/20 - PETICIONES HTTP/java/martinbohorquez.java new file mode 100644 index 0000000000..7c38740ebc --- /dev/null +++ b/Roadmap/20 - PETICIONES HTTP/java/martinbohorquez.java @@ -0,0 +1,149 @@ +import com.google.gson.*; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +/** + * #20 PETICIONES HTTP + * + * com.google.code.gson + * gson + * 2.10.1 + * + * + * @author martinbohorquez + */ +public class martinbohorquez { + public static void main(String[] args) throws IOException, URISyntaxException { + getHttpResponse("https://www.moure.dev/"); + + /* + * DIFICULTAD EXTRA + */ + System.out.print("Introduce un nombre o número de Pokémon a buscar: "); + Scanner sc = new Scanner(System.in); + String pokemon = sc.nextLine().toLowerCase(); + + pokemonInfo(pokemon); + } + + private static HttpURLConnection getResponse(String url) throws URISyntaxException, IOException { + HttpURLConnection response = null; + int responseCode; + + while (true) { + URL obj = (new URI(url)).toURL(); + response = (HttpURLConnection) obj.openConnection(); + response.setRequestMethod("GET"); + response.setConnectTimeout(5000); + response.setReadTimeout(5000); + + responseCode = response.getResponseCode(); + + if (responseCode >= 300 && responseCode < 400) + System.out.printf("Redirecting to: %s%n", url = response.getHeaderField("Location")); + else break; + } + return response; + } + + private static void getHttpResponse(String url) throws IOException, URISyntaxException { + HttpURLConnection response = getResponse(url); + int responseCode = response.getResponseCode(); + + if (responseCode >= 200 && responseCode < 300) + try (BufferedReader in = new BufferedReader(new InputStreamReader(response.getInputStream()))) { + System.out.println(in.lines().collect(Collectors.joining())); + } + else System.out.printf("Error response código %d al realizar la petición", response.getResponseCode()); + } + + private static void pokemonInfo(String pokemon) throws URISyntaxException, IOException { + HttpURLConnection response = getResponse("https://pokeapi.co/api/v2/pokemon/" + pokemon); + int responseCode = response.getResponseCode(); + if (responseCode >= 200 && responseCode < 300) { + try (BufferedReader in = new BufferedReader(new InputStreamReader(response.getInputStream()))) { + String jsonString = in.lines().collect(Collectors.joining()); + Gson gson = new Gson(); + JsonObject jsonObject = gson.fromJson(jsonString, JsonObject.class); + + System.out.printf("Nombre: %s%n", jsonObject.get("name").getAsString()); + System.out.printf("ID: %s%n", jsonObject.get("id").getAsString()); + System.out.printf("Peso: %s%n", jsonObject.get("weight").getAsString()); + System.out.printf("Altura: %s%n", jsonObject.get("height").getAsString()); + + List types = StreamSupport.stream(jsonObject.getAsJsonArray("types").spliterator(), false) + .map(JsonElement::getAsJsonObject) + .map(typeObject -> typeObject.getAsJsonObject("type").get("name").getAsString()) + .toList(); + System.out.printf("Tipo(s): %s%n", types); + evolutionChain(pokemon); + List juegos = StreamSupport.stream(jsonObject.getAsJsonArray("game_indices").spliterator(), false) + .map(JsonElement::getAsJsonObject) + .map(typeObject -> typeObject.getAsJsonObject("version").get("name").getAsString()) + .toList(); + System.out.printf("Juegos: %s%n", juegos); + + } + } else System.out.printf("Error %d: Pokémon no encontrado!", response.getResponseCode()); + } + + private static void evolutionChain(String pokemon) throws URISyntaxException, IOException { + HttpURLConnection response = getResponse("https://pokeapi.co/api/v2/pokemon-species/" + pokemon); + int responseCode = response.getResponseCode(); + if (responseCode >= 200 && responseCode < 300) { + try (BufferedReader in = new BufferedReader(new InputStreamReader(response.getInputStream()))) { + String jsonString = in.lines().collect(Collectors.joining()); + Gson gson = new Gson(); + JsonObject jsonObject = gson.fromJson(jsonString, JsonObject.class); + + String url = jsonObject.get("evolution_chain").getAsJsonObject().get("url").getAsString(); + response = getResponse(url); + responseCode = response.getResponseCode(); + if (responseCode >= 200 && responseCode < 300) { + try (BufferedReader inS = new BufferedReader(new InputStreamReader(response.getInputStream()))) { + jsonString = inS.lines().collect(Collectors.joining()); + gson = new Gson(); + jsonObject = gson.fromJson(jsonString, JsonObject.class); + + StringBuilder evolutionChain = new StringBuilder(); + JsonObject chainObject = jsonObject.getAsJsonObject("chain"); + + System.out.println("Cadena(s) de evolución:"); + Map evolutionMap = new LinkedHashMap<>(); + getEvolveTo(evolutionMap, evolutionChain, chainObject).values().forEach(System.out::println); + } + } else System.out.printf("Error %d: obteniendo evoluciones!", response.getResponseCode()); + } + } else System.out.printf("Error %d: obteniendo evoluciones!", response.getResponseCode()); + } + + private static Map getEvolveTo(Map evolutionMap, StringBuilder evolutionChain, JsonObject chainObject) { + Set evolutionSet = new LinkedHashSet<>(); + JsonElement element = chainObject.getAsJsonObject("species").get("name"); + evolutionChain.append(element); + + JsonArray evolutions = chainObject.getAsJsonArray("evolves_to"); + for (int i = 0; i < evolutions.size(); i++) { + if (i != 0) { + int indexIni = evolutionChain.reverse().indexOf(" >- "); + int length = evolutionChain.reverse().length(); + evolutionChain.delete(length - indexIni - 4, length); + evolutionSet = new LinkedHashSet<>(); + } + evolutionChain.append(" -> "); + getEvolveTo(evolutionMap, evolutionChain, evolutions.get(i).getAsJsonObject()); + evolutionSet.add(evolutionChain.toString()); + if (!evolutionMap.containsValue(evolutionSet.toString())) evolutionMap.put(i, evolutionSet.toString()); + } + return evolutionMap; + } +} From f63a507f71c9d87e264ec5313c3138080e77ee90 Mon Sep 17 00:00:00 2001 From: blackriper Date: Tue, 24 Sep 2024 00:55:56 -0600 Subject: [PATCH 521/539] Reto#39-kotlin --- Roadmap/39 - BATMAN DAY/kotlin/blackriper.kt | 116 +++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 Roadmap/39 - BATMAN DAY/kotlin/blackriper.kt diff --git a/Roadmap/39 - BATMAN DAY/kotlin/blackriper.kt b/Roadmap/39 - BATMAN DAY/kotlin/blackriper.kt new file mode 100644 index 0000000000..a11d65337a --- /dev/null +++ b/Roadmap/39 - BATMAN DAY/kotlin/blackriper.kt @@ -0,0 +1,116 @@ + +import java.time.DayOfWeek +import java.time.LocalDate +import java.time.format.DateTimeFormatter +import java.time.temporal.IsoFields +import kotlin.math.abs + + +/* +Reto 1 +A partir de 2015, se estableció que el tercer sábado de septiembre sería la fecha oficial para celebrar el Batman Day en todo el mundo +**/ +fun getWeekNameAndNum(date: String): Pair{ + val dt= LocalDate.parse(date,DateTimeFormatter.ofPattern("dd/MM/yyyy")) + val numWeek=dt.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR) + return Pair(dt.dayOfWeek,numWeek) +} + +fun calculateCenturyBatmanDay(){ + var anniversary=85 + var year= LocalDate.now().year + + while (anniversary<=100){ + for (i in 1..30){ + val day=if (i<10) "0$i" else "$i" + val date=getWeekNameAndNum("$day/09/$year") + if (date.first== DayOfWeek.SATURDAY && date.second==38){ + println("Batman's ${anniversary}th anniversary of the year $year is on $day/09/$year") + } + } + anniversary++ + year++ + } + +} + + +//reto 2 + +const val GOTHAM_MAP=20 +const val MAX_UMBRAL=20 + + + +data class Sensor constructor( + var nameSector: String="", + var postionX: Int=0, + var postionY: Int=0, + var warningLevel: Int=0, + var sumThreat: Int=0 +) + +fun sensor(block: Sensor.()-> Unit):Sensor =Sensor().apply(block) + + +fun calculateSumThreat(sensor:Sensor): Int { + var sum=0 + for (i in sensor.postionX-1..sensor.postionX+1){ + for (j in sensor.postionY-1..sensor.postionY+1){ + if (i>=0 && i=0 && j){ + sensors.forEach { + it.sumThreat=calculateSumThreat(it) + + + } + val criticalZone=sensors.maxByOrNull { it.sumThreat } + if (criticalZone!=null){ + val center= Triple(criticalZone.nameSector,criticalZone.postionX,criticalZone.postionY) + val distance= abs(center.second)+abs(center.third) + println("El sector mas peligroso es ${center.first} ubicado en [${center.second},${center.third}]") + println("El sector ${center.first} se encuentra a una distancia de $distance de la baticueva") + if (criticalZone.sumThreat>MAX_UMBRAL) println("Protocolo de seguridad Activado") + else println("Protocolo de seguridad no Activado") + + } +} + +fun readGotham(){ + val sensors=listOf( + sensor { + nameSector="Distrito Diamante" + postionX=3 + postionY=3 + warningLevel=5 + }, + sensor { + nameSector="Iceberg Lounge" + postionX=12 + postionY=12 + warningLevel=7 + }, + sensor { + nameSector="Gotica Bank" + postionX=4 + postionY=4 + warningLevel=8 + } + ) + + scanningSensors(sensors) +} + + + + +fun main() { + calculateCenturyBatmanDay() + readGotham() + } \ No newline at end of file From 040768a5e5a5ab349201e5cc6549bfb8cdf4e11f Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Tue, 24 Sep 2024 09:39:44 +0200 Subject: [PATCH 522/539] #09 java --- Roadmap/09 - HERENCIA/java/eulogioep.java | 123 ++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 Roadmap/09 - HERENCIA/java/eulogioep.java diff --git a/Roadmap/09 - HERENCIA/java/eulogioep.java b/Roadmap/09 - HERENCIA/java/eulogioep.java new file mode 100644 index 0000000000..24e5c37319 --- /dev/null +++ b/Roadmap/09 - HERENCIA/java/eulogioep.java @@ -0,0 +1,123 @@ +// Clase base o superclase +class Animal { + protected String nombre; + + public Animal(String nombre) { + this.nombre = nombre; + } + + public String sonido() { + return "No hay sonido por defecto para el animal"; + } +} + +// Clase derivada o subclase de Animal +class Perro extends Animal { + public Perro(String nombre) { + super(nombre); + } + + @Override + public String sonido() { + return "Guau"; + } +} + +// Clase derivada o subclase de Animal +class Gato extends Animal { + public Gato(String nombre) { + super(nombre); + } + + @Override + public String sonido() { + return "Miau"; + } +} + +// Dificultad extra: Clase base para Empleados +class Empleado { + protected int identificador; + protected String nombre; + + public Empleado(int identificador, String nombre) { + this.identificador = identificador; + this.nombre = nombre; + } + + public int getIdentificador() { + return identificador; + } + + public String getNombre() { + return nombre; + } +} + +// Clase derivada de Empleado para Gerentes +class Gerente extends Empleado { + private int cantidadEmpleados; + + public Gerente(int identificador, String nombre, int cantidadEmpleados) { + super(identificador, nombre); + this.cantidadEmpleados = cantidadEmpleados; + } + + public void setCantidadEmpleados(int cantidadEmpleados) { + this.cantidadEmpleados = cantidadEmpleados; + } + + public int getCantidadEmpleados() { + return cantidadEmpleados; + } +} + +// Clase derivada de Empleado para Gerentes de Proyectos +class GerenteDeProyecto extends Empleado { + private String proyecto; + + public GerenteDeProyecto(int identificador, String nombre, String proyecto) { + super(identificador, nombre); + this.proyecto = proyecto; + } + + public String getProyecto() { + return proyecto; + } +} + +// Clase derivada de Empleado para Programadores +class Programador extends Empleado { + private String lenguajeFavorito; + + public Programador(int identificador, String nombre, String lenguajeFavorito) { + super(identificador, nombre); + this.lenguajeFavorito = lenguajeFavorito; + } + + public String getLenguajeFavorito() { + return lenguajeFavorito; + } +} + +public class EulogioEP { + public static void main(String[] args) { + // Instancia de las subclases de Animal + Perro perro = new Perro("Bobby"); + Gato gato = new Gato("Whiskers"); + + // Llamado a la función sonido() en las instancias de las subclases + System.out.println(perro.nombre + ": " + perro.sonido()); + System.out.println(gato.nombre + ": " + gato.sonido()); + + // Instancia de las subclases de Empleado + Gerente gerente = new Gerente(1001, "Juan Pérez", 10); + GerenteDeProyecto gerenteProyecto = new GerenteDeProyecto(1002, "Luis Morales", "Proyecto X"); + Programador programador = new Programador(1003, "Maria García", "Java"); + + // Llamado a las funciones específicas de cada subclase de Empleado + System.out.println("Gerente: " + gerente.getNombre() + ", Cantidad de empleados: " + gerente.getCantidadEmpleados()); + System.out.println("Gerente de Proyecto: " + gerenteProyecto.getNombre() + ", Proyecto: " + gerenteProyecto.getProyecto()); + System.out.println("Programador: " + programador.getNombre() + ", Lenguaje favorito: " + programador.getLenguajeFavorito()); + } +} \ No newline at end of file From e0fcdb5902398c4565a322033e5f940216ca1353 Mon Sep 17 00:00:00 2001 From: fborjalv Date: Tue, 24 Sep 2024 09:40:26 +0200 Subject: [PATCH 523/539] #36 - Python --- .../python/fborjalv.py | 267 ++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/fborjalv.py diff --git a/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/fborjalv.py b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/fborjalv.py new file mode 100644 index 0000000000..3e4fd7d05e --- /dev/null +++ b/Roadmap/36 - EL SOMBRERO SELECCIONADOR/python/fborjalv.py @@ -0,0 +1,267 @@ +""" +/* + * EJERCICIO: + * Cada 1 de septiembre, el Hogwarts Express parte hacia la escuela + * de programación de Hogwarts para magos y brujas del código. + * En ella, su famoso sombrero seleccionador ayuda a los programadores + * a encontrar su camino... + * Desarrolla un programa que simule el comportamiento del sombrero. + * Requisitos: + * 1. El sombrero realizará 10 preguntas para determinar la casa del alumno. + * 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data. + * (Puedes elegir las que quieras) + * Acciones: + * 1. Crea un programa que solicite el nombre del alumno y realice 10 + * preguntas, con cuatro posibles respuestas cada una. + * 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección). + * 3. Una vez finalizado, el sombrero indica el nombre del alumno + * y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria, + * pero indicándole al alumno que la decisión ha sido complicada). + */ + +""" + +import random +houses = {"Frontend": 0, "Backend": 0, "Data": 0, "Mobile": 0} + +questions = [ + { + "question" :"¿Cuál es tu lenguaje de programación favorito?", + "answer" : [{ + "option": "JavaScript", + "house": "Frontend" + }, + { + "option": "Python", + "house": "Data" + }, + { + "option": "Swift", + "house": "Mobile" + }, + { + "option": "SQL", + "house": "Backend" + } + + ] + }, + { + "question": "¿Qué tipo de tareas disfrutas más en un proyecto de desarrollo?", + "answer": [ + { + "option": "Analizar información y extraer conocimientos a partir de datos", + "house": "Data" + }, + { + "option" : "Diseñar la estructura lógica y gestionar la base del sistema", + "house": "Backend" + }, + { + "option": "Desarrollar soluciones optimizadas para dispositivos móviles", + "house": "Mobile" + }, + { + "option" : "Crear experiencias visuales y mejorar la interacción del usuario", + "house" : "Frontend" + } + ] + }, + { + "question": "¿Qué disfrutas más en un proyecto de software?", + "answer": [ + { + "option": "Implementar sistemas eficientes", + "house": "Backend" + }, + { + "option": "Diseñar interfaces atractivas", + "house": "Frontend" + }, + { + "option": "Trabajar con grandes volúmenes de datos", + "house": "Data" + }, + { + "option": "Crear apps móviles innovadoras", + "house": "Mobile" + } + ] + }, + { + "question": "¿Qué tipo de problemas prefieres resolver?", + "answer": [ + { + "option": "Estéticos y de diseño", + "house": "Frontend" + }, + { + "option": "Funcionalidad en dispositivos móviles", + "house": "Mobile" + }, + { + "option": "Escalabilidad y rendimiento", + "house": "Backend" + }, + { + "option": "Predicción y análisis de datos", + "house": "Data" + } + ] + }, + { + "question": "¿Qué entorno de desarrollo prefieres?", + "answer": [ + { + "option": "Un dispositivo móvil", + "house": "Mobile" + }, + { + "option": "Un clúster de datos", + "house": "Data" + }, + { + "option": "Un navegador", + "house": "Frontend" + }, + { + "option": "Un servidor", + "house": "Backend" + } + ] + }, + { + "question": "¿Cómo prefieres aprender nuevas tecnologías? ", + "answer": [ + { + "option": "Diseñando interfaces", + "house": "Frontend" + }, + { + "option": "Creando APIs", + "house": "Backend" + }, + { + "option": "Programando apps móviles", + "house": "Mobile" + }, + { + "option": "Explorando datasets", + "house": "Data" + } + ] + }, + { + "question": "¿Qué herramienta te es más cómoda usar?", + "answer": [ + { + "option": "HTML/CSS", + "house": "Frontend" + }, + { + "option": "Xcode", + "house": "Mobile" + }, + { + "option": "Node.js", + "house": "Backend" + }, + { + "option": "Jupyter Notebook", + "house": "Data" + } + ] + }, + { + "question": "¿Qué es más importante para ti en un proyecto?", + "answer": [ + { + "option": "La experiencia del usuario", + "house": "Frontend" + }, + { + "option": "La arquitectura del sistema", + "house": "Backend" + }, + { + "option": "La compatibilidad con múltiples plataformas móviles", + "house": "Mobile" + }, + { + "option": "El manejo eficiente de datos", + "house": "Data" + } + ] + }, + { + "question": "¿En qué parte de un equipo de desarrollo te sientes más cómodo? ", + "answer": [ + { + "option": "Diseñando y desarrollando interfaces", + "house": "Frontend" + }, + { + "option": "Implementando la lógica del sistema", + "house": "Backend" + }, + { + "option": "Creando apps móviles", + "house": "Mobile" + }, + { + "option": "Analizando datos y creando modelos", + "house": "Data" + } + ] + }, + { + "question": "¿Qué crees que dominará el futuro de la programación?", + "answer": [ + { + "option": "Inteligencia artificial y big data", + "house": "Data" + }, + { + "option": "Aplicaciones web dinámicas", + "house": "Frontend" + }, + { + "option": "Aplicaciones móviles", + "house": "Mobile" + }, + { + "option": "Computación en la nube", + "house": "Backend" + } + ] + }, + +] + + + +for index, text in enumerate(questions): + print(f"\n{index+1}-", text["question"]+"\n") + for num, op in enumerate(text["answer"]): + print(f"{num+1}.", op["option"]) + user_option = int(input("Elige una de las cuatro opciones: ")) + house = text["answer"][user_option-1]["house"] + houses[house] += 1 + print(houses) + +result_house = max(houses, key= lambda x: houses[x]) + +scores = list(houses.values()) + +if scores.count(max(scores)) > 1: + print("Se ha producido un empate...") + print("Dificil decisión.....") + possible_houses = [house for house, point in houses.items() if point == max(scores) ] + print(f"Tu casa será... {random.choice(possible_houses)}") +else: + print(f"La casa ganadora es {result_house}") + +sorted_houses = sorted(houses, key= lambda x: houses[x], reverse=True) +print("Resultados: ") +print("\n".join(i for i in sorted_houses)) + From 59b19e40ba258725c8bffc6c4da0dcad6acbefaa Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Tue, 24 Sep 2024 09:42:37 +0200 Subject: [PATCH 524/539] #09 javascript --- Roadmap/09 - HERENCIA/javascript/eulogioep.js | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 Roadmap/09 - HERENCIA/javascript/eulogioep.js diff --git a/Roadmap/09 - HERENCIA/javascript/eulogioep.js b/Roadmap/09 - HERENCIA/javascript/eulogioep.js new file mode 100644 index 0000000000..3cbaaac04f --- /dev/null +++ b/Roadmap/09 - HERENCIA/javascript/eulogioep.js @@ -0,0 +1,118 @@ +// Ejemplo de implementación del concepto de herencia en JavaScript + +// Definición de la clase base (superclase) Animal +class Animal { + constructor(especie, sonido) { + this.especie = especie; + this.sonido = sonido; + } + + // Método que muestra el sonido que hace el animal + hacerSonido() { + return `El ${this.especie} hace: ${this.sonido}`; + } + } + + // Definición de la subclase Perro + class Perro extends Animal { + constructor(nombre, especie, sonido) { + super(especie, sonido); // Llamada al constructor de la superclase + this.nombre = nombre; + } + + // Método exclusivo de la subclase Perro + ladrar() { + return `${this.nombre} lanza un ladrido`; + } + } + + // Definición de la subclase Gato + class Gato extends Animal { + constructor(nombre, especie, sonido) { + super(especie, sonido); // Llamada al constructor de la superclase + this.nombre = nombre; + } + + // Método exclusivo de la subclase Gato + maullar() { + return `${this.nombre} emite un maullido`; + } + } + + // Ejemplo de implementación adicional (dificultad extra) + // Definición de la clase base (superclase) Empleado + class Empleado { + constructor(id, nombre) { + this.id = id; + this.nombre = nombre; + } + } + + // Definición de la subclase Gerente que hereda de Empleado + class Gerente extends Empleado { + constructor(id, nombre, subordinados) { + super(id, nombre); + this.subordinados = subordinados; + } + + // Método exclusivo de la subclase Gerente + informarSobreSubordinados() { + let informacion = `El gerente ${this.nombre} tiene a los siguientes subordinados: \n`; + this.subordinados.forEach((subordinado) => { + informacion += ` - ${subordinado.nombre}\n`; + }); + return informacion; + } + } + + // Definición de la subclase GerenteDeProyectos que hereda de Empleado + class GerenteDeProyectos extends Empleado { + constructor(id, nombre, proyectos) { + super(id, nombre); + this.proyectos = proyectos; + } + + // Método exclusivo de la subclase GerenteDeProyectos + informarSobreProyectos() { + let informacion = `El gerente de proyectos ${this.nombre} tiene los siguientes proyectos: \n`; + this.proyectos.forEach((proyecto) => { + informacion += ` - ${proyecto}\n`; + }); + return informacion; + } + } + + // Definición de la subclase Programador que hereda de Empleado + class Programador extends Empleado { + constructor(id, nombre, lenguajes) { + super(id, nombre); + this.lenguajes = lenguajes; + } + + // Método exclusivo de la subclase Programador + informarSobreLenguajes() { + let informacion = `El programador ${this.nombre} domina los siguientes lenguajes: \n`; + this.lenguajes.forEach((lenguaje) => { + informacion += ` - ${lenguaje}\n`; + }); + return informacion; + } + } + + // Ejemplo de uso + let perro = new Perro("Lucky", "Perro", "Gua"); + console.log(perro.hacerSonido()); // El Perro hace: Gua + console.log(perro.ladrar()); // Lucky lanza un ladrido + + let gato = new Gato("Whiskers", "Gato", "Miau"); + console.log(gato.hacerSonido()); // El Gato hace: Miau + console.log(gato.maullar()); // Whiskers emite un maullido + + let gerente = new Gerente(1, "Juan Perez", [new Programador(2, "Maria Rodriguez", ["JavaScript", "Python"])]); + console.log(gerente.informarSobreSubordinados()); + + let gerenteProyectos = new GerenteDeProyectos(3, "Luis Martinez", ["Proyecto A", "Proyecto B"]); + console.log(gerenteProyectos.informarSobreProyectos()); + + let programador = new Programador(4, "Karla Sanchez", ["JavaScript", "Python"]); + console.log(programador.informarSobreLenguajes()); \ No newline at end of file From a019839c2dff1ae617fc71ec822ef8c817ad7d40 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Tue, 24 Sep 2024 09:43:59 +0200 Subject: [PATCH 525/539] #09 php --- Roadmap/09 - HERENCIA/php/eulogioep.php | 136 ++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 Roadmap/09 - HERENCIA/php/eulogioep.php diff --git a/Roadmap/09 - HERENCIA/php/eulogioep.php b/Roadmap/09 - HERENCIA/php/eulogioep.php new file mode 100644 index 0000000000..7797f4e687 --- /dev/null +++ b/Roadmap/09 - HERENCIA/php/eulogioep.php @@ -0,0 +1,136 @@ +especie = $especie; + $this->sonido = $sonido; + } + + // Método que muestra el sonido que hace el animal + public function hacerSonido() { + return "El " . $this->especie . " hace: " . $this->sonido; + } +} + +// Definición de la subclase Perro +class Perro extends Animal { + private $nombre; + + public function __construct($nombre, $especie, $sonido) { + parent::__construct($especie, $sonido); // Llamada al constructor de la superclase + $this->nombre = $nombre; + } + + // Método exclusivo de la subclase Perro + public function ladrar() { + return $this->nombre . " lanza un ladrido"; + } +} + +// Definición de la subclase Gato +class Gato extends Animal { + private $nombre; + + public function __construct($nombre, $especie, $sonido) { + parent::__construct($especie, $sonido); // Llamada al constructor de la superclase + $this->nombre = $nombre; + } + + // Método exclusivo de la subclase Gato + public function maullar() { + return $this->nombre . " emite un maullido"; + } +} + +// Ejemplo de implementación adicional (dificultad extra) +// Definición de la clase base (superclase) Empleado +class Empleado { + protected $id; + protected $nombre; + + public function __construct($id, $nombre) { + $this->id = $id; + $this->nombre = $nombre; + } +} + +// Definición de la subclase Gerente que hereda de Empleado +class Gerente extends Empleado { + private $subordinados; + + public function __construct($id, $nombre, array $subordinados) { + parent::__construct($id, $nombre); + $this->subordinados = $subordinados; + } + + // Método exclusivo de la subclase Gerente + public function informarSobreSubordinados() { + $informacion = "El gerente " . $this->nombre . " tiene a los siguientes subordinados: \n"; + foreach ($this->subordinados as $subordinado) { + $informacion .= " - " . $subordinado->nombre . "\n"; + } + return $informacion; + } +} + +// Definición de la subclase GerenteDeProyectos que hereda de Empleado +class GerenteDeProyectos extends Empleado { + private $proyectos; + + public function __construct($id, $nombre, array $proyectos) { + parent::__construct($id, $nombre); + $this->proyectos = $proyectos; + } + + // Método exclusivo de la subclase GerenteDeProyectos + public function informarSobreProyectos() { + $informacion = "El gerente de proyectos " . $this->nombre . " tiene los siguientes proyectos: \n"; + foreach ($this->proyectos as $proyecto) { + $informacion .= " - " . $proyecto . "\n"; + } + return $informacion; + } +} + +// Definición de la subclase Programador que hereda de Empleado +class Programador extends Empleado { + private $lenguajes; + + public function __construct($id, $nombre, array $lenguajes) { + parent::__construct($id, $nombre); + $this->lenguajes = $lenguajes; + } + + // Método exclusivo de la subclase Programador + public function informarSobreLenguajes() { + $informacion = "El programador " . $this->nombre . " domina los siguientes lenguajes: \n"; + foreach ($this->lenguajes as $lenguaje) { + $informacion .= " - " . $lenguaje . "\n"; + } + return $informacion; + } +} + +// Ejemplo de uso +$perro = new Perro("Lucky", "Perro", "Gua"); +echo $perro->hacerSonido(); // El Perro hace: Gua +echo $perro->ladrar(); // Lucky lanza un ladrido + +$gato = new Gato("Whiskers", "Gato", "Miau"); +echo $gato->hacerSonido(); // El Gato hace: Miau +echo $gato->maullar(); // Whiskers emite un maullido + +$gerente = new Gerente(1, "Juan Perez", [new Programador(2, "Maria Rodriguez", ["JavaScript", "PHP"])]); +echo $gerente->informarSobreSubordinados(); + +$gerenteProyectos = new GerenteDeProyectos(3, "Luis Martinez", ["Proyecto A", "Proyecto B"]); +echo $gerenteProyectos->informarSobreProyectos(); + +$programador = new Programador(4, "Karla Sanchez", ["JavaScript", "PHP"]); +echo $programador->informarSobreLenguajes(); \ No newline at end of file From 77e460eae0378d3d1ecd2fee8ba20d4772f96ff9 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Tue, 24 Sep 2024 09:45:02 +0200 Subject: [PATCH 526/539] #09 typescript --- Roadmap/09 - HERENCIA/typescript/eulogioep.ts | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 Roadmap/09 - HERENCIA/typescript/eulogioep.ts diff --git a/Roadmap/09 - HERENCIA/typescript/eulogioep.ts b/Roadmap/09 - HERENCIA/typescript/eulogioep.ts new file mode 100644 index 0000000000..ef9f923bc9 --- /dev/null +++ b/Roadmap/09 - HERENCIA/typescript/eulogioep.ts @@ -0,0 +1,128 @@ +// Ejemplo de implementación del concepto de herencia en TypeScript + +// Definición de la clase base (superclase) Animal +class Animal { + protected especie: string; + protected sonido: string; + + constructor(especie: string, sonido: string) { + this.especie = especie; + this.sonido = sonido; + } + + // Método que muestra el sonido que hace el animal + public hacerSonido(): string { + return `El ${this.especie} hace: ${this.sonido}`; + } + } + + // Definición de la subclase Perro + class Perro extends Animal { + private nombre: string; + + constructor(nombre: string, especie: string, sonido: string) { + super(especie, sonido); // Llamada al constructor de la superclase + this.nombre = nombre; + } + + // Método exclusivo de la subclase Perro + public ladrar(): string { + return `${this.nombre} lanza un ladrido`; + } + } + + // Definición de la subclase Gato + class Gato extends Animal { + private nombre: string; + + constructor(nombre: string, especie: string, sonido: string) { + super(especie, sonido); // Llamada al constructor de la superclase + this.nombre = nombre; + } + + // Método exclusivo de la subclase Gato + public maullar(): string { + return `${this.nombre} emite un maullido`; + } + } + + // Ejemplo de implementación adicional (dificultad extra) + // Definición de la clase base (superclase) Empleado + class Empleado { + protected id: number; + protected nombre: string; + + constructor(id: number, nombre: string) { + this.id = id; + this.nombre = nombre; + } + } + + // Definición de la subclase Gerente que hereda de Empleado + class Gerente extends Empleado { + private subordinados: Empleado[]; + + constructor(id: number, nombre: string, subordinados: Empleado[]) { + super(id, nombre); + this.subordinados = subordinados; + } + + // Método exclusivo de la subclase Gerente + public informarSobreSubordinados(): string { + let informacion = `El gerente ${this.nombre} tiene a los siguientes subordinados: \n`; + informacion += this.subordinados.map((subordinado) => ` - ${subordinado.nombre}\n`).join(''); + return informacion; + } + } + + // Definición de la subclase GerenteDeProyectos que hereda de Empleado + class GerenteDeProyectos extends Empleado { + private proyectos: string[]; + + constructor(id: number, nombre: string, proyectos: string[]) { + super(id, nombre); + this.proyectos = proyectos; + } + + // Método exclusivo de la subclase GerenteDeProyectos + public informarSobreProyectos(): string { + let informacion = `El gerente de proyectos ${this.nombre} tiene los siguientes proyectos: \n`; + informacion += this.proyectos.map((proyecto) => ` - ${proyecto}\n`).join(''); + return informacion; + } + } + + // Definición de la subclase Programador que hereda de Empleado + class Programador extends Empleado { + private lenguajes: string[]; + + constructor(id: number, nombre: string, lenguajes: string[]) { + super(id, nombre); + this.lenguajes = lenguajes; + } + + // Método exclusivo de la subclase Programador + public informarSobreLenguajes(): string { + let informacion = `El programador ${this.nombre} domina los siguientes lenguajes: \n`; + informacion += this.lenguajes.map((lenguaje) => ` - ${lenguaje}\n`).join(''); + return informacion; + } + } + + // Ejemplo de uso + const perro = new Perro("Lucky", "Perro", "Gua"); + console.log(perro.hacerSonido()); // El Perro hace: Gua + console.log(perro.ladrar()); // Lucky lanza un ladrido + + const gato = new Gato("Whiskers", "Gato", "Miau"); + console.log(gato.hacerSonido()); // El Gato hace: Miau + console.log(gato.maullar()); // Whiskers emite un maullido + + const gerente = new Gerente(1, "Juan Perez", [new Programador(2, "Maria Rodriguez", ["JavaScript", "TypeScript"])]); + console.log(gerente.informarSobreSubordinados()); + + const gerenteProyectos = new GerenteDeProyectos(3, "Luis Martinez", ["Proyecto A", "Proyecto B"]); + console.log(gerenteProyectos.informarSobreProyectos()); + + const programador = new Programador(4, "Karla Sanchez", ["JavaScript", "TypeScript"]); + console.log(programador.informarSobreLenguajes()); \ No newline at end of file From 093094ed315e67bf81dcabd96b6c690705d49986 Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Tue, 24 Sep 2024 09:45:59 +0200 Subject: [PATCH 527/539] #09 java --- Roadmap/09 - HERENCIA/java/eulogioep.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Roadmap/09 - HERENCIA/java/eulogioep.java b/Roadmap/09 - HERENCIA/java/eulogioep.java index 24e5c37319..208fc85bdd 100644 --- a/Roadmap/09 - HERENCIA/java/eulogioep.java +++ b/Roadmap/09 - HERENCIA/java/eulogioep.java @@ -1,8 +1,8 @@ // Clase base o superclase -class Animal { +class eulogioep { protected String nombre; - public Animal(String nombre) { + public eulogioep(String nombre) { this.nombre = nombre; } From 49f1565aba3a3716035236914b347b073cc7cd8d Mon Sep 17 00:00:00 2001 From: Eulogio Enamorado Pallares Date: Tue, 24 Sep 2024 09:48:29 +0200 Subject: [PATCH 528/539] #09 java --- Roadmap/09 - HERENCIA/java/eulogioep.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Roadmap/09 - HERENCIA/java/eulogioep.java b/Roadmap/09 - HERENCIA/java/eulogioep.java index 208fc85bdd..24e5c37319 100644 --- a/Roadmap/09 - HERENCIA/java/eulogioep.java +++ b/Roadmap/09 - HERENCIA/java/eulogioep.java @@ -1,8 +1,8 @@ // Clase base o superclase -class eulogioep { +class Animal { protected String nombre; - public eulogioep(String nombre) { + public Animal(String nombre) { this.nombre = nombre; } From 7064dbe3af8670668daaa63dbba0d81c470b866c Mon Sep 17 00:00:00 2001 From: jtovart Date: Tue, 24 Sep 2024 02:51:39 -0500 Subject: [PATCH 529/539] #00 - SQL --- .../sql/leonardo798.sql | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/sql/leonardo798.sql diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/sql/leonardo798.sql b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/sql/leonardo798.sql new file mode 100644 index 0000000000..c631a8bdce --- /dev/null +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/sql/leonardo798.sql @@ -0,0 +1,82 @@ + +-- 1. Documentación oficial en https://www.iso.org/standard/76583.html +-- Documentación complementaria en https://www.w3schools.com/sql/ se divide por cada gestor de base de datos y por ejemplos. + +-- 2. Tipos de comentarios. + +-- Comentario de una línea en SQL + +/* +Comentario de varias líneas +en SQL +*/ + +-- 3. Vairables y Constantes segun lenguaje +-- En SQL Nativo no existe una forma de declarar variables ni constantes, por lo cual depende del SGBD (sistema gestor de base de datos) + + +-- SQL Server +-- Declarar una variable +DECLARE @variable VARCHAR(50); +-- Asignar un valor a una variable +SET @variable = 'SQL Server'; +-- Todo junto +DECLARE @otraVariable INT = 20; + + +-- Oracle +DECLARE + mi_variable NUMBER; +BEGIN + mi_variable := 10; +END; + + +-- MySQL +SET @miVariable = 10; + + +-- 4. Tipos de datos primitivos. +-- Tipos numéricos: + +DECLARE @variable INTEGER(10); -- Números enteros. +DECLARE @variable2 INT; -- Números enteros. +DECLARE @variable3 SMALLINT; -- Enteros pequeños. +DECLARE @variable4 BIGINT; -- Enteros grandes. +DECLARE @variable5 DECIMAL(10,2); -- Números decimales de precisión fija. +DECLARE @variable6 FLOAT(10); -- Números de punto flotante. +DECLARE @variable7 REAL; -- Números de punto flotante de precisión simple. +DECLARE @variable8 DOUBLE PRECISION; -- Números de punto flotante de doble precisión. + +-- Tipos de caracteres: + +DECLARE @variable9 CHAR(10); -- Cadena de caracteres de longitud fija. Ocupa la misma cantidad de espacio en disco. +DECLARE @variable10 VARCHAR(10); -- Cadena de caracteres de longitud variable. Ocupa solo el espacio usado por la cantidad de caractres. +DECLARE @variable11 CHARACTER VARYING(10); -- Cadena de caracteres de longitud variable. Equivalente a VARCHAR se diferencia solo por el nombre segun estandar ANSI SQL + +-- Tipos de fecha y hora: + +DECLARE @variable12 DATE; -- Fecha (año, mes, día). +DECLARE @variable13 TIME; -- Hora (hora, minuto, segundo). +DECLARE @variable14 TIMESTAMP; -- Combinación de fecha y hora. +DECLARE @variable15 INTERVAL; -- Representa un intervalo de tiempo. + +-- Tipos booleanos: + +DECLARE @variable16 BOOLEAN; -- Valor booleano. Puede almacenar TRUE, FALSE o NULL. + +-- Tipos binarios: + +DECLARE @variable17 BINARY(10); -- Datos binarios de longitud fija. +DECLARE @variable18 VARBINARY(10); -- Datos binarios de longitud variable. + +-- Otros tipos: + +DECLARE @variable19 CLOB; -- Caracteres grandes. +DECLARE @variable20 BLOB; -- Binarios grandes. + + +-- 5. Imprimir en consola. + +PRINT '¡Hola, ' + @variable + '!'; + From f58daea4369f96b7470abca95c542e71ed9e022b Mon Sep 17 00:00:00 2001 From: jtovart Date: Tue, 24 Sep 2024 02:58:54 -0500 Subject: [PATCH 530/539] #00 - Java - correcciones --- .../java/llonardo798.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/llonardo798.java b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/llonardo798.java index 0b592cb458..45c0718672 100644 --- a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/llonardo798.java +++ b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/java/llonardo798.java @@ -31,11 +31,11 @@ public static void main(String[] args) { long distanciaTierraSol = 149600000000L; // 64 bits, rango de valores permitidos -9223372036854775808 hasta 9223372036854775807 float precioProducto = 19.99f; // 32 bits, rango de valores permitidos 1.4e-045 hasta 3.4e+038 double gravedadTierra = 9.80665; // 64 bits, rango de valores permitidos -1.79769313486232e308 hasta 1.79769313486232e308 - char primeraLetra = 'L'; // 16 bits, rango de valores permitidos '\u000' hasta '\uffff' (Caracteres Unicode) + char primeraLetra = 'L'; // 16 bits, rango de valores permitidos '\u0000' hasta '\uffff' (Caracteres Unicode) // 5. Imprimir en consola. System.out.println("Hola, Java!"); } -} +} \ No newline at end of file From c7748196cc33bb83f5fd6a558c8d18971836cc5a Mon Sep 17 00:00:00 2001 From: jtovart Date: Tue, 24 Sep 2024 06:02:38 -0500 Subject: [PATCH 531/539] #01 - Java --- .../java/llonardo798.java | 172 ++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/llonardo798.java diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/llonardo798.java b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/llonardo798.java new file mode 100644 index 0000000000..d26f75e1ce --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/java/llonardo798.java @@ -0,0 +1,172 @@ +public class llonardo798 { + + public static void main(String[] args) { + // 1. Tipos de operadores por categoría: + + // 1. Operadores Aritméticos: + + int suma = 5 + 5 + 5; // Suma + System.out.println(suma); // Imprime 15 + int resta = 10 - 5; // Resta + System.out.println(resta); // Imprime 5 + int multiplicacion = 5 * 5; // Multiplicación + System.out.println(multiplicacion); // Imprime 25 + int division = 10 / 2; // División + System.out.println(division); // Imprime 5 + int modulo = 10 % 3; // Módulo (resto o sobrante de la división) 10 % 3 = 1 se puede considerar como + // 10/3 = 3 y sobra 1 + System.out.println(modulo); // Imprime 1 + suma++; // Incremento en 1 + System.out.println(suma); // Imprime 16 + resta--; // Decremento en 1 + System.out.println(resta); // Imprime 4 + + // 2. Operadores de Asignación: + + String nombre = "Leonardo"; // Asignación simple: = + System.out.println(nombre); // Imprime "Leonardo" + suma += 5; // Suma y asignación + System.out.println(suma); // Imprime 21 + resta -= 5; // Resta y asignación + System.out.println(resta); // Imprime -1 + multiplicacion *= 5; // Multiplicación y asignación + System.out.println(multiplicacion); // Imprime 125 + division /= 2; // División y asignación + System.out.println(division); // Imprime 2 - el valorse recorta en el decimal porque es int y no float + modulo %= 3; // Módulo y asignación + System.out.println(modulo); // Imprime 1 porque 10 % 3 = 0.99999... y se redondea a 1 por ser int + + // 3. Operadores de Comparación: + + boolean igual = 5 == 5; // Igual a + System.out.println(igual); // Imprime true - 5 es igual a 5 + boolean diferente = 5 != 5; // Diferente de + System.out.println(diferente); // Imprime false - 5 no es diferente de 5 + boolean mayor = 10 > 5; // Mayor que + System.out.println(mayor); // Imprime true - 10 es mayor que 5 + boolean menor = 5 < 10; // Menor que + System.out.println(menor); // Imprime true - 5 es menor que 10 + boolean mayorIgual = 10 >= 5; // Mayor o igual que + System.out.println(mayorIgual); // Imprime true - 10 es mayor o igual que 5 + boolean menorIgual = 5 <= 10; // Menor o igual que + System.out.println(menorIgual); // Imprime true - 5 es menor o igual que 10 + + // 4. Operadores Lógicos: + + boolean and = true && true; // AND lógico - ambas condiciones deben ser verdaderas + System.out.println(and); // Imprime true + boolean or = true || false; // OR lógico - al menos una condición debe ser verdadera + System.out.println(or); // Imprime true + boolean not = !true; // NOT lógico - niega la condición + System.out.println(not); // Imprime false + + // 5. Operadores Bit a Bit (a nivel de bits): + + // AND bit a bit & - valida los numeros bit a bit como un AND. + // Si compara 0 y 0 = 0, 0 y 1 = 0, 1 y 0 = 0, 1 y 1 = 1 + int a = 60; // En binario: 0011 1100 + int b = 13; // En binario: 0000 1101 + int resultadoAnd = a & b; + System.out.println(resultadoAnd); // Resultado: 0000 1100 (Imprime 12 en decimal) + // Explicación: + // 0011 1100 - Valor a + // 0000 1101 - Valor b + // --------- & (AND) + // 0000 1100 - 12 en decimal + + // OR bit a bit: | - valida los numeros bit a bit como un OR. + // Si compara 0 y 0 = 0, 0 y 1 = 1, 1 y 0 = 1, 1 y 1 = 1 + int resultadoOr = a | b; + System.out.println(resultadoOr); // Resultado: 0011 1101 (Imprime 61 en decimal) + // Explicación: + // 0011 1100 + // 0000 1101 + // --------- | (OR) + // 0011 1101 - 61 en decimal + + // XOR bit a bit: ^ - valida los numeros bit a bit como un XOR. + // Si compara 0 y 0 = 0, 0 y 1 = 1, 1 y 0 = 1, 1 y 1 = 0 + int resultadoXor = a ^ b; + System.out.println(resultadoXor); // Resultado: 0011 0001 (Imprime 49 en decimal) + // Explicación: + // 0011 1100 + // 0000 1101 + // --------- ^ (XOR) + // 0011 0001 + + // Complemento bit a bit: ~ - cambia los bits de 0 a 1 y de 1 a 0 + a = 60; // En binario: 0011 1100 + int resultadoComplemento = ~a; + System.out.println(resultadoComplemento); // Resultado: 1100 0011 (Imprime 195 en decimal) + // Explicación: + // 0011 1100 - Valor a = 60 + // --------- ~ (Complemento) + // 1100 0011 - 195 en decimal + + // Desplazamiento a la izquierda: << - desplaza los bits a la izquierda + a = 33; // En binario: 0010 0001 + int resultadoDesplazamientoIzquierda = a << 2; + System.out.println(resultadoDesplazamientoIzquierda); // Resultado: 1000 0100 (132 en decimal) + // Mover el número 33 dos posiciones a la izquierda. + // moviendo los bits en 1 dos posiciones a la izquierda + // Explicación: + // 0010 0001 - Valor a = 33 + // --------- << (Desplazamiento a la izquierda) + // 1000 0100 - 132 en decimal + + // Desplazamiento a la derecha: >> - desplaza los bits a la derecha + a = 33; // En binario: 0010 0001 + int resultadoDesplazamientoDerecha = a >> 2; + System.out.println(resultadoDesplazamientoDerecha); // Resultado: 0000 1000 (8 en decimal) + // Mover el número 33 dos posiciones a la derecha. + // moviendo los bits en 1 dos posiciones a la derecha + // Explicación: + // 0010 0001 - Valor a = 33 + // --------- >> (Desplazamiento a la derecha) + // 0000 1000 - 8 en decimal + + // Desplazamiento a la derecha sin signo: >> - desplaza los bits a la derecha + // sin importar si el numero es positivo o negativo para lo cual agrerga 0 a + // la izquierda + a = -10; // En binario (complemento a dos): 1111 1111 1111 1111 1111 1111 1111 0110 + int resultadoDesplazamientoIzquierdaSinSigno = a >>> 1; + System.out.println(resultadoDesplazamientoIzquierdaSinSigno); // Resultado: 0111 1111 1111 1111 1111 1111 1111 + // 1011 (2147483643 en decimal) + + // 6. Operadores Ternarios: + + // Operador condicional ternario: ?: + a = 5; + int edad = (a == 10) ? 10 : 20; // Si a es igual a 10, entonces edad es igual a 10, de lo contrario, edad es + // igual a 20 + System.out.println(edad); // Imprime 20 + + // 7. Otros Operadores: + + String nombreCompleto = "Leonardo " + "Aedo"; // Concatenación de cadenas + System.out.println(nombreCompleto); // Imprime "Leonardo Aedo" + byte[] bytes = nombreCompleto.getBytes(); // Operador de acceso a miembros de clase "." + System.out.println(bytes); // Imprime [B@6d06d69c + int[] numeros = { 1, 3, 7, 2, 5 }; + int numero = numeros[2]; // Operador de acceso a elementos de arreglo "[]" + System.out.println(numero); // Imprime 7 + double numeroDecimal = 10.5; + int numeroEntero = (int) numeroDecimal; // Operador de cast (conversión de tipos) + System.out.println(numeroEntero); // Imprime 10 - se recorta el decimal porque se convierte de double a int + boolean esInstancia = nombre instanceof String; // Operador instanceof (verifica si un objeto es una instancia + // de una clase) esInstancia devuelve true si nombre es una instancia de la + // clase String, de lo contrario, devuelve false + System.out.println(esInstancia); // Imprime true ya que nombre es una instancia de la clase String + + // DIFICULTAD EXTRA - Crea un programa que imprima por consola todos los números + // comprendidos entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni + // múltiplos de 3. + System.out.println("Números pares entre 10 y 55 que son pares, que no son 16 y no es múltiplos de 3:"); + for (int i = 10; i < 56; i++) { + if ( i % 2 == 0 && i != 16 && i % 3 != 0) { + System.out.println(i); + } + } + } + +} From 2b06ade0eea5a09249d4c78fd55f70574bee961f Mon Sep 17 00:00:00 2001 From: Martin Bohorquez <121200468+martinbohorquez@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:58:12 -0500 Subject: [PATCH 532/539] #21 java --- .../21 - CALLBACKS/java/martinbohorquez.java | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 Roadmap/21 - CALLBACKS/java/martinbohorquez.java diff --git a/Roadmap/21 - CALLBACKS/java/martinbohorquez.java b/Roadmap/21 - CALLBACKS/java/martinbohorquez.java new file mode 100644 index 0000000000..a8b3a38ce7 --- /dev/null +++ b/Roadmap/21 - CALLBACKS/java/martinbohorquez.java @@ -0,0 +1,84 @@ +import java.util.Random; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +public class martinbohorquez { + public static void main(String[] args) { + callbackExample(); + orderProcess("Pizza Carbonara"); + orderProcess("Pizza Margarita"); + orderProcess("Pizza Pepperoni"); + orderProcess("Pizza Barbacoa"); + } + + private static void orderProcess(String dishName) { + orderProcess(dishName, martinbohorquez::confirmOrder, martinbohorquez::orderReady, martinbohorquez::orderDelivered); + } + + private static void callbackExample() { + System.out.println("Iniciando el programa..."); + Processor processor = new Processor(); + processor.process(message -> System.out.println("Callback recibido: " + message)); + System.out.println("Programa finalizado."); + } + + public static void orderProcess(String dishName, ConfirmCallback confirmCallback, + ReadyCallback readyCallback, DeliveredCallback deliveredCallback) { + ExecutorService executor = Executors.newSingleThreadExecutor(); + executor.submit(() -> { + Random random = new Random(); + try { + confirmCallback.execute(dishName); + TimeUnit.SECONDS.sleep(random.nextInt(1, 10)); + readyCallback.execute(dishName); + TimeUnit.SECONDS.sleep(random.nextInt(1, 10)); + deliveredCallback.execute(dishName); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + }); + executor.shutdown(); + } + + private static void confirmOrder(String dishName) { + System.out.printf("Tu pedido %s ha sido confirmado!%n", dishName); + } + + private static void orderReady(String dishName) { + System.out.printf("Tu pedido %s está listo!%n", dishName); + } + + private static void orderDelivered(String dishName) { + System.out.printf("Tu pedido %s ha sido entregado!%n", dishName); + } + + private interface Callback { + void execute(String message); + } + + // Interfaces para los callbacks + public interface ConfirmCallback { + void execute(String dishName); + } + + public interface ReadyCallback { + void execute(String dishName); + } + + public interface DeliveredCallback { + void execute(String dishName); + } + + private static class Processor { + public void process(Callback callback) { + System.out.println("Procesando..."); + try { + Thread.sleep(4000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + callback.execute("Proceso completo"); + } + } +} \ No newline at end of file From c31bb3b6d66970018f2ee4525003c64fd917806b Mon Sep 17 00:00:00 2001 From: Sauca Date: Tue, 24 Sep 2024 20:23:51 +0200 Subject: [PATCH 533/539] #01 - Python --- .../python/13sauca13.py | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/13sauca13.py diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/13sauca13.py b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/13sauca13.py new file mode 100644 index 0000000000..97191bf7c1 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/python/13sauca13.py @@ -0,0 +1,106 @@ +a = 1 +b = 2 +print("Dadas las variables a=1 y b=2:\n") + +# Operadores aritméticos: +suma = a+b +resta = a-b +multiplicacion = a*b +division = a/b +modulo = a%b +div_entera = a//b +exponenciacion = a**b +print(f"""Las operaciones aritméticas realizables son: + Suma: {suma} + Resta: {resta} + Multiplicación: {multiplicacion} + Division: {division} + Modulo: {modulo} + Division entera: {div_entera} + Exponenciacion: {exponenciacion}\n""") + +# Operadores lógicos +y = a and b +o = a or b +no = not a +print(f"""Las operaciones lógicas básicas realizables son: + AND: {y} + OR: {o} + NOT: {no}\n""") + +# Operadores de comparacion +mayor_que = a>b +mayor_o_igual = a>=b +menor_que = ab: + print("a es mayor que b") +else: + print("deben ser iguales porque no se cumple ninguna condicion...") + +# Bucle for +for i in range(1,4): + print(f"Esta es la vez {i} de este bucle for") + +# Bucle while +i=0 +while i<5: + print(f"Esta es la vez {i} del bucle while") + i+=1 + +# EXTRA +for i in range(10,56): + if (i%2==0) and (i!=16) and (i%3!=0): + print(i) \ No newline at end of file From fc5622b1afafe35ab38905b5d77a3cdf7e733dff Mon Sep 17 00:00:00 2001 From: sarismejiasanchez <93800332+sarismejiasanchez@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:24:56 +0000 Subject: [PATCH 534/539] #07 - Python --- .../python/sarismejiasanchez.py | 189 ++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 Roadmap/07 - PILAS Y COLAS/python/sarismejiasanchez.py diff --git a/Roadmap/07 - PILAS Y COLAS/python/sarismejiasanchez.py b/Roadmap/07 - PILAS Y COLAS/python/sarismejiasanchez.py new file mode 100644 index 0000000000..445a3b4438 --- /dev/null +++ b/Roadmap/07 - PILAS Y COLAS/python/sarismejiasanchez.py @@ -0,0 +1,189 @@ +# #07 PILAS Y COLAS + +""" + * EJERCICIO: + * Implementa los mecanismos de introducción y recuperación de elementos propios de las + * pilas (stacks - LIFO) y las colas (queue - FIFO) utilizando una estructura de array + * o lista (dependiendo de las posibilidades de tu lenguaje). + * +""" +# PILAS +# https://docs.hektorprofe.net/python/colecciones-de-datos/pilas/ +print("PILAS - Stacks LIFO (Last In First Out)") +""" +Son colecciones de elementos ordenados que únicamente permiten dos acciones: + +- Añadir un elemento a la pila. +- Sacar un elemento de la pila. + +La peculiaridad es que el último elemento en entrar es el primero en salir. En inglés se conocen como estructuras LIFO (Last In First Out). +""" +# Las podemos crear como listas normales +stack = [3, 5, 7, 9] +print(stack) + +# Añadir elementos al final con el append(): +stack.append(11) +stack.append(13) +print(stack) # [3, 5, 7, 9, 11, 13] + +# Para sacar los elementos utilizaremos el método pop(). +# Al utilizar este método devolveremos el último elemento, pero también lo borraremos: +print(stack.pop()) # 13 +print(stack) # [3, 5, 7, 9, 11] + +# Si queremos trabajar con él deberíamos asignarlo a una variable: +last_value = stack.pop() +print(last_value) # 11 + +# Si vamos sacando elementos llegará un momento en que la pila estará vacía +# y dará error porque no podrá sacar nada más: +stack.pop() # 9 +stack.pop() # 7 +stack.pop() # 5 +stack.pop() # 3 +# stack.pop() # IndexError: pop from empty list +print(stack) + + +# COLAS +# https://docs.hektorprofe.net/python/colecciones-de-datos/colas/ +# https://docs.python.org/es/3.8/library/queue.html +print("\nCOLAS - Queue FIFO (First In First Out)") + +""" +Son colecciones de elementos ordenados que únicamente permiten dos acciones: + +- Añadir un elemento a la cola. +- Sacar un elemento de la cola. + +La peculiaridad es que el primer elemento en entrar es el primero en salir. En inglés se conocen como estructuras FIFO (First In First Out). + +La mejor alternativa en Python para crear colas es usar el módulo queue +https://docs.python.org/es/3.8/library/queue.html +""" + +import queue + +# Crear una cola +cola = queue.Queue() + +# Agregar elementos +def agregar_elemento(cola, elemento): + cola.put(elemento) + print(f"Elemento agregado a la cola: {elemento}") + +# Recuperar elemmentos +def recuperar_elemento(cola): + try: + elemento = cola.get(timeout=1) # Espera hasta 1 segundo para obtener un elemento + print(f"Elemento recuperado de la cola: {elemento}") + return elemento + except queue.Empty: + print("La cola está vacía, no hay elementos que recuperar.") + +# Probar funciones +# Agregar elementos a la cola +agregar_elemento(cola, 1) +agregar_elemento(cola, 2) +agregar_elemento(cola, 3) + +# Recuperar elementos de la cola +recuperar_elemento(cola) # 1 +recuperar_elemento(cola) # 2 +recuperar_elemento(cola) # 3 +recuperar_elemento(cola) # La cola está vacía, no hay elementos que recuperar. + + +""" +* DIFICULTAD EXTRA (opcional): +* - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás +* de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle +* que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web. +* Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como +* el nombre de una nueva web. +""" +print("\nDIFICULTAD EXTRA") + +print("\nSimular el mecanismo adelante/atrás de un navegador web".upper()) + +# Inicializar la pila para el historial y un índice para la posición actual +historial = [] # Lista que actúa como pila para el historial de páginas visitadas +indice_actual = -1 # Indica la posición actual en el historial (inicialmente no hay páginas visitadas) + +def navegar(pagina): + # Ir a una nueva página. + global indice_actual # Usamos la variable global + + # Verifica si el indice_actual es menor que la longitud del historial menos uno. + if indice_actual < len(historial) - 1: + # Si estamos en medio del historial y vamos a una nueva página, descartamos adelante + historial[indice_actual + 1:] = [] # Limpiar el historial hacia adelante + historial.append(pagina) # Agregar nueva página al historial + indice_actual += 1 # Actualizar la posición + print(f"Navegando a: {pagina}") + +def atras(): + # Navegar hacia atrás en el historial. + global indice_actual # Usamos la variable global + + # Comprueba si indice_actual es mayor que 0. + # Si es así, significa que hay una página anterior a la que puede navegar. + if indice_actual > 0: + # Decrementa indice_actual en uno para moverse hacia atrás en el historial. + indice_actual -= 1 # Mover hacia atrás + # Muestra el nombre de la página a la que ha retrocedido. + print(f"Navegando a: {historial[indice_actual]}") + else: + # Si no hay páginas anteriores, se muestra un mensaje indicando que no se puede retroceder. + print("No hay más páginas en el historial para ir hacia atrás.") + +def adelante(): + # Navegar hacia adelante en el historial. + global indice_actual # Usamos la variable global + + # Comprueba si indice_actual es menor que el último índice del historial. + # Esto indica que hay una página hacia adelante. + if indice_actual < len(historial) - 1: + indice_actual += 1 # Mover hacia adelante + # Muestra el nombre de la página a la que ha avanzado. + print(f"Navegando a: {historial[indice_actual]}") + else: + # Si no hay páginas hacia adelante, se muestra un mensaje indicando que no se puede avanzar. + print("No hay más páginas para avanzar.") + +# Interacción con el usuario + +# Se usa un bucle while True para permitir que el usuario +# siga interactuando con el simulador. +while True: + # Se le pide al usuario que ingrese un comando. + # strip() elimina los espacios en blanco al principio y al final, y + # lower() convierte la entrada a minúsculas para que la comparación + # sea insensible a mayúsculas. + comando = input("Ingresa una página web, 'adelante', o 'atras' (o 'salir' para terminar): ").strip().lower() + + # Si el usuario ingresa 'salir', se imprime un mensaje y se rompe el bucle, + # terminando el programa. + if comando == "salir": + print("Saliendo del simulador del navegador") + break + # Si el comando es 'atras', se llama a la función atras(). + elif comando == "atras": + atras() + # Si el comando es 'adelante', se llama a la función adelante(). + elif comando == "adelante": + adelante() + # Para cualquier otra entrada, se considera que es una nueva página, + # por lo que se llama a ir_a_pagina(comando). + else: + navegar(comando) + + +""" +* DIFICULTAD EXTRA (opcional): +* - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una +* impresora compartida que recibe documentos y los imprime cuando así se le indica. +* La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se +* interpretan como nombres de documentos. +""" \ No newline at end of file From 6303063e76df95e58a3895c513b8625bdf1f5943 Mon Sep 17 00:00:00 2001 From: mouredev Date: Wed, 25 Sep 2024 00:15:40 +0000 Subject: [PATCH 535/539] Update stats --- Roadmap/stats.json | 1526 ++++++++++++++++++++++---------------------- 1 file changed, 766 insertions(+), 760 deletions(-) diff --git a/Roadmap/stats.json b/Roadmap/stats.json index 1000cbf66c..36410397af 100644 --- a/Roadmap/stats.json +++ b/Roadmap/stats.json @@ -1,23 +1,23 @@ { "challenges_total": 40, "languages_total": 48, - "files_total": 7270, - "users_total": 1215, + "files_total": 7287, + "users_total": 1216, "challenges_ranking": [ { "order": 1, "name": "00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO", - "count": 1316 + "count": 1317 }, { "order": 2, "name": "01 - OPERADORES Y ESTRUCTURAS DE CONTROL", - "count": 792 + "count": 794 }, { "order": 3, "name": "02 - FUNCIONES Y ALCANCE", - "count": 604 + "count": 605 }, { "order": 4, @@ -32,12 +32,12 @@ { "order": 6, "name": "06 - RECURSIVIDAD", - "count": 322 + "count": 323 }, { "order": 7, "name": "05 - VALOR Y REFERENCIA", - "count": 296 + "count": 297 }, { "order": 8, @@ -97,7 +97,7 @@ { "order": 19, "name": "18 - CONJUNTOS", - "count": 116 + "count": 117 }, { "order": 20, @@ -107,7 +107,7 @@ { "order": 21, "name": "20 - PETICIONES HTTP", - "count": 99 + "count": 102 }, { "order": 22, @@ -176,95 +176,95 @@ }, { "order": 35, - "name": "36 - EL SOMBRERO SELECCIONADOR", + "name": "35 - REPARTIENDO LOS ANILLOS DE PODER", "count": 43 }, { "order": 36, - "name": "35 - REPARTIENDO LOS ANILLOS DE PODER", - "count": 42 + "name": "36 - EL SOMBRERO SELECCIONADOR", + "count": 43 }, { "order": 37, "name": "38 - MOUREDEV PRO", - "count": 38 + "count": 41 }, { "order": 38, "name": "34 - \u00c1RBOL GENEAL\u00d3GICO LA CASA DEL DRAG\u00d3N", - "count": 36 + "count": 37 }, { "order": 39, "name": "37 - OASIS VS LINKIN PARK", - "count": 35 + "count": 36 }, { "order": 40, "name": "39 - BATMAN DAY", - "count": 1 + "count": 2 } ], "languages_ranking": [ { "order": 1, "name": "python", - "count": 3141, - "percentage": 43.2 + "count": 3151, + "percentage": 43.24 }, { "order": 2, "name": "javascript", - "count": 1422, - "percentage": 19.56 + "count": 1424, + "percentage": 19.54 }, { "order": 3, "name": "java", - "count": 679, - "percentage": 9.34 + "count": 682, + "percentage": 9.36 }, { "order": 4, "name": "typescript", "count": 327, - "percentage": 4.5 + "percentage": 4.49 }, { "order": 5, "name": "c#", "count": 260, - "percentage": 3.58 + "percentage": 3.57 }, { "order": 6, "name": "kotlin", - "count": 222, - "percentage": 3.05 + "count": 223, + "percentage": 3.06 }, { "order": 7, "name": "go", - "count": 219, - "percentage": 3.01 + "count": 220, + "percentage": 3.02 }, { "order": 8, "name": "swift", "count": 167, - "percentage": 2.3 + "percentage": 2.29 }, { "order": 9, "name": "php", "count": 165, - "percentage": 2.27 + "percentage": 2.26 }, { "order": 10, "name": "c++", "count": 122, - "percentage": 1.68 + "percentage": 1.67 }, { "order": 11, @@ -312,7 +312,7 @@ "order": 18, "name": "pascal", "count": 20, - "percentage": 0.28 + "percentage": 0.27 }, { "order": 19, @@ -330,13 +330,13 @@ "order": 21, "name": "arduino", "count": 12, - "percentage": 0.17 + "percentage": 0.16 }, { "order": 22, "name": "cobol", "count": 12, - "percentage": 0.17 + "percentage": 0.16 }, { "order": 23, @@ -378,13 +378,13 @@ "order": 29, "name": "fortran", "count": 4, - "percentage": 0.06 + "percentage": 0.05 }, { "order": 30, "name": "gdscript", "count": 4, - "percentage": 0.06 + "percentage": 0.05 }, { "order": 31, @@ -553,7 +553,7 @@ { "order": 10, "name": "blackriper", - "count": 70, + "count": 71, "languages": 2 }, { @@ -600,31 +600,31 @@ }, { "order": 18, - "name": "juanppdev", - "count": 49, - "languages": 3 + "name": "amadorquispe", + "count": 51, + "languages": 2 }, { "order": 19, "name": "jesusway69", - "count": 49, + "count": 50, "languages": 2 }, { "order": 20, - "name": "raulg91", + "name": "juanppdev", "count": 49, - "languages": 2 + "languages": 3 }, { "order": 21, - "name": "ricjdev", + "name": "raulg91", "count": 49, "languages": 2 }, { "order": 22, - "name": "amadorquispe", + "name": "ricjdev", "count": 49, "languages": 2 }, @@ -672,64 +672,64 @@ }, { "order": 30, + "name": "raynerpv2022", + "count": 39, + "languages": 2 + }, + { + "order": 31, + "name": "soohav", + "count": 39, + "languages": 1 + }, + { + "order": 32, "name": "oriaj3", "count": 39, "languages": 1 }, { - "order": 31, + "order": 33, "name": "mouredev", "count": 39, "languages": 1 }, { - "order": 32, + "order": 34, "name": "asjordi", "count": 39, "languages": 1 }, { - "order": 33, + "order": 35, "name": "alexdevrep", "count": 38, "languages": 3 }, { - "order": 34, + "order": 36, "name": "emmanuelmmontesinos", "count": 38, "languages": 1 }, { - "order": 35, + "order": 37, "name": "rauldoezon", "count": 38, "languages": 1 }, { - "order": 36, + "order": 38, "name": "qv1ko", "count": 37, "languages": 4 }, { - "order": 37, - "name": "raynerpv2022", - "count": 37, - "languages": 2 - }, - { - "order": 38, + "order": 39, "name": "luishendrix92", "count": 37, "languages": 2 }, - { - "order": 39, - "name": "soohav", - "count": 37, - "languages": 1 - }, { "order": 40, "name": "rigo93acosta", @@ -948,31 +948,31 @@ }, { "order": 76, - "name": "jptxaya", + "name": "martinbohorquez", "count": 22, - "languages": 1 + "languages": 2 }, { "order": 77, - "name": "gordo-master", + "name": "jptxaya", "count": 22, "languages": 1 }, { "order": 78, - "name": "emedevelopa", + "name": "gordo-master", "count": 22, "languages": 1 }, { "order": 79, - "name": "giovanyosorio", - "count": 21, - "languages": 2 + "name": "emedevelopa", + "count": 22, + "languages": 1 }, { "order": 80, - "name": "martinbohorquez", + "name": "giovanyosorio", "count": 21, "languages": 2 }, @@ -1014,39 +1014,39 @@ }, { "order": 87, - "name": "yenneralayon142", + "name": "danielhdzr", "count": 19, "languages": 1 }, { "order": 88, - "name": "saezmd", + "name": "yenneralayon142", "count": 19, "languages": 1 }, { "order": 89, - "name": "trufoplus", + "name": "saezmd", "count": 19, "languages": 1 }, { "order": 90, - "name": "pguillo02", - "count": 18, - "languages": 5 + "name": "trufoplus", + "count": 19, + "languages": 1 }, { "order": 91, - "name": "estuardodev", + "name": "pguillo02", "count": 18, - "languages": 4 + "languages": 5 }, { "order": 92, - "name": "danielhdzr", + "name": "estuardodev", "count": 18, - "languages": 1 + "languages": 4 }, { "order": 93, @@ -1842,1855 +1842,1855 @@ }, { "order": 225, - "name": "abrahamraies", + "name": "sarismejiasanchez", "count": 7, "languages": 1 }, { "order": 226, - "name": "ocandodev", + "name": "abrahamraies", "count": 7, "languages": 1 }, { "order": 227, - "name": "marinaortells", + "name": "ocandodev", "count": 7, "languages": 1 }, { "order": 228, - "name": "18miguelgalarza", + "name": "marinaortells", "count": 7, "languages": 1 }, { "order": 229, - "name": "ldre3", + "name": "18miguelgalarza", "count": 7, "languages": 1 }, { "order": 230, - "name": "mtirador", + "name": "ldre3", "count": 7, "languages": 1 }, { "order": 231, - "name": "alextc35", + "name": "mtirador", "count": 7, "languages": 1 }, { "order": 232, - "name": "albertomorilla", + "name": "alextc35", "count": 7, "languages": 1 }, { "order": 233, - "name": "mohamedelderkaoui", + "name": "albertomorilla", "count": 7, "languages": 1 }, { "order": 234, - "name": "hectordbh", + "name": "mohamedelderkaoui", "count": 7, "languages": 1 }, { "order": 235, - "name": "glossypath", + "name": "hectordbh", "count": 7, "languages": 1 }, { "order": 236, + "name": "glossypath", + "count": 7, + "languages": 1 + }, + { + "order": 237, "name": "fidelysla", "count": 6, "languages": 3 }, { - "order": 237, + "order": 238, "name": "curtobrull", "count": 6, "languages": 3 }, { - "order": 238, + "order": 239, "name": "luisk0706", "count": 6, "languages": 2 }, { - "order": 239, + "order": 240, "name": "luterfloyd", "count": 6, "languages": 2 }, { - "order": 240, + "order": 241, "name": "danilo0203", "count": 6, "languages": 2 }, { - "order": 241, + "order": 242, "name": "rserradev", "count": 6, "languages": 2 }, { - "order": 242, + "order": 243, "name": "kronstadt-lambda", "count": 6, "languages": 2 }, { - "order": 243, + "order": 244, "name": "isaias-alt", "count": 6, "languages": 2 }, { - "order": 244, + "order": 245, "name": "oixild", "count": 6, "languages": 2 }, { - "order": 245, + "order": 246, "name": "adrs1166ma", "count": 6, "languages": 2 }, { - "order": 246, + "order": 247, "name": "troleomotor10", "count": 6, "languages": 2 }, { - "order": 247, + "order": 248, "name": "devknn", "count": 6, "languages": 2 }, { - "order": 248, + "order": 249, "name": "roswer13", "count": 6, "languages": 2 }, { - "order": 249, + "order": 250, "name": "blancowilson", "count": 6, "languages": 1 }, { - "order": 250, + "order": 251, "name": "eamartin96", "count": 6, "languages": 1 }, { - "order": 251, + "order": 252, "name": "eduhumanes91", "count": 6, "languages": 1 }, { - "order": 252, + "order": 253, "name": "lazar171717ech", "count": 6, "languages": 1 }, { - "order": 253, + "order": 254, "name": "abascal92", "count": 6, "languages": 1 }, { - "order": 254, + "order": 255, "name": "facundo-muoio", "count": 6, "languages": 1 }, { - "order": 255, + "order": 256, "name": "wolffcode", "count": 6, "languages": 1 }, { - "order": 256, + "order": 257, "name": "dannymarperone", "count": 6, "languages": 1 }, { - "order": 257, + "order": 258, "name": "guillemduno", "count": 6, "languages": 1 }, { - "order": 258, + "order": 259, "name": "mxtrar23", "count": 6, "languages": 1 }, { - "order": 259, + "order": 260, "name": "yeisonagm", "count": 6, "languages": 1 }, { - "order": 260, + "order": 261, "name": "gliadev", "count": 6, "languages": 1 }, { - "order": 261, + "order": 262, "name": "dafi02", "count": 6, "languages": 1 }, { - "order": 262, + "order": 263, + "name": "rafacv23", + "count": 6, + "languages": 1 + }, + { + "order": 264, "name": "elbarbero", "count": 6, "languages": 1 }, { - "order": 263, + "order": 265, "name": "bryan112094", "count": 5, "languages": 3 }, { - "order": 264, + "order": 266, "name": "alabacw74", "count": 5, "languages": 3 }, { - "order": 265, + "order": 267, "name": "espinoleandroo", "count": 5, "languages": 2 }, { - "order": 266, + "order": 268, "name": "vmatmarco", "count": 5, "languages": 2 }, { - "order": 267, + "order": 269, + "name": "tizog", + "count": 5, + "languages": 2 + }, + { + "order": 270, "name": "andresmendozaf", "count": 5, "languages": 2 }, { - "order": 268, + "order": 271, "name": "icedrek", "count": 5, "languages": 2 }, { - "order": 269, + "order": 272, "name": "jalivur", "count": 5, "languages": 2 }, { - "order": 270, + "order": 273, "name": "alejandrodave", "count": 5, "languages": 2 }, { - "order": 271, + "order": 274, "name": "d0ubt0", "count": 5, "languages": 1 }, { - "order": 272, + "order": 275, "name": "yharyarias", "count": 5, "languages": 1 }, { - "order": 273, + "order": 276, "name": "jorgeadamowicz", "count": 5, "languages": 1 }, { - "order": 274, + "order": 277, "name": "zakkdrte", "count": 5, "languages": 1 }, { - "order": 275, + "order": 278, "name": "jose-luis-lanza", "count": 5, "languages": 1 }, { - "order": 276, + "order": 279, "name": "santiago434c", "count": 5, "languages": 1 }, { - "order": 277, + "order": 280, "name": "augustdev2003", "count": 5, "languages": 1 }, { - "order": 278, + "order": 281, "name": "alberba", "count": 5, "languages": 1 }, { - "order": 279, + "order": 282, "name": "thezhizn", "count": 5, "languages": 1 }, { - "order": 280, + "order": 283, "name": "gabrielramos02", "count": 5, "languages": 1 }, { - "order": 281, + "order": 284, "name": "javitron100", "count": 5, "languages": 1 }, { - "order": 282, + "order": 285, "name": "gmbarrios", "count": 5, "languages": 1 }, { - "order": 283, + "order": 286, "name": "nomellamodante", "count": 5, "languages": 1 }, { - "order": 284, - "name": "sarismejiasanchez", - "count": 5, - "languages": 1 - }, - { - "order": 285, + "order": 287, "name": "franz-arzapalo", "count": 5, "languages": 1 }, { - "order": 286, + "order": 288, "name": "drvito1977", "count": 5, "languages": 1 }, { - "order": 287, + "order": 289, "name": "joanfv-git", "count": 5, "languages": 1 }, { - "order": 288, + "order": 290, "name": "eloychavezdev", "count": 5, "languages": 1 }, { - "order": 289, + "order": 291, "name": "n1sek", "count": 5, "languages": 1 }, { - "order": 290, + "order": 292, "name": "vixito", "count": 5, "languages": 1 }, { - "order": 291, + "order": 293, "name": "d4-n1", "count": 5, "languages": 1 }, { - "order": 292, + "order": 294, "name": "lauracastrillonmp", "count": 5, "languages": 1 }, { - "order": 293, + "order": 295, "name": "danielbustos342", "count": 5, "languages": 1 }, { - "order": 294, + "order": 296, "name": "robmxz", "count": 5, "languages": 1 }, { - "order": 295, + "order": 297, "name": "douglasdiazr", "count": 5, "languages": 1 }, { - "order": 296, + "order": 298, "name": "vasilealexandru02", "count": 5, "languages": 1 }, { - "order": 297, + "order": 299, "name": "victormugo", "count": 5, "languages": 1 }, { - "order": 298, + "order": 300, "name": "esaens12", "count": 5, "languages": 1 }, { - "order": 299, + "order": 301, "name": "adridoce", "count": 5, "languages": 1 }, { - "order": 300, + "order": 302, "name": "lucasag01", "count": 5, "languages": 1 }, { - "order": 301, + "order": 303, "name": "karolle", "count": 5, "languages": 1 }, { - "order": 302, + "order": 304, "name": "jcrodmir", "count": 5, "languages": 1 }, { - "order": 303, + "order": 305, "name": "alvarofernandezavalos", "count": 5, "languages": 1 }, { - "order": 304, + "order": 306, "name": "thaishdz", "count": 5, "languages": 1 }, { - "order": 305, + "order": 307, "name": "boterop", "count": 5, "languages": 1 }, { - "order": 306, + "order": 308, "name": "bastianalq", "count": 5, "languages": 1 }, { - "order": 307, - "name": "rafacv23", - "count": 5, - "languages": 1 - }, - { - "order": 308, + "order": 309, "name": "w00k", "count": 5, "languages": 1 }, { - "order": 309, + "order": 310, "name": "llonardo798", "count": 4, "languages": 4 }, { - "order": 310, + "order": 311, "name": "zarakilancelot", "count": 4, "languages": 3 }, { - "order": 311, + "order": 312, "name": "ruthmp", "count": 4, "languages": 2 }, { - "order": 312, + "order": 313, "name": "mendozalz", "count": 4, "languages": 2 }, { - "order": 313, + "order": 314, "name": "salkalero", "count": 4, "languages": 2 }, { - "order": 314, + "order": 315, "name": "willr30", "count": 4, "languages": 2 }, { - "order": 315, + "order": 316, "name": "eonozux", "count": 4, "languages": 2 }, { - "order": 316, + "order": 317, "name": "josefuentes-dev", "count": 4, "languages": 2 }, { - "order": 317, + "order": 318, "name": "k3nvd", "count": 4, "languages": 2 }, { - "order": 318, + "order": 319, "name": "daeduol", "count": 4, "languages": 2 }, { - "order": 319, + "order": 320, "name": "fullovellas", "count": 4, "languages": 2 }, { - "order": 320, + "order": 321, "name": "yablik", "count": 4, "languages": 2 }, { - "order": 321, + "order": 322, "name": "nox456", "count": 4, "languages": 1 }, { - "order": 322, + "order": 323, "name": "mplatab", "count": 4, "languages": 1 }, { - "order": 323, + "order": 324, "name": "davstudy", "count": 4, "languages": 1 }, { - "order": 324, + "order": 325, "name": "rodrigoghr", "count": 4, "languages": 1 }, { - "order": 325, + "order": 326, "name": "ramxv", "count": 4, "languages": 1 }, { - "order": 326, + "order": 327, "name": "inkhemi", "count": 4, "languages": 1 }, { - "order": 327, + "order": 328, "name": "tobibordino", "count": 4, "languages": 1 }, { - "order": 328, + "order": 329, "name": "mallcca", "count": 4, "languages": 1 }, { - "order": 329, + "order": 330, "name": "guillermo-k", "count": 4, "languages": 1 }, { - "order": 330, + "order": 331, "name": "angell4s", "count": 4, "languages": 1 }, { - "order": 331, + "order": 332, "name": "axelprz", "count": 4, "languages": 1 }, { - "order": 332, + "order": 333, "name": "luissssoto", "count": 4, "languages": 1 }, { - "order": 333, + "order": 334, "name": "dlgai12", "count": 4, "languages": 1 }, { - "order": 334, + "order": 335, "name": "carrenoalexander", "count": 4, "languages": 1 }, { - "order": 335, + "order": 336, "name": "txuky", "count": 4, "languages": 1 }, { - "order": 336, + "order": 337, "name": "zerek247", "count": 4, "languages": 1 }, { - "order": 337, + "order": 338, "name": "buriticasara", "count": 4, "languages": 1 }, { - "order": 338, + "order": 339, "name": "jadraz", "count": 4, "languages": 1 }, { - "order": 339, + "order": 340, "name": "cdbiancotti", "count": 4, "languages": 1 }, { - "order": 340, + "order": 341, "name": "albertorevel", "count": 4, "languages": 1 }, { - "order": 341, + "order": 342, "name": "anvildestroyer", "count": 4, "languages": 1 }, { - "order": 342, + "order": 343, "name": "vicman-182", "count": 4, "languages": 1 }, { - "order": 343, + "order": 344, "name": "sunjamer", "count": 4, "languages": 1 }, { - "order": 344, + "order": 345, "name": "javirub", "count": 4, "languages": 1 }, { - "order": 345, + "order": 346, "name": "lrpeset", "count": 4, "languages": 1 }, { - "order": 346, + "order": 347, "name": "joshbaez", "count": 4, "languages": 1 }, { - "order": 347, + "order": 348, "name": "joapalobael", "count": 4, "languages": 1 }, { - "order": 348, + "order": 349, "name": "joaquinlopez14", "count": 4, "languages": 1 }, { - "order": 349, + "order": 350, "name": "juperdev", "count": 4, "languages": 1 }, { - "order": 350, + "order": 351, "name": "angelurrutdev", "count": 4, "languages": 1 }, { - "order": 351, + "order": 352, "name": "duendeintemporal", "count": 4, "languages": 1 }, { - "order": 352, + "order": 353, "name": "omegatroy", "count": 4, "languages": 1 }, { - "order": 353, + "order": 354, "name": "socramwd", "count": 4, "languages": 1 }, { - "order": 354, + "order": 355, "name": "mateo423", "count": 4, "languages": 1 }, { - "order": 355, + "order": 356, "name": "dieswae", "count": 4, "languages": 1 }, { - "order": 356, + "order": 357, "name": "elianisdev", "count": 4, "languages": 1 }, { - "order": 357, + "order": 358, "name": "marcoslombardo", "count": 4, "languages": 1 }, { - "order": 358, + "order": 359, "name": "andeveling", "count": 4, "languages": 1 }, { - "order": 359, + "order": 360, "name": "sbs24", "count": 4, "languages": 1 }, { - "order": 360, + "order": 361, "name": "carzep09", "count": 4, "languages": 1 }, { - "order": 361, + "order": 362, "name": "traver79", "count": 4, "languages": 1 }, { - "order": 362, + "order": 363, "name": "santiago-munoz-garcia", "count": 4, "languages": 1 }, { - "order": 363, + "order": 364, "name": "blasbarragan", "count": 4, "languages": 1 }, { - "order": 364, + "order": 365, "name": "jerrysantana", "count": 4, "languages": 1 }, { - "order": 365, + "order": 366, "name": "password1989", "count": 4, "languages": 1 }, { - "order": 366, + "order": 367, "name": "bladi23", "count": 4, "languages": 1 }, { - "order": 367, + "order": 368, "name": "juanca2805", "count": 4, "languages": 1 }, { - "order": 368, + "order": 369, "name": "elhacedordecosas", "count": 4, "languages": 1 }, { - "order": 369, + "order": 370, "name": "hugovrc", "count": 4, "languages": 1 }, { - "order": 370, + "order": 371, "name": "mayerga", "count": 4, "languages": 1 }, { - "order": 371, + "order": 372, "name": "deivitdev", "count": 4, "languages": 1 }, { - "order": 372, + "order": 373, "name": "johnalexguerrero", "count": 4, "languages": 1 }, { - "order": 373, + "order": 374, "name": "jairo-alejandro", "count": 4, "languages": 1 }, { - "order": 374, + "order": 375, "name": "quejuan52", "count": 4, "languages": 1 }, { - "order": 375, + "order": 376, "name": "abel-ade", "count": 4, "languages": 1 }, { - "order": 376, + "order": 377, "name": "angelo-eyama", "count": 3, "languages": 3 }, { - "order": 377, + "order": 378, "name": "owen-ian", "count": 3, "languages": 3 }, { - "order": 378, + "order": 379, "name": "akaisombra", "count": 3, "languages": 3 }, { - "order": 379, + "order": 380, "name": "abelsrzz", "count": 3, "languages": 3 }, { - "order": 380, + "order": 381, "name": "jehiselruth", "count": 3, "languages": 3 }, { - "order": 381, + "order": 382, "name": "oskarcali", "count": 3, "languages": 3 }, { - "order": 382, + "order": 383, "name": "eloitr", "count": 3, "languages": 2 }, { - "order": 383, + "order": 384, "name": "diegopc-dev", "count": 3, "languages": 2 }, { - "order": 384, + "order": 385, "name": "dimasb69", "count": 3, "languages": 2 }, { - "order": 385, + "order": 386, "name": "seba9906", "count": 3, "languages": 2 }, { - "order": 386, + "order": 387, "name": "arliumdev", "count": 3, "languages": 2 }, { - "order": 387, + "order": 388, "name": "robindev1812", "count": 3, "languages": 2 }, { - "order": 388, + "order": 389, "name": "alfarog507", "count": 3, "languages": 2 }, { - "order": 389, + "order": 390, "name": "skala2301", "count": 3, "languages": 2 }, { - "order": 390, + "order": 391, "name": "augustosdev", "count": 3, "languages": 2 }, { - "order": 391, + "order": 392, "name": "clotrack", "count": 3, "languages": 2 }, { - "order": 392, + "order": 393, "name": "pablotaber", "count": 3, "languages": 2 }, { - "order": 393, + "order": 394, "name": "allanoscoding", "count": 3, "languages": 2 }, { - "order": 394, + "order": 395, "name": "n-skot", "count": 3, "languages": 2 }, - { - "order": 395, - "name": "bryanalzate007", - "count": 3, - "languages": 1 - }, { "order": 396, - "name": "tonywarcode", + "name": "bryanalzate007", "count": 3, "languages": 1 }, { "order": 397, - "name": "exanderguitar", + "name": "tonywarcode", "count": 3, "languages": 1 }, { "order": 398, - "name": "elkin-dev", + "name": "exanderguitar", "count": 3, "languages": 1 }, { "order": 399, - "name": "carlosalberto05", + "name": "elkin-dev", "count": 3, "languages": 1 }, { "order": 400, - "name": "minn09", + "name": "carlosalberto05", "count": 3, "languages": 1 }, { "order": 401, - "name": "jorgegarcia-dev", + "name": "minn09", "count": 3, "languages": 1 }, { "order": 402, - "name": "guillesese", + "name": "jorgegarcia-dev", "count": 3, "languages": 1 }, { "order": 403, - "name": "tekatoki", + "name": "guillesese", "count": 3, "languages": 1 }, { "order": 404, - "name": "dandrusco", + "name": "tekatoki", "count": 3, "languages": 1 }, { "order": 405, - "name": "estelacode", + "name": "dandrusco", "count": 3, "languages": 1 }, { "order": 406, - "name": "strooplab", + "name": "estelacode", "count": 3, "languages": 1 }, { "order": 407, - "name": "monikgbar", + "name": "strooplab", "count": 3, "languages": 1 }, { "order": 408, - "name": "mstaz4", + "name": "monikgbar", "count": 3, "languages": 1 }, { "order": 409, - "name": "ramon-almeida", + "name": "mstaz4", "count": 3, "languages": 1 }, { "order": 410, - "name": "oscarhub90", + "name": "ramon-almeida", "count": 3, "languages": 1 }, { "order": 411, - "name": "maxirica", + "name": "oscarhub90", "count": 3, "languages": 1 }, { "order": 412, - "name": "artdugarte", + "name": "maxirica", "count": 3, "languages": 1 }, { "order": 413, - "name": "elder202", + "name": "artdugarte", "count": 3, "languages": 1 }, { "order": 414, - "name": "bertolini-victor", + "name": "elder202", "count": 3, "languages": 1 }, { "order": 415, - "name": "oscargeovannyrincon", + "name": "bertolini-victor", "count": 3, "languages": 1 }, { "order": 416, - "name": "rgeditv1", + "name": "oscargeovannyrincon", "count": 3, "languages": 1 }, { "order": 417, - "name": "frostbitepy", + "name": "rgeditv1", "count": 3, "languages": 1 }, { "order": 418, - "name": "antii16", + "name": "frostbitepy", "count": 3, "languages": 1 }, { "order": 419, - "name": "mmacalli", + "name": "antii16", "count": 3, "languages": 1 }, { "order": 420, - "name": "dkp-dev", + "name": "mmacalli", "count": 3, "languages": 1 }, { "order": 421, - "name": "eliskopun", + "name": "dkp-dev", "count": 3, "languages": 1 }, { "order": 422, - "name": "jofedev", + "name": "eliskopun", "count": 3, "languages": 1 }, { "order": 423, - "name": "suescun845", + "name": "jofedev", "count": 3, "languages": 1 }, { "order": 424, - "name": "yeam-10", + "name": "suescun845", "count": 3, "languages": 1 }, { "order": 425, - "name": "joandevpy", + "name": "yeam-10", "count": 3, "languages": 1 }, { "order": 426, - "name": "macova96", + "name": "joandevpy", "count": 3, "languages": 1 }, { "order": 427, - "name": "beonzj", + "name": "macova96", "count": 3, "languages": 1 }, { "order": 428, - "name": "betzadev", + "name": "beonzj", "count": 3, "languages": 1 }, { "order": 429, - "name": "mizadlogcia", + "name": "betzadev", "count": 3, "languages": 1 }, { "order": 430, - "name": "emilianohoyos", + "name": "mizadlogcia", "count": 3, "languages": 1 }, { "order": 431, - "name": "camilo-zuluaga", + "name": "emilianohoyos", "count": 3, "languages": 1 }, { "order": 432, - "name": "zzepu", + "name": "camilo-zuluaga", "count": 3, "languages": 1 }, { "order": 433, - "name": "danielperezrubio", + "name": "zzepu", "count": 3, "languages": 1 }, { "order": 434, - "name": "marcoh2325", + "name": "danielperezrubio", "count": 3, "languages": 1 }, { "order": 435, - "name": "nathaliamf", + "name": "marcoh2325", "count": 3, "languages": 1 }, { "order": 436, - "name": "jacarrillob", + "name": "nathaliamf", "count": 3, "languages": 1 }, { "order": 437, - "name": "fdcorreadev", + "name": "jacarrillob", "count": 3, "languages": 1 }, { "order": 438, - "name": "matiascba27", + "name": "fdcorreadev", "count": 3, "languages": 1 }, { "order": 439, - "name": "andresargote", + "name": "matiascba27", "count": 3, "languages": 1 }, { "order": 440, - "name": "victorsschz", + "name": "andresargote", "count": 3, "languages": 1 }, { "order": 441, - "name": "faga01", + "name": "victorsschz", "count": 3, "languages": 1 }, { "order": 442, - "name": "dariorfm", + "name": "faga01", "count": 3, "languages": 1 }, { "order": 443, - "name": "hectoriglesias", + "name": "dariorfm", "count": 3, "languages": 1 }, { "order": 444, - "name": "josueeeee", + "name": "hectoriglesias", "count": 3, "languages": 1 }, { "order": 445, - "name": "fernandog25", + "name": "josueeeee", "count": 3, "languages": 1 }, { "order": 446, - "name": "migueltfangche", + "name": "fernandog25", "count": 3, "languages": 1 }, { "order": 447, - "name": "emaenriquez", + "name": "migueltfangche", "count": 3, "languages": 1 }, { "order": 448, - "name": "matrix-miguel", + "name": "emaenriquez", "count": 3, "languages": 1 }, { "order": 449, - "name": "r4kso", + "name": "matrix-miguel", "count": 3, "languages": 1 }, { "order": 450, - "name": "davidb313", + "name": "r4kso", "count": 3, "languages": 1 }, { "order": 451, - "name": "arbenisacosta", + "name": "davidb313", "count": 3, "languages": 1 }, { "order": 452, - "name": "sebascmb", + "name": "arbenisacosta", "count": 3, "languages": 1 }, { "order": 453, - "name": "jelozanov", + "name": "sebascmb", "count": 3, "languages": 1 }, { "order": 454, - "name": "singularpigeon", + "name": "jelozanov", "count": 3, "languages": 1 }, { "order": 455, - "name": "asaelz", + "name": "singularpigeon", "count": 3, "languages": 1 }, { "order": 456, - "name": "gpinedaoviedo", + "name": "asaelz", "count": 3, "languages": 1 }, { "order": 457, - "name": "orlas135", + "name": "gpinedaoviedo", "count": 3, "languages": 1 }, { "order": 458, - "name": "zuluangel", + "name": "orlas135", "count": 3, "languages": 1 }, { "order": 459, - "name": "uyarra73", + "name": "zuluangel", "count": 3, "languages": 1 }, { "order": 460, - "name": "sandracalatayud", + "name": "uyarra73", "count": 3, "languages": 1 }, { "order": 461, - "name": "agusbelp", + "name": "sandracalatayud", "count": 3, "languages": 1 }, { "order": 462, - "name": "ahinar", + "name": "agusbelp", "count": 3, "languages": 1 }, { "order": 463, - "name": "magupe09", + "name": "ahinar", "count": 3, "languages": 1 }, { "order": 464, - "name": "daniback95", + "name": "magupe09", "count": 3, "languages": 1 }, { "order": 465, - "name": "hatorob", + "name": "daniback95", "count": 3, "languages": 1 }, { "order": 466, - "name": "erysnell", + "name": "hatorob", "count": 3, "languages": 1 }, { "order": 467, - "name": "legs30011", + "name": "erysnell", "count": 3, "languages": 1 }, { "order": 468, - "name": "andyfg0289", + "name": "legs30011", "count": 3, "languages": 1 }, { "order": 469, - "name": "14davidnkt", + "name": "andyfg0289", "count": 3, "languages": 1 }, { "order": 470, - "name": "samuelarandia", + "name": "14davidnkt", "count": 3, "languages": 1 }, { "order": 471, - "name": "jaimerocel96", + "name": "samuelarandia", "count": 3, "languages": 1 }, { "order": 472, - "name": "gitperalta", + "name": "jaimerocel96", "count": 3, "languages": 1 }, { "order": 473, - "name": "dannyvera1234", + "name": "gitperalta", "count": 3, "languages": 1 }, { "order": 474, - "name": "axelsparta", + "name": "dannyvera1234", "count": 3, "languages": 1 }, { "order": 475, - "name": "tebaah", + "name": "axelsparta", "count": 3, "languages": 1 }, { "order": 476, - "name": "matteozhao98", + "name": "tebaah", "count": 3, "languages": 1 }, { "order": 477, - "name": "crisvigas", + "name": "matteozhao98", "count": 3, "languages": 1 }, { "order": 478, - "name": "tomytsa", + "name": "crisvigas", "count": 3, "languages": 1 }, { "order": 479, - "name": "carlosguariglia", + "name": "tomytsa", "count": 3, "languages": 1 }, { "order": 480, - "name": "blfuentes", + "name": "carlosguariglia", "count": 3, "languages": 1 }, { "order": 481, - "name": "sebasgrdev", + "name": "blfuentes", "count": 3, "languages": 1 }, { "order": 482, - "name": "sitnestic", + "name": "sebasgrdev", "count": 3, "languages": 1 }, { "order": 483, - "name": "confley", + "name": "sitnestic", "count": 3, "languages": 1 }, { "order": 484, - "name": "francofmv", + "name": "confley", "count": 3, "languages": 1 }, { "order": 485, - "name": "david-quinones", + "name": "francofmv", "count": 3, "languages": 1 }, { "order": 486, - "name": "marce1084", + "name": "david-quinones", "count": 3, "languages": 1 }, { "order": 487, - "name": "freedainew", + "name": "marce1084", "count": 3, "languages": 1 }, { "order": 488, - "name": "rubioj17", + "name": "freedainew", "count": 3, "languages": 1 }, { "order": 489, - "name": "kine-jdf", + "name": "rubioj17", "count": 3, "languages": 1 }, { "order": 490, - "name": "kingsaul22", + "name": "kine-jdf", "count": 3, "languages": 1 }, { "order": 491, - "name": "ainoaran", + "name": "kingsaul22", "count": 3, "languages": 1 }, { "order": 492, - "name": "fluna29", + "name": "ainoaran", "count": 3, "languages": 1 }, { "order": 493, - "name": "xurxogz", + "name": "fluna29", "count": 3, "languages": 1 }, { "order": 494, - "name": "davidsorroche", + "name": "xurxogz", "count": 3, "languages": 1 }, { "order": 495, - "name": "natalinacn", + "name": "davidsorroche", "count": 3, "languages": 1 }, { "order": 496, - "name": "yaretzyrb", + "name": "natalinacn", "count": 3, "languages": 1 }, { "order": 497, - "name": "swifty0705", + "name": "yaretzyrb", "count": 3, "languages": 1 }, { "order": 498, - "name": "marianoemir", + "name": "swifty0705", "count": 3, "languages": 1 }, { "order": 499, - "name": "guido2288", + "name": "marianoemir", "count": 3, "languages": 1 }, { "order": 500, - "name": "githjuan", + "name": "guido2288", "count": 3, "languages": 1 }, { "order": 501, - "name": "rocallejas", + "name": "githjuan", "count": 3, "languages": 1 }, { "order": 502, - "name": "jeyker-dev", + "name": "rocallejas", "count": 3, "languages": 1 }, { "order": 503, - "name": "barbafebles", + "name": "jeyker-dev", "count": 3, "languages": 1 }, { "order": 504, - "name": "aggranadoss", + "name": "barbafebles", "count": 3, "languages": 1 }, { "order": 505, - "name": "heliercamejo", + "name": "aggranadoss", "count": 3, "languages": 1 }, { "order": 506, - "name": "coshiloco", + "name": "heliercamejo", "count": 3, "languages": 1 }, { "order": 507, - "name": "atienzar", + "name": "coshiloco", "count": 3, "languages": 1 }, { "order": 508, - "name": "javiearth", + "name": "atienzar", "count": 3, "languages": 1 }, { "order": 509, - "name": "marlonleon2023", + "name": "javiearth", "count": 3, "languages": 1 }, { "order": 510, - "name": "vandresca", + "name": "marlonleon2023", "count": 3, "languages": 1 }, { "order": 511, - "name": "ggtorca", + "name": "vandresca", "count": 3, "languages": 1 }, { "order": 512, - "name": "ivanpelu7", + "name": "ggtorca", "count": 3, "languages": 1 }, { "order": 513, - "name": "alejomazov", + "name": "ivanpelu7", "count": 3, "languages": 1 }, { "order": 514, - "name": "oscar503sv", + "name": "alejomazov", "count": 3, "languages": 1 }, { "order": 515, - "name": "dmauricio4", + "name": "oscar503sv", "count": 3, "languages": 1 }, { "order": 516, - "name": "davidr1594", + "name": "dmauricio4", "count": 3, "languages": 1 }, { "order": 517, - "name": "juanmjimenezs", + "name": "davidr1594", "count": 3, "languages": 1 }, { "order": 518, - "name": "mellamoomar", + "name": "juanmjimenezs", "count": 3, "languages": 1 }, { "order": 519, - "name": "ikeragi05", + "name": "mellamoomar", "count": 3, "languages": 1 }, { "order": 520, - "name": "nikorasu-d", + "name": "ikeragi05", "count": 3, "languages": 1 }, { "order": 521, - "name": "mantaras96", + "name": "nikorasu-d", "count": 3, "languages": 1 }, { "order": 522, - "name": "davidvilem", + "name": "mantaras96", "count": 3, "languages": 1 }, { "order": 523, - "name": "frangarmez21", + "name": "davidvilem", "count": 3, "languages": 1 }, { "order": 524, - "name": "dylanb55", + "name": "frangarmez21", "count": 3, "languages": 1 }, { "order": 525, - "name": "juxxon23", + "name": "dylanb55", "count": 3, "languages": 1 }, { "order": 526, - "name": "andreessj", - "count": 2, - "languages": 2 + "name": "juxxon23", + "count": 3, + "languages": 1 }, { "order": 527, - "name": "juan-wills", + "name": "andreessj", "count": 2, "languages": 2 }, { "order": 528, - "name": "ddanone", + "name": "juan-wills", "count": 2, "languages": 2 }, { "order": 529, - "name": "lilberick", + "name": "ddanone", "count": 2, "languages": 2 }, { "order": 530, - "name": "tecfer", + "name": "lilberick", "count": 2, "languages": 2 }, { "order": 531, - "name": "chuanmi", + "name": "tecfer", "count": 2, "languages": 2 }, { "order": 532, - "name": "carresoft", + "name": "chuanmi", "count": 2, "languages": 2 }, { "order": 533, - "name": "tizog", + "name": "carresoft", "count": 2, "languages": 2 }, @@ -5664,2124 +5664,2130 @@ }, { "order": 862, - "name": "snowale", + "name": "ipfabio", "count": 1, "languages": 1 }, { "order": 863, - "name": "rastaxico", + "name": "snowale", "count": 1, "languages": 1 }, { "order": 864, - "name": "gl-informatica", + "name": "rastaxico", "count": 1, "languages": 1 }, { "order": 865, - "name": "dacaldev", + "name": "gl-informatica", "count": 1, "languages": 1 }, { "order": 866, - "name": "javirr4", + "name": "dacaldev", "count": 1, "languages": 1 }, { "order": 867, - "name": "amitchellg", + "name": "javirr4", "count": 1, "languages": 1 }, { "order": 868, - "name": "henrydavidprimera", + "name": "amitchellg", "count": 1, "languages": 1 }, { "order": 869, - "name": "oxtornado", + "name": "henrydavidprimera", "count": 1, "languages": 1 }, { "order": 870, - "name": "cristianvergaraf", + "name": "oxtornado", "count": 1, "languages": 1 }, { "order": 871, - "name": "geridage", + "name": "cristianvergaraf", "count": 1, "languages": 1 }, { "order": 872, - "name": "osneidert", + "name": "geridage", "count": 1, "languages": 1 }, { "order": 873, - "name": "perla-zg", + "name": "osneidert", "count": 1, "languages": 1 }, { "order": 874, - "name": "zeraven09", + "name": "perla-zg", "count": 1, "languages": 1 }, { "order": 875, - "name": "acobo3", + "name": "zeraven09", "count": 1, "languages": 1 }, { "order": 876, - "name": "fergz1988", + "name": "acobo3", "count": 1, "languages": 1 }, { "order": 877, - "name": "johao23", + "name": "fergz1988", "count": 1, "languages": 1 }, { "order": 878, - "name": "hnaranjog", + "name": "johao23", "count": 1, "languages": 1 }, { "order": 879, - "name": "giovanni-schmaily", + "name": "hnaranjog", "count": 1, "languages": 1 }, { "order": 880, - "name": "jgarteag", + "name": "giovanni-schmaily", "count": 1, "languages": 1 }, { "order": 881, - "name": "ndepaul82", + "name": "jgarteag", "count": 1, "languages": 1 }, { "order": 882, - "name": "neusier101", + "name": "ndepaul82", "count": 1, "languages": 1 }, { "order": 883, - "name": "wilsonbarrera", + "name": "neusier101", "count": 1, "languages": 1 }, { "order": 884, - "name": "mrf1989", + "name": "wilsonbarrera", "count": 1, "languages": 1 }, { "order": 885, - "name": "charly024", + "name": "mrf1989", "count": 1, "languages": 1 }, { "order": 886, - "name": "nico70012", + "name": "charly024", "count": 1, "languages": 1 }, { "order": 887, - "name": "gersonoroz", + "name": "nico70012", "count": 1, "languages": 1 }, { "order": 888, - "name": "johannmanrique", + "name": "gersonoroz", "count": 1, "languages": 1 }, { "order": 889, - "name": "facundorsabia", + "name": "johannmanrique", "count": 1, "languages": 1 }, { "order": 890, - "name": "cisneros2404", + "name": "facundorsabia", "count": 1, "languages": 1 }, { "order": 891, - "name": "josem17-cyber", + "name": "cisneros2404", "count": 1, "languages": 1 }, { "order": 892, - "name": "sbngl", + "name": "josem17-cyber", "count": 1, "languages": 1 }, { "order": 893, - "name": "x3mboy", + "name": "sbngl", "count": 1, "languages": 1 }, { "order": 894, - "name": "van-02", + "name": "x3mboy", "count": 1, "languages": 1 }, { "order": 895, - "name": "franciscokarriere", + "name": "van-02", "count": 1, "languages": 1 }, { "order": 896, - "name": "jd-gm", + "name": "franciscokarriere", "count": 1, "languages": 1 }, { "order": 897, - "name": "fzcarlitos", + "name": "jd-gm", "count": 1, "languages": 1 }, { "order": 898, - "name": "dmhenaopa", + "name": "fzcarlitos", "count": 1, "languages": 1 }, { "order": 899, - "name": "gerespinosa", + "name": "dmhenaopa", "count": 1, "languages": 1 }, { "order": 900, - "name": "alexis0717", + "name": "gerespinosa", "count": 1, "languages": 1 }, { "order": 901, - "name": "rojasvargas", + "name": "alexis0717", "count": 1, "languages": 1 }, { "order": 902, - "name": "alexxawada", + "name": "rojasvargas", "count": 1, "languages": 1 }, { "order": 903, - "name": "lopesteban", + "name": "alexxawada", "count": 1, "languages": 1 }, { "order": 904, - "name": "lytsar", + "name": "lopesteban", "count": 1, "languages": 1 }, { "order": 905, - "name": "jsruedatorres", + "name": "lytsar", "count": 1, "languages": 1 }, { "order": 906, - "name": "fullstackarlo", + "name": "jsruedatorres", "count": 1, "languages": 1 }, { "order": 907, - "name": "brayancordova1", + "name": "fullstackarlo", "count": 1, "languages": 1 }, { "order": 908, - "name": "francescoalterio", + "name": "brayancordova1", "count": 1, "languages": 1 }, { "order": 909, - "name": "francomoreira", + "name": "francescoalterio", "count": 1, "languages": 1 }, { "order": 910, - "name": "kenzambrano", + "name": "francomoreira", "count": 1, "languages": 1 }, { "order": 911, - "name": "edperez07", + "name": "kenzambrano", "count": 1, "languages": 1 }, { "order": 912, - "name": "edgonzz", + "name": "edperez07", "count": 1, "languages": 1 }, { "order": 913, - "name": "siuldev", + "name": "edgonzz", "count": 1, "languages": 1 }, { "order": 914, - "name": "vmga09", + "name": "siuldev", "count": 1, "languages": 1 }, { "order": 915, - "name": "akaidmaru", + "name": "vmga09", "count": 1, "languages": 1 }, { "order": 916, - "name": "frcan89", + "name": "akaidmaru", "count": 1, "languages": 1 }, { "order": 917, - "name": "jpiacaruso", + "name": "frcan89", "count": 1, "languages": 1 }, { "order": 918, - "name": "m4xisil", + "name": "jpiacaruso", "count": 1, "languages": 1 }, { "order": 919, - "name": "leydimadrid", + "name": "m4xisil", "count": 1, "languages": 1 }, { "order": 920, - "name": "albabp", + "name": "leydimadrid", "count": 1, "languages": 1 }, { "order": 921, - "name": "juanpablo-a", + "name": "albabp", "count": 1, "languages": 1 }, { "order": 922, - "name": "cgomezadolfo", + "name": "juanpablo-a", "count": 1, "languages": 1 }, { "order": 923, - "name": "lfam200", + "name": "cgomezadolfo", "count": 1, "languages": 1 }, { "order": 924, - "name": "nfom24", + "name": "lfam200", "count": 1, "languages": 1 }, { "order": 925, - "name": "kocho03", + "name": "nfom24", "count": 1, "languages": 1 }, { "order": 926, - "name": "yessikamichelle", + "name": "kocho03", "count": 1, "languages": 1 }, { "order": 927, - "name": "fernandofl", + "name": "yessikamichelle", "count": 1, "languages": 1 }, { "order": 928, - "name": "peticas", + "name": "fernandofl", "count": 1, "languages": 1 }, { "order": 929, - "name": "royhuamanavila", + "name": "peticas", "count": 1, "languages": 1 }, { "order": 930, - "name": "afl0r3s", + "name": "royhuamanavila", "count": 1, "languages": 1 }, { "order": 931, - "name": "abengl", + "name": "afl0r3s", "count": 1, "languages": 1 }, { "order": 932, - "name": "isnatthy", + "name": "abengl", "count": 1, "languages": 1 }, { "order": 933, - "name": "lfwzk", + "name": "isnatthy", "count": 1, "languages": 1 }, { "order": 934, - "name": "denisortega", + "name": "lfwzk", "count": 1, "languages": 1 }, { "order": 935, - "name": "johnniew81", + "name": "denisortega", "count": 1, "languages": 1 }, { "order": 936, - "name": "sergioab7", + "name": "johnniew81", "count": 1, "languages": 1 }, { "order": 937, - "name": "joseperesini", + "name": "sergioab7", "count": 1, "languages": 1 }, { "order": 938, - "name": "aleclto7", + "name": "joseperesini", "count": 1, "languages": 1 }, { "order": 939, - "name": "pierre-ol", + "name": "aleclto7", "count": 1, "languages": 1 }, { "order": 940, - "name": "sixtodev", + "name": "pierre-ol", "count": 1, "languages": 1 }, { "order": 941, - "name": "nnunezmedina", + "name": "sixtodev", "count": 1, "languages": 1 }, { "order": 942, - "name": "conrado85", + "name": "nnunezmedina", "count": 1, "languages": 1 }, { "order": 943, - "name": "patricioguerra30", + "name": "conrado85", "count": 1, "languages": 1 }, { "order": 944, - "name": "walkerlyna", + "name": "patricioguerra30", "count": 1, "languages": 1 }, { "order": 945, - "name": "augustbs", + "name": "walkerlyna", "count": 1, "languages": 1 }, { "order": 946, - "name": "gc796", + "name": "augustbs", "count": 1, "languages": 1 }, { "order": 947, - "name": "diegoxxd", + "name": "gc796", "count": 1, "languages": 1 }, { "order": 948, - "name": "ronnieruuz", + "name": "diegoxxd", "count": 1, "languages": 1 }, { "order": 949, - "name": "nozodev", + "name": "ronnieruuz", "count": 1, "languages": 1 }, { "order": 950, - "name": "pointfs", + "name": "nozodev", "count": 1, "languages": 1 }, { "order": 951, - "name": "saintsluis", + "name": "pointfs", "count": 1, "languages": 1 }, { "order": 952, - "name": "cliverjimny123", + "name": "saintsluis", "count": 1, "languages": 1 }, { "order": 953, - "name": "mekanicas", + "name": "cliverjimny123", "count": 1, "languages": 1 }, { "order": 954, - "name": "vainsito1", + "name": "mekanicas", "count": 1, "languages": 1 }, { "order": 955, - "name": "kouski", + "name": "vainsito1", "count": 1, "languages": 1 }, { "order": 956, - "name": "ricarsur", + "name": "kouski", "count": 1, "languages": 1 }, { "order": 957, - "name": "s9code", + "name": "ricarsur", "count": 1, "languages": 1 }, { "order": 958, - "name": "jacobrwx", + "name": "s9code", "count": 1, "languages": 1 }, { "order": 959, + "name": "jacobrwx", + "count": 1, + "languages": 1 + }, + { + "order": 960, "name": "dianelis1", "count": 1, "languages": 1 }, { - "order": 960, + "order": 961, "name": "oscarletelier", "count": 1, "languages": 1 }, { - "order": 961, + "order": 962, "name": "l3v1xx", "count": 1, "languages": 1 }, { - "order": 962, + "order": 963, "name": "codejoss", "count": 1, "languages": 1 }, { - "order": 963, + "order": 964, "name": "miguelsarm", "count": 1, "languages": 1 }, { - "order": 964, + "order": 965, "name": "romanocoder", "count": 1, "languages": 1 }, { - "order": 965, + "order": 966, "name": "carlosdiaz-dev", "count": 1, "languages": 1 }, { - "order": 966, + "order": 967, "name": "hfvaronb", "count": 1, "languages": 1 }, { - "order": 967, + "order": 968, "name": "flarien", "count": 1, "languages": 1 }, { - "order": 968, + "order": 969, "name": "abraham9804", "count": 1, "languages": 1 }, { - "order": 969, + "order": 970, "name": "sejotaz", "count": 1, "languages": 1 }, { - "order": 970, + "order": 971, "name": "gustavoguerrero", "count": 1, "languages": 1 }, { - "order": 971, + "order": 972, "name": "javieradev", "count": 1, "languages": 1 }, { - "order": 972, + "order": 973, "name": "frannm29", "count": 1, "languages": 1 }, { - "order": 973, + "order": 974, "name": "mvillegas18", "count": 1, "languages": 1 }, { - "order": 974, + "order": 975, "name": "antonioverdugo", "count": 1, "languages": 1 }, { - "order": 975, + "order": 976, "name": "kronomio", "count": 1, "languages": 1 }, { - "order": 976, + "order": 977, "name": "quirogapau", "count": 1, "languages": 1 }, { - "order": 977, + "order": 978, "name": "ercky1980", "count": 1, "languages": 1 }, { - "order": 978, + "order": 979, "name": "madelefonb", "count": 1, "languages": 1 }, { - "order": 979, + "order": 980, "name": "imista", "count": 1, "languages": 1 }, { - "order": 980, + "order": 981, "name": "mhrosariom", "count": 1, "languages": 1 }, { - "order": 981, + "order": 982, "name": "mdemena", "count": 1, "languages": 1 }, { - "order": 982, + "order": 983, "name": "luchof5", "count": 1, "languages": 1 }, { - "order": 983, + "order": 984, "name": "nicorey89", "count": 1, "languages": 1 }, { - "order": 984, + "order": 985, "name": "santaravena", "count": 1, "languages": 1 }, { - "order": 985, + "order": 986, "name": "xnomada", "count": 1, "languages": 1 }, { - "order": 986, + "order": 987, "name": "yaojema", "count": 1, "languages": 1 }, { - "order": 987, + "order": 988, "name": "diego-santana23", "count": 1, "languages": 1 }, { - "order": 988, + "order": 989, "name": "aidicoop", "count": 1, "languages": 1 }, { - "order": 989, + "order": 990, "name": "agus-ig", "count": 1, "languages": 1 }, { - "order": 990, + "order": 991, "name": "dacronik", "count": 1, "languages": 1 }, { - "order": 991, + "order": 992, "name": "alemar16", "count": 1, "languages": 1 }, { - "order": 992, + "order": 993, "name": "alvarommedia", "count": 1, "languages": 1 }, { - "order": 993, + "order": 994, "name": "rodmiggithub", "count": 1, "languages": 1 }, { - "order": 994, + "order": 995, "name": "lucianogriffa", "count": 1, "languages": 1 }, { - "order": 995, + "order": 996, "name": "datrujillog", "count": 1, "languages": 1 }, { - "order": 996, + "order": 997, "name": "kevinramirez28", "count": 1, "languages": 1 }, { - "order": 997, + "order": 998, "name": "chriszaldana", "count": 1, "languages": 1 }, { - "order": 998, + "order": 999, "name": "1978acb", "count": 1, "languages": 1 }, { - "order": 999, + "order": 1000, "name": "maximotoro", "count": 1, "languages": 1 }, { - "order": 1000, + "order": 1001, "name": "bjchavez", "count": 1, "languages": 1 }, { - "order": 1001, + "order": 1002, "name": "seigigim", "count": 1, "languages": 1 }, { - "order": 1002, + "order": 1003, "name": "gizelads", "count": 1, "languages": 1 }, { - "order": 1003, + "order": 1004, "name": "mauricioyair", "count": 1, "languages": 1 }, { - "order": 1004, + "order": 1005, "name": "is2095", "count": 1, "languages": 1 }, { - "order": 1005, + "order": 1006, "name": "axelwestman", "count": 1, "languages": 1 }, { - "order": 1006, + "order": 1007, "name": "manugonzalito", "count": 1, "languages": 1 }, { - "order": 1007, + "order": 1008, "name": "coletonosh", "count": 1, "languages": 1 }, { - "order": 1008, + "order": 1009, "name": "deaconst", "count": 1, "languages": 1 }, { - "order": 1009, + "order": 1010, "name": "cibacoa", "count": 1, "languages": 1 }, { - "order": 1010, + "order": 1011, "name": "feliaguirre7", "count": 1, "languages": 1 }, { - "order": 1011, + "order": 1012, "name": "rulo77", "count": 1, "languages": 1 }, { - "order": 1012, + "order": 1013, "name": "marcosapodaca", "count": 1, "languages": 1 }, { - "order": 1013, + "order": 1014, "name": "manuhssj", "count": 1, "languages": 1 }, { - "order": 1014, + "order": 1015, "name": "serg032", "count": 1, "languages": 1 }, { - "order": 1015, + "order": 1016, "name": "lucc4sz", "count": 1, "languages": 1 }, { - "order": 1016, + "order": 1017, "name": "jancalos", "count": 1, "languages": 1 }, { - "order": 1017, + "order": 1018, "name": "javodevon", "count": 1, "languages": 1 }, { - "order": 1018, + "order": 1019, "name": "astriebeck", "count": 1, "languages": 1 }, { - "order": 1019, + "order": 1020, "name": "ishimaku", "count": 1, "languages": 1 }, { - "order": 1020, + "order": 1021, "name": "afacorroloscos", "count": 1, "languages": 1 }, { - "order": 1021, + "order": 1022, "name": "ledyam", "count": 1, "languages": 1 }, { - "order": 1022, + "order": 1023, "name": "jatomas", "count": 1, "languages": 1 }, { - "order": 1023, + "order": 1024, "name": "marqitos", "count": 1, "languages": 1 }, { - "order": 1024, + "order": 1025, "name": "marvinagui", "count": 1, "languages": 1 }, { - "order": 1025, + "order": 1026, "name": "lobogeekmx", "count": 1, "languages": 1 }, { - "order": 1026, + "order": 1027, "name": "rocadev2714", "count": 1, "languages": 1 }, { - "order": 1027, + "order": 1028, "name": "rootqui", "count": 1, "languages": 1 }, { - "order": 1028, + "order": 1029, "name": "miguelgargallo", "count": 1, "languages": 1 }, { - "order": 1029, + "order": 1030, "name": "sandrarg85", "count": 1, "languages": 1 }, { - "order": 1030, + "order": 1031, "name": "protpus98", "count": 1, "languages": 1 }, { - "order": 1031, + "order": 1032, "name": "pkmaventura", "count": 1, "languages": 1 }, { - "order": 1032, + "order": 1033, "name": "jcrobles99", "count": 1, "languages": 1 }, { - "order": 1033, + "order": 1034, "name": "nunezlagos", "count": 1, "languages": 1 }, { - "order": 1034, + "order": 1035, "name": "chrisfelixgil", "count": 1, "languages": 1 }, { - "order": 1035, + "order": 1036, "name": "deimoshall", "count": 1, "languages": 1 }, { - "order": 1036, + "order": 1037, "name": "fede6299", "count": 1, "languages": 1 }, { - "order": 1037, + "order": 1038, "name": "darkohokage", "count": 1, "languages": 1 }, { - "order": 1038, + "order": 1039, "name": "pablo-lnx", "count": 1, "languages": 1 }, { - "order": 1039, + "order": 1040, "name": "kevin05m", "count": 1, "languages": 1 }, { - "order": 1040, + "order": 1041, "name": "diegomm27", "count": 1, "languages": 1 }, { - "order": 1041, + "order": 1042, "name": "joferpg", "count": 1, "languages": 1 }, { - "order": 1042, + "order": 1043, "name": "mbmaeso", "count": 1, "languages": 1 }, { - "order": 1043, + "order": 1044, "name": "braiso-22", "count": 1, "languages": 1 }, { - "order": 1044, + "order": 1045, "name": "deiiviitdev", "count": 1, "languages": 1 }, { - "order": 1045, + "order": 1046, "name": "alvarominarro", "count": 1, "languages": 1 }, { - "order": 1046, + "order": 1047, "name": "borjadelgadodev", "count": 1, "languages": 1 }, { - "order": 1047, + "order": 1048, "name": "elpeque29", "count": 1, "languages": 1 }, { - "order": 1048, + "order": 1049, "name": "jaennova", "count": 1, "languages": 1 }, { - "order": 1049, + "order": 1050, "name": "luisalberto22", "count": 1, "languages": 1 }, { - "order": 1050, + "order": 1051, "name": "daniel-cas", "count": 1, "languages": 1 }, { - "order": 1051, + "order": 1052, "name": "davidcv-dev", "count": 1, "languages": 1 }, { - "order": 1052, + "order": 1053, "name": "francisleble", "count": 1, "languages": 1 }, { - "order": 1053, + "order": 1054, "name": "jhordanluyo", "count": 1, "languages": 1 }, { - "order": 1054, + "order": 1055, "name": "acirdevelper", "count": 1, "languages": 1 }, { - "order": 1055, + "order": 1056, "name": "marcosjarrin", "count": 1, "languages": 1 }, { - "order": 1056, + "order": 1057, "name": "implevacui", "count": 1, "languages": 1 }, { - "order": 1057, + "order": 1058, "name": "jandresalvar", "count": 1, "languages": 1 }, { - "order": 1058, + "order": 1059, "name": "ca2puntosv", "count": 1, "languages": 1 }, { - "order": 1059, + "order": 1060, "name": "angelcruzg23", "count": 1, "languages": 1 }, { - "order": 1060, + "order": 1061, "name": "corvo-99", "count": 1, "languages": 1 }, { - "order": 1061, + "order": 1062, "name": "devm0nk3y", "count": 1, "languages": 1 }, { - "order": 1062, + "order": 1063, "name": "danielcastillo1112", "count": 1, "languages": 1 }, { - "order": 1063, + "order": 1064, "name": "sirvega83", "count": 1, "languages": 1 }, { - "order": 1064, + "order": 1065, "name": "franpua", "count": 1, "languages": 1 }, { - "order": 1065, + "order": 1066, "name": "malkarmah", "count": 1, "languages": 1 }, { - "order": 1066, + "order": 1067, "name": "palons29", "count": 1, "languages": 1 }, { - "order": 1067, + "order": 1068, "name": "diegopardomontero", "count": 1, "languages": 1 }, { - "order": 1068, + "order": 1069, "name": "robermejia", "count": 1, "languages": 1 }, { - "order": 1069, + "order": 1070, "name": "zyn7e", "count": 1, "languages": 1 }, { - "order": 1070, + "order": 1071, "name": "javiir", "count": 1, "languages": 1 }, { - "order": 1071, + "order": 1072, "name": "antoniojzp86", "count": 1, "languages": 1 }, { - "order": 1072, + "order": 1073, "name": "v1k770r", "count": 1, "languages": 1 }, { - "order": 1073, + "order": 1074, "name": "clespinosa2024", "count": 1, "languages": 1 }, { - "order": 1074, + "order": 1075, "name": "gianellannie", "count": 1, "languages": 1 }, { - "order": 1075, + "order": 1076, "name": "dany3gs", "count": 1, "languages": 1 }, { - "order": 1076, + "order": 1077, "name": "queralesdev", "count": 1, "languages": 1 }, { - "order": 1077, + "order": 1078, "name": "bycris13", "count": 1, "languages": 1 }, { - "order": 1078, + "order": 1079, "name": "reneguzman7", "count": 1, "languages": 1 }, { - "order": 1079, + "order": 1080, "name": "adriansaint07", "count": 1, "languages": 1 }, { - "order": 1080, + "order": 1081, "name": "dovinhoyos", "count": 1, "languages": 1 }, { - "order": 1081, + "order": 1082, "name": "fredylopez01", "count": 1, "languages": 1 }, { - "order": 1082, + "order": 1083, "name": "lautimorales", "count": 1, "languages": 1 }, { - "order": 1083, + "order": 1084, "name": "jlrojano", "count": 1, "languages": 1 }, { - "order": 1084, + "order": 1085, "name": "jrgim", "count": 1, "languages": 1 }, { - "order": 1085, + "order": 1086, "name": "alefine", "count": 1, "languages": 1 }, { - "order": 1086, + "order": 1087, "name": "jaimenar", "count": 1, "languages": 1 }, { - "order": 1087, + "order": 1088, "name": "frankmon03", "count": 1, "languages": 1 }, { - "order": 1088, + "order": 1089, "name": "det3992", "count": 1, "languages": 1 }, { - "order": 1089, + "order": 1090, "name": "hanzd07", "count": 1, "languages": 1 }, { - "order": 1090, + "order": 1091, "name": "jony_english22", "count": 1, "languages": 1 }, { - "order": 1091, + "order": 1092, "name": "adriangonzalezroble", "count": 1, "languages": 1 }, { - "order": 1092, + "order": 1093, "name": "alvaropg15", "count": 1, "languages": 1 }, { - "order": 1093, + "order": 1094, "name": "rreyes0424", "count": 1, "languages": 1 }, { - "order": 1094, + "order": 1095, "name": "sanuka78", "count": 1, "languages": 1 }, { - "order": 1095, + "order": 1096, "name": "albert-29", "count": 1, "languages": 1 }, { - "order": 1096, + "order": 1097, "name": "dsmhp0", "count": 1, "languages": 1 }, { - "order": 1097, + "order": 1098, "name": "cristianmr87", "count": 1, "languages": 1 }, { - "order": 1098, + "order": 1099, "name": "cristian-encalada", "count": 1, "languages": 1 }, { - "order": 1099, + "order": 1100, "name": "santiagopereiraviroga", "count": 1, "languages": 1 }, { - "order": 1100, + "order": 1101, "name": "pguillo", "count": 1, "languages": 1 }, { - "order": 1101, + "order": 1102, "name": "martinaq", "count": 1, "languages": 1 }, { - "order": 1102, + "order": 1103, "name": "angeldevsarrollo", "count": 1, "languages": 1 }, { - "order": 1103, + "order": 1104, "name": "lewisoneil", "count": 1, "languages": 1 }, { - "order": 1104, + "order": 1105, "name": "danisaurio94", "count": 1, "languages": 1 }, { - "order": 1105, + "order": 1106, "name": "ivanserran", "count": 1, "languages": 1 }, { - "order": 1106, + "order": 1107, "name": "deathbato", "count": 1, "languages": 1 }, { - "order": 1107, + "order": 1108, "name": "nazhiravila", "count": 1, "languages": 1 }, { - "order": 1108, + "order": 1109, "name": "jose-zga", "count": 1, "languages": 1 }, { - "order": 1109, + "order": 1110, "name": "nolemoon", "count": 1, "languages": 1 }, { - "order": 1110, + "order": 1111, "name": "iguerrerov", "count": 1, "languages": 1 }, { - "order": 1111, + "order": 1112, "name": "durwian", "count": 1, "languages": 1 }, { - "order": 1112, + "order": 1113, "name": "jaquelinetorres", "count": 1, "languages": 1 }, { - "order": 1113, + "order": 1114, "name": "vikinghost", "count": 1, "languages": 1 }, { - "order": 1114, + "order": 1115, "name": "pvigo10", "count": 1, "languages": 1 }, { - "order": 1115, + "order": 1116, "name": "derkopath", "count": 1, "languages": 1 }, { - "order": 1116, + "order": 1117, "name": "chrystiancalderon", "count": 1, "languages": 1 }, { - "order": 1117, + "order": 1118, "name": "chalaito88", "count": 1, "languages": 1 }, { - "order": 1118, + "order": 1119, "name": "serg_pq", "count": 1, "languages": 1 }, { - "order": 1119, + "order": 1120, "name": "dariel800xd", "count": 1, "languages": 1 }, { - "order": 1120, + "order": 1121, "name": "cristobalbelcor", "count": 1, "languages": 1 }, { - "order": 1121, + "order": 1122, "name": "mathiur", "count": 1, "languages": 1 }, { - "order": 1122, + "order": 1123, "name": "sxxnzdev", "count": 1, "languages": 1 }, { - "order": 1123, + "order": 1124, "name": "maynor06", "count": 1, "languages": 1 }, { - "order": 1124, + "order": 1125, "name": "xhaloidx", "count": 1, "languages": 1 }, { - "order": 1125, + "order": 1126, "name": "algeloro", "count": 1, "languages": 1 }, { - "order": 1126, + "order": 1127, "name": "lizandev", "count": 1, "languages": 1 }, { - "order": 1127, + "order": 1128, "name": "rumacar05", "count": 1, "languages": 1 }, { - "order": 1128, + "order": 1129, "name": "kgrc05", "count": 1, "languages": 1 }, { - "order": 1129, + "order": 1130, "name": "alexeigio", "count": 1, "languages": 1 }, { - "order": 1130, + "order": 1131, "name": "trollface77", "count": 1, "languages": 1 }, { - "order": 1131, + "order": 1132, "name": "brunom-93", "count": 1, "languages": 1 }, { - "order": 1132, + "order": 1133, "name": "jhonnfl", "count": 1, "languages": 1 }, { - "order": 1133, + "order": 1134, "name": "alejandroruiz23", "count": 1, "languages": 1 }, { - "order": 1134, + "order": 1135, "name": "jaimesoftdev", "count": 1, "languages": 1 }, { - "order": 1135, + "order": 1136, "name": "jarzatedev", "count": 1, "languages": 1 }, { - "order": 1136, + "order": 1137, "name": "edm1ya", "count": 1, "languages": 1 }, { - "order": 1137, + "order": 1138, "name": "gabrielcharibpolls", "count": 1, "languages": 1 }, { - "order": 1138, + "order": 1139, "name": "serg-pq", "count": 1, "languages": 1 }, { - "order": 1139, + "order": 1140, "name": "tartabullroberto", "count": 1, "languages": 1 }, { - "order": 1140, + "order": 1141, "name": "alexisbarradev", "count": 1, "languages": 1 }, { - "order": 1141, + "order": 1142, "name": "lara-vel-dev", "count": 1, "languages": 1 }, { - "order": 1142, + "order": 1143, "name": "kelvincb", "count": 1, "languages": 1 }, { - "order": 1143, + "order": 1144, "name": "armm77", "count": 1, "languages": 1 }, { - "order": 1144, + "order": 1145, "name": "paluzz", "count": 1, "languages": 1 }, { - "order": 1145, + "order": 1146, "name": "arathhh8", "count": 1, "languages": 1 }, { - "order": 1146, + "order": 1147, "name": "1cel4nc3", "count": 1, "languages": 1 }, { - "order": 1147, + "order": 1148, "name": "theposi", "count": 1, "languages": 1 }, { - "order": 1148, + "order": 1149, "name": "vinyoles", "count": 1, "languages": 1 }, { - "order": 1149, + "order": 1150, "name": "omarroman29", "count": 1, "languages": 1 }, { - "order": 1150, + "order": 1151, "name": "sergio-strazzacappa", "count": 1, "languages": 1 }, { - "order": 1151, + "order": 1152, "name": "tetotille", "count": 1, "languages": 1 }, { - "order": 1152, + "order": 1153, "name": "luisgarm", "count": 1, "languages": 1 }, { - "order": 1153, + "order": 1154, "name": "pipeyz21", "count": 1, "languages": 1 }, { - "order": 1154, + "order": 1155, "name": "santiagomac", "count": 1, "languages": 1 }, { - "order": 1155, + "order": 1156, "name": "vorosdev", "count": 1, "languages": 1 }, { - "order": 1156, + "order": 1157, "name": "mickysoft", "count": 1, "languages": 1 }, { - "order": 1157, + "order": 1158, "name": "melonconyogurt", "count": 1, "languages": 1 }, { - "order": 1158, + "order": 1159, "name": "bellodeveloper", "count": 1, "languages": 1 }, { - "order": 1159, + "order": 1160, "name": "nachitoe", "count": 1, "languages": 1 }, { - "order": 1160, + "order": 1161, "name": "batmarc91", "count": 1, "languages": 1 }, { - "order": 1161, + "order": 1162, "name": "ingjavierpinilla", "count": 1, "languages": 1 }, { - "order": 1162, + "order": 1163, "name": "angel-agis", "count": 1, "languages": 1 }, { - "order": 1163, + "order": 1164, "name": "mauricioobgo", "count": 1, "languages": 1 }, { - "order": 1164, + "order": 1165, "name": "h4cker54n", "count": 1, "languages": 1 }, { - "order": 1165, + "order": 1166, "name": "joancharles07", "count": 1, "languages": 1 }, { - "order": 1166, + "order": 1167, "name": "cuervo23alpha", "count": 1, "languages": 1 }, { - "order": 1167, + "order": 1168, "name": "lesterdavid31", "count": 1, "languages": 1 }, { - "order": 1168, + "order": 1169, "name": "micendev", "count": 1, "languages": 1 }, { - "order": 1169, + "order": 1170, "name": "alinares94", "count": 1, "languages": 1 }, { - "order": 1170, + "order": 1171, "name": "jferchotorres", "count": 1, "languages": 1 }, { - "order": 1171, + "order": 1172, "name": "713avo", "count": 1, "languages": 1 }, { - "order": 1172, + "order": 1173, "name": "lordzzz", "count": 1, "languages": 1 }, { - "order": 1173, + "order": 1174, "name": "derobpe", "count": 1, "languages": 1 }, { - "order": 1174, + "order": 1175, "name": "deivisaherreraj", "count": 1, "languages": 1 }, { - "order": 1175, + "order": 1176, "name": "alfaroo1", "count": 1, "languages": 1 }, { - "order": 1176, + "order": 1177, "name": "qwik-zghieb", "count": 1, "languages": 1 }, { - "order": 1177, + "order": 1178, "name": "gonzalinuz18", "count": 1, "languages": 1 }, { - "order": 1178, + "order": 1179, "name": "tilordqwerty", "count": 1, "languages": 1 }, { - "order": 1179, + "order": 1180, "name": "dgquintero", "count": 1, "languages": 1 }, { - "order": 1180, + "order": 1181, "name": "torvicv", "count": 1, "languages": 1 }, { - "order": 1181, + "order": 1182, "name": "kerunaru", "count": 1, "languages": 1 }, { - "order": 1182, + "order": 1183, "name": "eduardo282", "count": 1, "languages": 1 }, { - "order": 1183, + "order": 1184, "name": "carlosmares", "count": 1, "languages": 1 }, { - "order": 1184, + "order": 1185, "name": "mvidab", "count": 1, "languages": 1 }, { - "order": 1185, + "order": 1186, "name": "leonardo-henao", "count": 1, "languages": 1 }, { - "order": 1186, + "order": 1187, "name": "pwrxman", "count": 1, "languages": 1 }, { - "order": 1187, + "order": 1188, "name": "c-blskv", "count": 1, "languages": 1 }, { - "order": 1188, + "order": 1189, "name": "emaerniquez", "count": 1, "languages": 1 }, { - "order": 1189, + "order": 1190, "name": "carolhs92", "count": 1, "languages": 1 }, { - "order": 1190, + "order": 1191, "name": "juancamilofvx", "count": 1, "languages": 1 }, { - "order": 1191, + "order": 1192, "name": "astrarothdlcxvi", "count": 1, "languages": 1 }, { - "order": 1192, + "order": 1193, "name": "emersonxinay", "count": 1, "languages": 1 }, { - "order": 1193, + "order": 1194, "name": "davidbastosg", "count": 1, "languages": 1 }, { - "order": 1194, + "order": 1195, "name": "franespina", "count": 1, "languages": 1 }, { - "order": 1195, + "order": 1196, "name": "matinbohorquez", "count": 1, "languages": 1 }, { - "order": 1196, + "order": 1197, "name": "javosss", "count": 1, "languages": 1 }, { - "order": 1197, + "order": 1198, "name": "greenalpak", "count": 1, "languages": 1 }, { - "order": 1198, + "order": 1199, "name": "alecraft8", "count": 1, "languages": 1 }, { - "order": 1199, + "order": 1200, "name": "arperezinf", "count": 1, "languages": 1 }, { - "order": 1200, + "order": 1201, "name": "nightmare79", "count": 1, "languages": 1 }, { - "order": 1201, + "order": 1202, "name": "vikernes27666", "count": 1, "languages": 1 }, { - "order": 1202, + "order": 1203, "name": "cub-tor", "count": 1, "languages": 1 }, { - "order": 1203, + "order": 1204, "name": "carlosmperezm", "count": 1, "languages": 1 }, { - "order": 1204, + "order": 1205, "name": "santyjl44", "count": 1, "languages": 1 }, { - "order": 1205, + "order": 1206, "name": "luism95", "count": 1, "languages": 1 }, { - "order": 1206, + "order": 1207, "name": "giovannipeirone", "count": 1, "languages": 1 }, { - "order": 1207, + "order": 1208, "name": "lesclaz", "count": 1, "languages": 1 }, { - "order": 1208, + "order": 1209, "name": "dfc201692", "count": 1, "languages": 1 }, { - "order": 1209, + "order": 1210, "name": "angelramirez02", "count": 1, "languages": 1 }, { - "order": 1210, + "order": 1211, "name": "euu92", "count": 1, "languages": 1 }, { - "order": 1211, + "order": 1212, "name": "jesus2421", "count": 1, "languages": 1 }, { - "order": 1212, + "order": 1213, "name": "adridiazz", "count": 1, "languages": 1 }, { - "order": 1213, + "order": 1214, "name": "whiterbb", "count": 1, "languages": 1 }, { - "order": 1214, + "order": 1215, "name": "jjaljuria", "count": 1, "languages": 1 }, { - "order": 1215, + "order": 1216, "name": "ddaniel27", "count": 1, "languages": 1 From b1f9143cdfc568723dce1f00db6ac00dd801f0f2 Mon Sep 17 00:00:00 2001 From: llonardo798 Date: Wed, 25 Sep 2024 00:18:35 -0500 Subject: [PATCH 536/539] #01 - JavaScript --- .../javascript/llonardo798.js | 299 ++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/llonardo798.js diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/llonardo798.js b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/llonardo798.js new file mode 100644 index 0000000000..033405a2ce --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/javascript/llonardo798.js @@ -0,0 +1,299 @@ +/* + * EJERCICIO: + * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: + * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) + * - Utilizando las operaciones con operadores que tú quieras, crea ejemplos + * que representen todos los tipos de estructuras de control que existan + * en tu lenguaje: + * Condicionales, iterativas, excepciones... + * - Debes hacer print por consola del resultado de todos los ejemplos. + * + * DIFICULTAD EXTRA (opcional): + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + * + * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. + */ + +// Tipos de operadores en JavaScript + +// 1. Operadores Aritméticos +console.log("1. Operadores Aritméticos"); + +let suma = 5 + 5; // Operador de suma (+) +console.log("Suma: " + suma); // 10 + +let resta = suma - 5; // Operador de resta (-) +console.log("Resta:" + resta); // 5 + +let multiplicacion = suma * 5; // Operador de multiplicación (*) +console.log("Multiplicación: " + multiplicacion); // 50 + +let division = suma / 5 // Operador de división (/) +console.log("División: " + division); // 2 + +let modulo = suma % 3; // Operador de módulo (%) - Módulo (resto o sobrante de la división) 10 % 3 = 1 se puede considerar como 10/3 = 3 y sobra 1 +console.log("Modulo: " + modulo); // 1 + +let incremento = suma++; // Operador de incremento (++) +console.log("Incremento: " + incremento); // 6 + +let decremento = suma--; // Operador de decremento (--) +console.log("Decremento: " + decremento); // 5 + +let exponenciacion = 2 ** 3; // Operador de exponenciación (**) +console.log("Exponenciación" + exponenciacion); // 8 + +// Ejemplo de uso de operadores aritméticos +let numero1 = 5; +let numero2 = 3; +let resultado = (((numero1 + numero2) * (numero1 - numero2)) / numero2) % numero2 + numero1++ - --numero2 + numero1 ** numero2 +console.log("Uso de todos los operadores aritmeticos: " + resultado); // 41.333.... + + + +// 2. Operadores Bit a Bit +console.log("2. Operadores Bit a Bit"); + +let operadorA = 60; // 60 = 0011 1100 +let operadorB = 13; // 13 = 0000 1101 +let operadorC = -10; // -10 = 1111 1111 1111 1111 1111 1111 1111 0110 + +let operadorAnd = operadorA & operadorB; // Operador de AND bit a bit (&) +console.log("AND: " + operadorAnd); // 12 +// Explicación con binarios: +// 0011 1100 -> 60 +// 0000 1101 -> 13 +// ------------ & (AND) +// 0000 1100 -> 12 + +let operadorOr = operadorA | operadorB; // Operador de OR bit a bit (|) +console.log("OR: " + operadorOr); // 61 +// Explicación con binarios: +// 0011 1100 -> 60 +// 0000 1101 -> 13 +// ------------ | (OR) +// 0011 1101 -> 61 + +let operadorXor = operadorA ^ operadorB; // Operador de XOR bit a bit (^) +console.log("XOR: " + operadorXor); // 49 +// Explicación con binarios: +// 0011 1100 -> 60 +// 0000 1101 -> 13 +// ------------ ^ (XOR) +// 0011 0001 -> 49 + +let operadorNot = ~operadorA; // Operador de NOT bit a bit (~) +console.log("NOT: " + operadorNot); // -61 +// Explicación con binarios: +// 0011 1100 -> 60 +// ------------ ~ (NOT) +// 1100 0011 -> -61 + +let operadorDesplazamientoIzquierda = operadorA << 2; // Operador de desplazamiento a la izquierda (<<) +console.log("Desplazamiento a la izquierda: " + operadorDesplazamientoIzquierda); // 240 +// Explicación con binarios: +// 0011 1100 -> 60 +// --------- << (Desplazamiento a la izquierda de 2 bits) +// 1111 0000 -> 240 + +let operadorDesplazamientoDerecha = operadorA >> 2; // Operador de desplazamiento a la derecha (>>) +console.log("Desplazamiento a la derecha: " + operadorDesplazamientoDerecha); // 15 +// Explicación con binarios: +// 0011 1100 -> 60 +// --------- >> (Desplazamiento a la derecha de 2 bits) +// 0000 1111 -> 15 + +let operadorDesplazamientoDerechaSinSigno = operadorC >>> 2; // Operador de desplazamiento a la derecha sin signo (>>>) +console.log("Desplazamiento a la derecha sin signo: " + operadorDesplazamientoDerechaSinSigno); // 1073741821 +// Explicación con binarios: +// 1111 1111 1111 1111 1111 1111 1111 0110 -> -10 +// --------- >>> (Desplazamiento a la derecha sin signo de 2 bits) +// 0011 1111 1111 1111 1111 1111 1111 1101 -> 1073741821 + + + +// 3. Operadores de Asignación. +console.log("3. Operadores de Asignación"); + +let asignacion = 5; // Operador de asignación (=) +console.log("Asignación: " + asignacion); // 5 + +asignacion += 5; // Operador de suma y asignación (+=) +console.log("Suma y asignación: " + asignacion); // 10 + +asignacion -= 5; // Operador de resta y asignación (-=) +console.log("Resta y asignación: " + asignacion); // 5 + +asignacion *= 5; // Operador de multiplicación y asignación (*=) +console.log("Multiplicación y asignación: " + asignacion); // 25 + +asignacion /= 5; // Operador de división y asignación (/=) +console.log("División y asignación" + asignacion); // 5 + +asignacion %= 3; // Operador de módulo y asignación (%=) +console.log("Modulo y asignación: " + asignacion); // 2 + +asignacion **= 3; // Operador de exponenciación y asignación (**=) +console.log("Exponenciación y asignación: " + asignacion); // 8 + +asignacion <<= 5; // Operador de desplazamiento a la izquierda y asignación (<<=) +console.log("Desplazamiento a izquierda: " + asignacion); // 256 +// Explicación con binarios: +// 0000 0000 1000 -> 8 +// --------- <<= (Desplazamiento a la izquierda de 5 bits) +// 0001 0000 0000 -> 256 + +// let desplazamient = suma >> resta; + +asignacion >>= 2; // Operador de desplazamiento a la derecha y asignación (>>=) +console.log("Desplazamiento a derecha: " + asignacion); // 64 +// Explicación con binarios: +// 0001 0000 0000 -> 256 +// --------- >>= (Desplazamiento a la derecha de 2 bits) +// 0000 0100 0000 -> 64 + +// Operador de desplazamiento a la derecha sin signo y asignación (>>>=) desplaza los bits a la derecha +// sin importar si el numero es positivo o negativo para lo cual agrerga 0 a la izquierda +let a = -10; +a >>>= 2; // Operador de desplazamiento a la derecha sin signo y asignación (>>>=) +console.log("Despolazamient a derecha sin signo: " + a); // 1073741821 +// Explicación con binarios: +// 1111 1111 1111 1111 1111 1111 1111 0110 -> -10 +// --------- >>>= (Desplazamiento a la derecha sin signo de 2 bits) +// 0011 1111 1111 1111 1111 1111 1111 1101 -> 1073741821 + +let num1 = 60; +num1 &= 13; // Operador de AND bit a bit y asignación (&=) +console.log("Operador de AND bit a bit y asignación: " + num1); // 12 +// Explicación con binarios: +// 0011 1100 -> 60 +// 0000 1101 -> 13 +// ------------ & (AND) +// 0000 1100 -> 12 + +num1 = 60; +num1 |= 13; // Operador de OR bit a bit y asignación (|=) +console.log("Operador de OR bit a bit y asignación: " + num1); // 61 +// Explicación con binarios: +// 0011 1100 -> 60 +// 0000 1101 -> 13 +// ------------ | (OR) +// 0011 1101 -> 61 + +num1 = 60; +num1 ^= 13; // Operador de XOR bit a bit y asignación (^=) +console.log("Operador de XOR bit a bit y asignación" + num1); // 49 +// Explicación con binarios: +// 0011 1100 -> 60 +// 0000 1101 -> 13 +// ------------ ^ (XOR) +// 0011 0001 -> 49 + + + +// 4. Operadores de Comparación +console.log("4. Operadores de Comparación"); + +let comparacionIgual = 5 == 5; // Operador de igualdad (==) +console.log("Igualdad: " + comparacionIgual); // true + +let comparacionEstrictamenteIgual = 5 === 5; // Operador de igualdad estricta (===), no solo compara el valor sino también el tipo de dato +console.log("Igualdad estricta: " + comparacionEstrictamenteIgual); // true + +let comparacionDistinto = 5 != 5; // Operador de distinto (!=) +console.log("Distinto: " + comparacionDistinto); // false + +let comparacionEstrictamenteDistinto = 5 !== 5; // Operador de distinto estricto (!==), no solo compara el valor sino también el tipo de dato +console.log("Distinto estricto: " + comparacionEstrictamenteDistinto); // false + +let comparacionMayorQue = 5 > 3; // Operador de mayor que (>) +console.log("Mayor que: " + comparacionMayorQue); // true + +let comparacionMenorQue = 5 < 3; // Operador de menor que (<) +console.log("Menor que: " + comparacionMenorQue); // false + +let comparacionMayorIgualQue = 5 >= 5; // Operador de mayor o igual que (>=) +console.log("Mayor o igual que: " + comparacionMayorIgualQue); // true + +let comparacionMenorIgualQue = 5 <= 3; // Operador de menor o igual que (<=) +console.log("Menor o igual que: " + comparacionMenorIgualQue); // false + + + +// 5. Operadores Lógicos + +let logicoAnd = true && false; // Operador AND lógico (&&) - Devuelve true si ambos operandos son true +console.log("AND lógico: " + logicoAnd); // false + +let logicoOr = true || false; // Operador OR lógico (||) - Devuelve true si al menos uno de los operandos es true +console.log("OR lógico: " + logicoOr); // true + +let logicoNot = !true; // Operador NOT lógico (!) - Devuelve true si el operando es false y viceversa +console.log("NOT lógico: " + logicoNot); // false + +// Ejemplo de uso de operadores lógicos + +let edad = 16; +let estaAcompanado = false; + +let puedeVerPelicula = edad >= 18 || (edad >= 16 && estaAcompanado); +console.log(puedeVerPelicula); +// Cambiamos el valor de la variable estaAcompanado a valor contrario por diversión. +if (!puedeVerPelicula) { + console.log("Puedes ver la película"); +} else { + console.log("No puedes ver la película"); +} + + + +// 6. Operadores de Cadena +console.log("6. Operadores de Cadena"); + +let cadena1 = "Hola, la suma de: " + suma + " y " + resta + " es " + (suma + resta); // Concatenación (+) +console.log(cadena1); // Hola, la suma de: 5 y 5 es 10 + + +// 7. Operador Condicional (Ternario) +console.log("7. Operador Condicional (Ternario)"); + +let puedeVerPelicula2 = edad >= 18 ? "Puede ver la película" : "No puede ver la película"; // Operador condicional (Ternario) +console.log(puedeVerPelicula2); // No puede ver la película + +// 8. Otros Operadores +console.log("8. Otros Operadores"); + +// Se crea el objeto persona +let persona = { + nombre: "Leonardo", + edad: 26 +}; + +let operadorTypeof = typeof persona; // Operador typeof - Devuelve el tipo de dato de una variable +console.log("Tipo de dato de suma: " + operadorTypeof); // object + +let operadorDelete = delete persona.edad; // Operador delete - Elimina una propiedad de un objeto +console.log("Propiedad eliminada: " + operadorDelete); // true + +let operadorIn = "nombre" in persona; // Operador in - Devuelve true si una propiedad existe en un objeto +console.log("Propiedad en el objeto: " + operadorIn); // true + +let operadorInstanceOf = persona instanceof Object; // Operador instanceof - Devuelve true si un objeto es una instancia de otro +console.log("Es una instancia de Object: " + operadorInstanceOf); // true + +let operadorNew = new Date(); // Operador new - Crea una nueva instancia de un objeto +console.log("Nueva instancia de Date: " + operadorNew); // Fecha actual + + +// DIFICULTAD EXTRA - Crea un programa que imprima por consola todos los números comprendidos entre 10 y 55 (incluidos) +// pares, y que no son ni el 16 ni múltiplos de 3. + +console.log("DIFICULTAD EXTRA"); + +for (let i = 10; i < 56; i++) { + if (i % 2 === 0 && i !== 16 && i % 3 !== 0) { + console.log(i); + } +} \ No newline at end of file From 339a1b4a270d42ff9c4eb1fe42ba2a75c6e2283e Mon Sep 17 00:00:00 2001 From: llonardo798 Date: Wed, 25 Sep 2024 01:01:49 -0500 Subject: [PATCH 537/539] #01 - TypeScript --- .../typescript/llonardo798.ts | 348 ++++++++++++++++++ 1 file changed, 348 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/llonardo798.ts diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/llonardo798.ts b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/llonardo798.ts new file mode 100644 index 0000000000..139c8c7627 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/typescript/llonardo798.ts @@ -0,0 +1,348 @@ +/* + * EJERCICIO: + * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: + * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) + * - Utilizando las operaciones con operadores que tú quieras, crea ejemplos + * que representen todos los tipos de estructuras de control que existan + * en tu lenguaje: + * Condicionales, iterativas, excepciones... + * - Debes hacer print por consola del resultado de todos los ejemplos. + * + * DIFICULTAD EXTRA (opcional): + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + * + * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. + */ + +// Tipos de operadores en TypeaScript + +// 1. Operadores Aritméticos +function operadoresAritmeticos() { + console.log("1. Operadores Aritméticos"); + + let suma = 5 + 5; // Operador de suma (+) + console.log("Suma: " + suma); // 10 + + let resta = suma - 5; // Operador de resta (-) + console.log("Resta:" + resta); // 5 + + let multiplicacion = suma * 5; // Operador de multiplicación (*) + console.log("Multiplicación: " + multiplicacion); // 50 + + let division = suma / 5 // Operador de división (/) + console.log("División: " + division); // 2 + + let modulo = suma % 3; // Operador de módulo (%) - Módulo (resto o sobrante de la división) 10 % 3 = 1 se puede considerar como 10/3 = 3 y sobra 1 + console.log("Modulo: " + modulo); // 1 + + suma++; // Operador de incremento (++) + console.log("Incremento: " + suma); // 6 + + suma--; // Operador de decremento (--) + console.log("Decremento: " + suma); // 5 + + let exponenciacion = 2 ** 3; // Operador de exponenciación (**) + console.log("Exponenciación" + exponenciacion); // 8 + + // Ejemplo de uso de operadores aritméticos + let numero1 = 5; + let numero2 = 3; + let resultado = (((numero1 + numero2) * (numero1 - numero2)) / numero2) % numero2 + numero1++ - --numero2 + numero1 ** numero2 + console.log("Uso de todos los operadores aritmeticos: " + resultado); // 41.333.... +} + +operadoresAritmeticos(); + + + +// 2. Operadores Bit a Bit +function operadoresBitBit() { + console.log("2. Operadores Bit a Bit"); + + let operadorA = 60; // 60 = 0011 1100 + let operadorB = 13; // 13 = 0000 1101 + let operadorC = -10; // -10 = 1111 1111 1111 1111 1111 1111 1111 0110 + + let operadorAnd = operadorA & operadorB; // Operador de AND bit a bit (&) + console.log("AND: " + operadorAnd); // 12 + // Explicación con binarios: + // 0011 1100 -> 60 + // 0000 1101 -> 13 + // ------------ & (AND) + // 0000 1100 -> 12 + + let operadorOr = operadorA | operadorB; // Operador de OR bit a bit (|) + console.log("OR: " + operadorOr); // 61 + // Explicación con binarios: + // 0011 1100 -> 60 + // 0000 1101 -> 13 + // ------------ | (OR) + // 0011 1101 -> 61 + + let operadorXor = operadorA ^ operadorB; // Operador de XOR bit a bit (^) + console.log("XOR: " + operadorXor); // 49 + // Explicación con binarios: + // 0011 1100 -> 60 + // 0000 1101 -> 13 + // ------------ ^ (XOR) + // 0011 0001 -> 49 + + let operadorNot = ~operadorA; // Operador de NOT bit a bit (~) + console.log("NOT: " + operadorNot); // -61 + // Explicación con binarios: + // 0011 1100 -> 60 + // ------------ ~ (NOT) + // 1100 0011 -> -61 + + let operadorDesplazamientoIzquierda = operadorA << 2; // Operador de desplazamiento a la izquierda (<<) + console.log("Desplazamiento a la izquierda: " + operadorDesplazamientoIzquierda); // 240 + // Explicación con binarios: + // 0011 1100 -> 60 + // --------- << (Desplazamiento a la izquierda de 2 bits) + // 1111 0000 -> 240 + + let operadorDesplazamientoDerecha = operadorA >> 2; // Operador de desplazamiento a la derecha (>>) + console.log("Desplazamiento a la derecha: " + operadorDesplazamientoDerecha); // 15 + // Explicación con binarios: + // 0011 1100 -> 60 + // --------- >> (Desplazamiento a la derecha de 2 bits) + // 0000 1111 -> 15 + + let operadorDesplazamientoDerechaSinSigno = operadorC >>> 2; // Operador de desplazamiento a la derecha sin signo (>>>) + console.log("Desplazamiento a la derecha sin signo: " + operadorDesplazamientoDerechaSinSigno); // 1073741821 + // Explicación con binarios: + // 1111 1111 1111 1111 1111 1111 1111 0110 -> -10 + // --------- >>> (Desplazamiento a la derecha sin signo de 2 bits) + // 0011 1111 1111 1111 1111 1111 1111 1101 -> 1073741821 +} + +operadoresBitBit(); + + + +// 3. Operadores de Asignación. +function operadoresAsignacion() { + console.log("3. Operadores de Asignación"); + + let asignacion = 5; // Operador de asignación (=) + console.log("Asignación: " + asignacion); // 5 + + asignacion += 5; // Operador de suma y asignación (+=) + console.log("Suma y asignación: " + asignacion); // 10 + + asignacion -= 5; // Operador de resta y asignación (-=) + console.log("Resta y asignación: " + asignacion); // 5 + + asignacion *= 5; // Operador de multiplicación y asignación (*=) + console.log("Multiplicación y asignación: " + asignacion); // 25 + + asignacion /= 5; // Operador de división y asignación (/=) + console.log("División y asignación" + asignacion); // 5 + + asignacion %= 3; // Operador de módulo y asignación (%=) + console.log("Modulo y asignación: " + asignacion); // 2 + + asignacion **= 3; // Operador de exponenciación y asignación (**=) + console.log("Exponenciación y asignación: " + asignacion); // 8 + + asignacion <<= 5; // Operador de desplazamiento a la izquierda y asignación (<<=) + console.log("Desplazamiento a izquierda: " + asignacion); // 256 + // Explicación con binarios: + // 0000 0000 1000 -> 8 + // --------- <<= (Desplazamiento a la izquierda de 5 bits) + // 0001 0000 0000 -> 256 + + // let desplazamient = suma >> resta; + + asignacion >>= 2; // Operador de desplazamiento a la derecha y asignación (>>=) + console.log("Desplazamiento a derecha: " + asignacion); // 64 + // Explicación con binarios: + // 0001 0000 0000 -> 256 + // --------- >>= (Desplazamiento a la derecha de 2 bits) + // 0000 0100 0000 -> 64 + + // Operador de desplazamiento a la derecha sin signo y asignación (>>>=) desplaza los bits a la derecha + // sin importar si el numero es positivo o negativo para lo cual agrerga 0 a la izquierda + let a = -10; + a >>>= 2; // Operador de desplazamiento a la derecha sin signo y asignación (>>>=) + console.log("Despolazamient a derecha sin signo: " + a); // 1073741821 + // Explicación con binarios: + // 1111 1111 1111 1111 1111 1111 1111 0110 -> -10 + // --------- >>>= (Desplazamiento a la derecha sin signo de 2 bits) + // 0011 1111 1111 1111 1111 1111 1111 1101 -> 1073741821 + + let num1 = 60; + num1 &= 13; // Operador de AND bit a bit y asignación (&=) + console.log("Operador de AND bit a bit y asignación: " + num1); // 12 + // Explicación con binarios: + // 0011 1100 -> 60 + // 0000 1101 -> 13 + // ------------ & (AND) + // 0000 1100 -> 12 + + num1 = 60; + num1 |= 13; // Operador de OR bit a bit y asignación (|=) + console.log("Operador de OR bit a bit y asignación: " + num1); // 61 + // Explicación con binarios: + // 0011 1100 -> 60 + // 0000 1101 -> 13 + // ------------ | (OR) + // 0011 1101 -> 61 + + num1 = 60; + num1 ^= 13; // Operador de XOR bit a bit y asignación (^=) + console.log("Operador de XOR bit a bit y asignación" + num1); // 49 + // Explicación con binarios: + // 0011 1100 -> 60 + // 0000 1101 -> 13 + // ------------ ^ (XOR) + // // 0011 0001 -> 49 +} + +operadoresAsignacion(); + + + +// 4. Operadores de Comparación +function operadoresComparacion() { + console.log("4. Operadores de Comparación"); + + let comparacionIgual = 5 == 5; // Operador de igualdad (==) + console.log("Igualdad: " + comparacionIgual); // true + + let comparacionEstrictamenteIgual = 5 === 5; // Operador de igualdad estricta (===), no solo compara el valor sino también el tipo de dato + console.log("Igualdad estricta: " + comparacionEstrictamenteIgual); // true + + let comparacionDistinto = 5 != 5; // Operador de distinto (!=) + console.log("Distinto: " + comparacionDistinto); // false + + let comparacionEstrictamenteDistinto = 5 !== 5; // Operador de distinto estricto (!==), no solo compara el valor sino también el tipo de dato + console.log("Distinto estricto: " + comparacionEstrictamenteDistinto); // false + + let comparacionMayorQue = 5 > 3; // Operador de mayor que (>) + console.log("Mayor que: " + comparacionMayorQue); // true + + let comparacionMenorQue = 5 < 3; // Operador de menor que (<) + console.log("Menor que: " + comparacionMenorQue); // false + + let comparacionMayorIgualQue = 5 >= 5; // Operador de mayor o igual que (>=) + console.log("Mayor o igual que: " + comparacionMayorIgualQue); // true + + let comparacionMenorIgualQue = 5 <= 3; // Operador de menor o igual que (<=) + console.log("Menor o igual que: " + comparacionMenorIgualQue); // false +} + +operadoresComparacion(); + + + +// 5. Operadores Lógicos +function operadoresLogicos() { + console.log("5. Operadores Lógicos"); + + let logicoAnd = true && false; // Operador AND lógico (&&) - Devuelve true si ambos operandos son true + console.log("AND lógico: " + logicoAnd); // false + + let logicoOr = true || false; // Operador OR lógico (||) - Devuelve true si al menos uno de los operandos es true + console.log("OR lógico: " + logicoOr); // true + + let logicoNot = !true; // Operador NOT lógico (!) - Devuelve true si el operando es false y viceversa + console.log("NOT lógico: " + logicoNot); // false + + // Ejemplo de uso de operadores lógicos + + let edad = 16; + let estaAcompanado = false; + + let puedeVerPelicula = edad >= 18 || (edad >= 16 && estaAcompanado); + console.log(puedeVerPelicula); + // Cambiamos el valor de la variable estaAcompanado a valor contrario por diversión. + if (!puedeVerPelicula) { + console.log("Puedes ver la película"); + } else { + console.log("No puedes ver la película"); + } +} + +operadoresLogicos(); + + + +// 6. Operadores de Cadena +function operadoresCadena() { + console.log("6. Operadores de Cadena"); + + const num1 = 5; + const num2 = 27; + let cadena1 = "Hola, la suma de: " + num1 + " y " + num2 + " es " + (num1 + num2); // Concatenación (+) + console.log(cadena1); // Hola, la suma de: 5 y 5 es 10 +} + +operadoresCadena(); + + + +// 7. Operador Condicional (Ternario) +function operadorCondicional() { + console.log("7. Operador Condicional (Ternario)"); + + let edad = 16; + + let puedeVerPelicula2 = edad >= 18 ? "Puede ver la película" : "No puede ver la película"; // Operador condicional (Ternario) + console.log(puedeVerPelicula2); // No puede ver la película +} + +operadorCondicional(); + + + +// 8. Otros Operadores + +interface Persona { + nombre: string; + edad?: number; // El signo de interrogación indica que el atributo es opcional +} + +function otrosOperadores() { + console.log("8. Otros Operadores"); + + // Se crea el objeto persona + let userLeonardo: Persona = { + nombre: "Leonardo Aedo", + edad: 25 + } + + let operadorTypeof = typeof userLeonardo; // Operador typeof - Devuelve el tipo de dato de una variable + console.log("Tipo de dato de suma: " + operadorTypeof); // object + + let operadorDelete = delete userLeonardo.edad; // Operador delete - Elimina una propiedad de un objeto + console.log("Propiedad eliminada: " + operadorDelete); // true + + let operadorIn = "nombre" in userLeonardo; // Operador in - Devuelve true si una propiedad existe en un objeto + console.log("Propiedad en el objeto: " + operadorIn); // true + + let operadorInstanceOf = userLeonardo instanceof Object; // Operador instanceof - Devuelve true si un objeto es una instancia de otro + console.log("Es una instancia de Object: " + operadorInstanceOf); // true + + let operadorNew = new Date(); // Operador new - Crea una nueva instancia de un objeto + console.log("Nueva instancia de Date: " + operadorNew); // Fecha actual +} + +otrosOperadores(); + +// DIFICULTAD EXTRA - Crea un programa que imprima por consola todos los números comprendidos entre 10 y 55 (incluidos) +// pares, y que no son ni el 16 ni múltiplos de 3. + +function dificultadExtra() { + console.log("DIFICULTAD EXTRA"); + + for (let i = 10; i < 56; i++) { + if (i % 2 === 0 && i !== 16 && i % 3 !== 0) { + console.log(i); + } + } +} + +dificultadExtra(); From e1ad6d8d27de381711c1a27774dece189b9136c5 Mon Sep 17 00:00:00 2001 From: llonardo798 Date: Wed, 25 Sep 2024 03:02:31 -0500 Subject: [PATCH 538/539] #01 - SQL --- .../sql/llonardo798.sql | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/sql/llonardo798.sql diff --git a/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/sql/llonardo798.sql b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/sql/llonardo798.sql new file mode 100644 index 0000000000..a66b7dfdc3 --- /dev/null +++ b/Roadmap/01 - OPERADORES Y ESTRUCTURAS DE CONTROL/sql/llonardo798.sql @@ -0,0 +1,122 @@ +/* + * Este ejercicio se resuelve en base a SQL Server + * EJERCICIO: + * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: + * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) + * - Utilizando las operaciones con operadores que tú quieras, crea ejemplos + * que representen todos los tipos de estructuras de control que existan + * en tu lenguaje: + * Condicionales, iterativas, excepciones... + * - Debes hacer print por consola del resultado de todos los ejemplos. + * + * DIFICULTAD EXTRA (opcional): + * Crea un programa que imprima por consola todos los números comprendidos + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. + * + * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. + */ + +-- Tipos de operadores en SQL + +-- 1. Operadores Aritméticos + +DECLARE @numero1 INT = 10; +DECLARE @numero2 INT = 5; +DECLARE @numero3 INT = 3; + +DECLARE @suma INT = @numero1 + @numero2; -- Suma +DECLARE @resta INT = @numero1 - @numero2; -- Resta +DECLARE @multiplicacion INT = @numero1 * @numero2; -- Multiplicación +DECLARE @division INT = @numero1 / @numero2; -- División entera +DECLARE @producto INT = @numero1 % @numero3; -- Resto de la división + +PRINT CONCAT('Suma: ', @suma); -- Imprime 15 +PRINT CONCAT('Resta: ', @resta); -- Imprime 5 +PRINT CONCAT('Multiplicación: ', @multiplicacion); -- Imprime 50 +PRINT CONCAT('División: ', @division); -- Imprime 2 +PRINT CONCAT('Producto: ', @producto); -- Imprime 1 + + + +-- 2. Operadores de Comparación + +DECLARE @igualQue VARCHAR(5) = CASE WHEN @numero1 = @numero2 THEN 'TRUE' ELSE 'FALSE' END; -- Igual +DECLARE @mayorQue VARCHAR(5) = CASE WHEN @numero1 > @numero2 THEN 'TRUE' ELSE 'FALSE' END; -- Mayor que +DECLARE @menorQue VARCHAR(5) = CASE WHEN @numero1 < @numero2 THEN 'TRUE' ELSE 'FALSE' END; -- Menor que +DECLARE @mayorIgual VARCHAR(5) = CASE WHEN @numero1 >= @numero2 THEN 'TRUE' ELSE 'FALSE' END; -- Mayor o igual que +DECLARE @menorIgual VARCHAR(5) = CASE WHEN @numero1 <= @numero2 THEN 'TRUE' ELSE 'FALSE' END; -- Menor o igual que +DECLARE @distinto VARCHAR(5) = CASE WHEN @numero1 <> @numero2 THEN 'TRUE' ELSE 'FALSE' END; -- Distinto + +PRINT CONCAT('Igual que: ', @igualQue); -- Imprime 0 +PRINT CONCAT('Mayor que: ', @mayorQue); -- Imprime 1 +PRINT CONCAT('Menor que: ', @menorQue); -- Imprime 0 +PRINT CONCAT('Mayor o igual que: ', @mayorIgual); -- Imprime 1 +PRINT CONCAT('Menor o igual que: ', @menorIgual); -- Imprime 0 +PRINT CONCAT('Distinto: ', @distinto); -- Imprime 1 + + + +-- 3. Operadores Lógicos + +DECLARE @edad INT = 16; +DECLARE @estaAcompanado BIT = 0; + +DECLARE @puedeVerPelicula BIT = CASE WHEN @edad >= 18 OR (@edad >= 16 AND @estaAcompanado = 1) THEN 1 ELSE 0 END; +PRINT CONCAT('Puede ver la película: ', @puedeVerPelicula); -- Imprime 1 +PRINT CONCAT('Puede ver la película: ', CASE WHEN NOT @puedeVerPelicula = 1 THEN 'TRUE' ELSE 'FALSE' END); -- Imprime FALSE + + + +-- 4. Operadores de Conjuntos + +-- Crear tabla CLIENTES +CREATE TABLE CLIENTES (ID INT PRIMARY KEY,Nombre VARCHAR(50),Ciudad VARCHAR(50)); +-- Insertar datos en CLIENTES +INSERT INTO CLIENTES (ID, Nombre, Ciudad) VALUES (1, 'Ana', 'Madrid'), (2, 'Juan', 'Barcelona'), (3, 'María', 'Valencia'), (4, 'Pedro', 'Madrid'), (5, 'Laura', 'Sevilla'); + +-- Crear tabla EMPLEADOS +CREATE TABLE EMPLEADOS (ID INT PRIMARY KEY, Nombre VARCHAR(50), Departamento VARCHAR(50), Activo BIT); +-- Insertar datos en EMPLEADOS +INSERT INTO EMPLEADOS (ID, Nombre, Departamento, Activo) VALUES(101, 'Juan', 'Ventas', 1),(102, 'María', 'Recursos Humanos', 0),(103, 'Carlos', 'IT', 1),(104, 'Ana', 'Marketing', NULL),(105, 'Pedro', 'Finanzas', 0); + +SELECT Nombre FROM CLIENTES UNION SELECT Nombre FROM EMPLEADOS; -- UNION: Obtener todos los nombres de CLIENTES y EMPLEADOS (sin duplicados) +SELECT Nombre FROM CLIENTES UNION ALL SELECT Nombre FROM EMPLEADOS; -- UNION ALL: Obtener todos los nombres de CLIENTES y EMPLEADOS (con duplicados) +SELECT Nombre FROM CLIENTES INTERSECT SELECT Nombre FROM EMPLEADOS; -- INTERSECT: Obtener los nombres de los CLIENTES que también son EMPLEADOS +SELECT Nombre FROM CLIENTES EXCEPT SELECT Nombre FROM EMPLEADOS; -- EXCEPT: Obtener los nombres de los CLIENTES que no son EMPLEADOS + + + +-- 5. Operadores de Cadenas + +SELECT Nombre + ' del departamento de ' + Departamento AS INFORMACIÓNCLIENTE FROM EMPLEADOS; -- Concatenar cadenas +SELECT * FROM EMPLEADOS WHERE Nombre LIKE 'A%'; -- LIKE: Buscar nombres que empiecen por 'A' +SELECT * FROM CLIENTES WHERE Nombre LIKE '____a'; -- LIKE: Buscar nombres que tengan 5 letras y terminen en 'a' +SELECT LEN(Nombre) AS LongitudNombre FROM EMPLEADOS; -- LEN: Obtener la longitud de los nombres +SELECT SUBSTRING(Departamento, 1, 5) AS Primeros10Caracteres FROM EMPLEADOS; -- SUBSTRING: Obtener los primeros 5 caracteres del Departamento +SELECT REPLACE(Nombre, 'a', 'o') AS NuevoNombreRaro FROM CLIENTES; -- REPLACE: Reemplazar 'a' por 'o' en los nombres +SELECT UPPER(Nombre) AS NombreMayusculas, LOWER(Departamento) AS DepartamentoMinusculas FROM EMPLEADOS; -- UPPER Convertir a mayúsculas y LOWER Convertir a minúsculas + +-- 6. Otros Operadores de verificación + +SELECT * FROM CLIENTES WHERE ID BETWEEN 2 AND 4; -- Obtener los clientes cuyo ID está entre 2 y 4 +SELECT * FROM CLIENTES WHERE CIUDAD IN ('Madrid', 'Barcelona'); -- Obtener los clientes que son de Madrid o Barcelona +SELECT * FROM EMPLEADOS WHERE Activo IS NULL; -- Obtener los empleados que no están activos +SELECT * FROM EMPLEADOS WHERE Nombre IS NOT NULL; -- Obtener los empleados cuyo nombre está registrado +SELECT Nombre FROM CLIENTES c WHERE EXISTS (SELECT * FROM EMPLEADOS e WHERE e.Nombre = c.Nombre AND e.Activo = 1); -- Obtener los clientes que se llaman igual que los empleados activos + + +-- DIFICULTAD EXTRA - Crea un programa que imprima por consola todos los números comprendidos entre 10 y 55 (incluidos) +-- pares, y que no son ni el 16 ni múltiplos de 3. + +DECLARE @numero INT = 10; +DECLARE @limite INT = 55; + +WHILE @numero <= @limite +BEGIN + IF @numero % 2 = 0 AND @numero <> 16 AND @numero % 3 <> 0 + BEGIN + PRINT @numero; + END + SET @numero = @numero + 1; +END \ No newline at end of file From 82b3c7e67ca36f57eea394bd6567c73382f5d0fc Mon Sep 17 00:00:00 2001 From: llonardo798 Date: Wed, 25 Sep 2024 03:05:00 -0500 Subject: [PATCH 539/539] #00 - SQL - Se modifica nombre del archivo que tiene nombre de usuario incorrecto. --- .../sql/{leonardo798.sql => llonardo798.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/sql/{leonardo798.sql => llonardo798.sql} (100%) diff --git a/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/sql/leonardo798.sql b/Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/sql/llonardo798.sql similarity index 100% rename from Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/sql/leonardo798.sql rename to Roadmap/00 - SINTAXIS, VARIABLES, TIPOS DE DATOS Y HOLA MUNDO/sql/llonardo798.sql