From c0b61017cf7ef3fbf201838053b6fad3618bfc7a Mon Sep 17 00:00:00 2001 From: pyRamsd Date: Sun, 23 Apr 2023 20:03:18 -0500 Subject: [PATCH 01/96] Reto #16 - python --- Retos/Reto #16 - LA ESCALERA [Media]/python/pyramsd.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Retos/Reto #16 - LA ESCALERA [Media]/python/pyramsd.py b/Retos/Reto #16 - LA ESCALERA [Media]/python/pyramsd.py index 9db4b4b912..736931a5cb 100644 --- a/Retos/Reto #16 - LA ESCALERA [Media]/python/pyramsd.py +++ b/Retos/Reto #16 - LA ESCALERA [Media]/python/pyramsd.py @@ -24,7 +24,6 @@ def escalera(num): else: print("__") - -num = eval(input("Enter number of stairs: ")) +num = int(input("Numero de escalones: ")) escalera(num) From 622ae37e0f9e84df5727cbd3f01fce21b2570881 Mon Sep 17 00:00:00 2001 From: Carlos A Date: Wed, 26 Apr 2023 09:34:17 -0500 Subject: [PATCH 02/96] Reto #17 - Ruby --- .../ruby/test0n3.rb" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/ruby/test0n3.rb" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/ruby/test0n3.rb" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/ruby/test0n3.rb" new file mode 100644 index 0000000000..3c66448574 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/ruby/test0n3.rb" @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'uri' +require 'net/http' +require 'json' +require 'time' + +# class GetAPI +class GetAPI + MOUREDEV_GITHUB = 'https://api.github.com/repos/mouredev/retos-programacion-2023/commits' + + def pick_commits + uri = URI(MOUREDEV_GITHUB) + res = Net::HTTP.get_response(uri) + print_api_resp(JSON.parse(res.body).first(10)) if res.is_a?(Net::HTTPSuccess) + end + + def print_api_resp(commits) + commits.map.with_index do |commit, index| + hash = commit['sha'][0, 6] + author = commit['author'].nil? ? commit['commit']['author']['name'] : commit['author']['login'] + message = commit['commit']['message'] || '' + date = Time.parse(commit['commit']['author']['date']).localtime.strftime('%d/%m/%Y %H:%M:%S %p') + "Commit #{index + 1} | #{hash} | #{author} | #{message} | #{date}" + end + end +end + +puts GetAPI.new.pick_commits From 3faf9809f282689fdb45a6ca3d524b09f3bb24df Mon Sep 17 00:00:00 2001 From: Juan Pablo Patino Lopez Date: Wed, 26 Apr 2023 16:35:01 +0200 Subject: [PATCH 03/96] Reto #17 - Python Git --- .../python/juanppdev" | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/juanppdev" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/juanppdev" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/juanppdev" new file mode 100644 index 0000000000..7c5f33cd33 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/juanppdev" @@ -0,0 +1,5 @@ +import git + +repoCloned = git.Repo("retos-programacion-2023") + +print(repoCloned.git.log()) From 2556da62689151b5843b73e9cb3c3748e3550588 Mon Sep 17 00:00:00 2001 From: Ignacio Fuentes Date: Wed, 26 Apr 2023 12:53:42 -0300 Subject: [PATCH 04/96] Reto #0 - Python --- .../python/ignafuentes.py" | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/ignafuentes.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/ignafuentes.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/ignafuentes.py" new file mode 100644 index 0000000000..be718fc859 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/ignafuentes.py" @@ -0,0 +1,20 @@ +## Enunciado + +# /* +# * Escribe un programa que muestre por consola (con un print) los +# * números de 1 a 100 (ambos incluidos y con un salto de línea entre +# * cada impresión), sustituyendo los siguientes: +# * - Múltiplos de 3 por la palabra "fizz". +# * - Múltiplos de 5 por la palabra "buzz". +# * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". +# */ + +for number in range(1, 101): + if number % 3 == 0 and number % 5 == 0: + print('fizzbuzz') + elif number % 3 == 0: + print('fizz') + elif number % 5 == 0: + print('buzz') + else: + print(number) \ No newline at end of file From 9b83bc14588af835a81cba82e1407fccd3b9c812 Mon Sep 17 00:00:00 2001 From: Juan Pablo Patino Lopez Date: Wed, 26 Apr 2023 19:26:56 +0200 Subject: [PATCH 05/96] Reto #17 - Python Git --- .../Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/juanppdev.py" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/juanppdev" => "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/juanppdev.py" (100%) diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/juanppdev" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/juanppdev.py" similarity index 100% rename from "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/juanppdev" rename to "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/juanppdev.py" From ea33fba2d7341a5ebeb48a97a48801d93b478be5 Mon Sep 17 00:00:00 2001 From: Carlos A Date: Wed, 26 Apr 2023 12:48:35 -0500 Subject: [PATCH 06/96] Reto #17 - JavaScript --- .../javascript/test0n3.js" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/test0n3.js" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/test0n3.js" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/test0n3.js" new file mode 100644 index 0000000000..ad0762b39e --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/test0n3.js" @@ -0,0 +1,44 @@ +const https = require("https"); + +const mouredev_commits = { + hostname: "api.github.com", + path: "/repos/mouredev/retos-programacion-2023/commits", + method: "GET", + headers: { + "User-Agent": + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36", + "Content-Type": "application/json", + Accept: "application/json", + }, +}; + +const getAPI = (uri) => { + https + .get(uri, (res) => { + let data = []; + res.on("data", (chunk) => { + data.push(chunk); + }); + res.on("end", () => { + let commits = JSON.parse(Buffer.concat(data).toString()); + let processed_commits = commits.slice(0, 10).map((commit, index) => { + let hash = commit.sha.slice(0, 6); + let author = + commit.author == null + ? commit.commit.author.name + : commit.author.login; + let message = commit.commit.message.replace(/\n\n/g, " - "); + let date = new Date(commit.commit.author.date).toLocaleString( + "es-PE" + ); + return `${index + 1} | ${hash} | ${author} | ${message} | ${date}`; + }); + console.log(processed_commits.join("\n")); + }); + }) + .on("error", (err) => { + console.log("Error:", err.message); + }); +}; + +getAPI(mouredev_commits); From e4809d0d065af8d7832e01089254cf081921947f Mon Sep 17 00:00:00 2001 From: Carlos A Date: Wed, 26 Apr 2023 12:54:22 -0500 Subject: [PATCH 07/96] =?UTF-8?q?correcci=C3=B3n=20output:=20mensajes=20y?= =?UTF-8?q?=20tiempo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reto #17 - GIT Y GITHUB [Dif\303\255cil]/ruby/test0n3.rb" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/ruby/test0n3.rb" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/ruby/test0n3.rb" index 3c66448574..a06b8b035b 100644 --- "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/ruby/test0n3.rb" +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/ruby/test0n3.rb" @@ -19,8 +19,8 @@ def print_api_resp(commits) commits.map.with_index do |commit, index| hash = commit['sha'][0, 6] author = commit['author'].nil? ? commit['commit']['author']['name'] : commit['author']['login'] - message = commit['commit']['message'] || '' - date = Time.parse(commit['commit']['author']['date']).localtime.strftime('%d/%m/%Y %H:%M:%S %p') + message = commit['commit']['message'].gsub(/\n\n/, ' - ') + date = Time.parse(commit['commit']['author']['date']).localtime.strftime('%d/%m/%Y %H:%M:%S') "Commit #{index + 1} | #{hash} | #{author} | #{message} | #{date}" end end From 3d7a3d40e943c1ebbf525bf4ec10685abd245f40 Mon Sep 17 00:00:00 2001 From: Carlos A Date: Wed, 26 Apr 2023 12:56:57 -0500 Subject: [PATCH 08/96] =?UTF-8?q?correci=C3=B3n=20output:=20a=C3=B1adir=20?= =?UTF-8?q?`Commit`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/test0n3.js" | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/test0n3.js" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/test0n3.js" index ad0762b39e..7aa9a86c32 100644 --- "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/test0n3.js" +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/test0n3.js" @@ -31,7 +31,9 @@ const getAPI = (uri) => { let date = new Date(commit.commit.author.date).toLocaleString( "es-PE" ); - return `${index + 1} | ${hash} | ${author} | ${message} | ${date}`; + return `Commit ${ + index + 1 + } | ${hash} | ${author} | ${message} | ${date}`; }); console.log(processed_commits.join("\n")); }); From 313ebd556bb12ba01d5a886001cff094bcb3d262 Mon Sep 17 00:00:00 2001 From: abanoj Date: Wed, 26 Apr 2023 21:24:20 +0200 Subject: [PATCH 09/96] Reto #2 - Javascript --- .../javascript/abanoj.js | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/abanoj.js diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/abanoj.js b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/abanoj.js new file mode 100644 index 0000000000..bda09bb4a3 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/javascript/abanoj.js @@ -0,0 +1,51 @@ +/* + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ + +const reto2 = partido => { + let p1 = 0, p2= 0; + const POINTS = ['Love', 15, 30, 40]; + + if (partido.some( e => e !== 'P1' & e !== 'P2')) + throw TypeError("This method only accepts 'P1' and 'P2' as inputs."); + + for(e of partido){ + if(e === 'P1'){ + p1++; + } else if (e === 'P2') { + p2++; + } + if(p1 >= 3 & p1 === p2) console.log('Deuce'); + if(p1 >= 4 & p1 === p2 + 1){console.log('Ventaja P1'); continue} + if(p1 >= 4 & p1 >= p2 + 2){console.log('Ha ganado el P1'); return} + if(p2 >= 4 & p2 === p1 + 1){console.log('Ventaja P2'); continue}; + if(p2 >= 4 & p2 >= p1 + 2){console.log('Ha ganado el P2'); return} + + if (p1 < 3 || ((p1 === 3 || p2 === 3) & p1 !== p2)){ + console.log(`${POINTS[p1]} - ${POINTS[p2]}`) + } + } +} + +// reto2(['P1', 'P1', 'P2', 'P2', 'P1', 'P2', 'P1', 'P1']); +// console.log('================') +// reto2(['P2', 'P2', 'P1', 'P1', 'P2', 'P1', 'P2', 'P2']); +// console.log('================') +// reto2(['P2','P2','P2','P1','P2','P1']); +// console.log('================') +// reto2(['P1','P1','P1','P2','P1','P2']); \ No newline at end of file From f3b9b778d8c670545df31cb6ef175fdb860fed4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carolina=20=C3=81lvarez?= Date: Wed, 26 Apr 2023 14:51:41 -0500 Subject: [PATCH 10/96] Create caroAM22.py --- "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/caroAM22.py" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/caroAM22.py" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/caroAM22.py" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/caroAM22.py" new file mode 100644 index 0000000000..44159b3954 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/caroAM22.py" @@ -0,0 +1 @@ +print("Hello world") From eed2de6967ad12e976b8565e32f5199355260c99 Mon Sep 17 00:00:00 2001 From: giovany osorio Date: Wed, 26 Apr 2023 16:35:50 -0500 Subject: [PATCH 11/96] Reto mouredev#8 - Javascript --- .../javascript/giovanyosorio.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/javascript/giovanyosorio.js diff --git a/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/javascript/giovanyosorio.js b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/javascript/giovanyosorio.js new file mode 100644 index 0000000000..7e5d012ec7 --- /dev/null +++ b/Retos/Reto #8 - EL GENERADOR PSEUDOALEATORIO [Media]/javascript/giovanyosorio.js @@ -0,0 +1,15 @@ +/* + * Crea un generador de números pseudoaleatorios entre 0 y 100. + * - No puedes usar ninguna función "random" (o semejante) del lenguaje de programación seleccionado. + * + * Es más complicado de lo que parece... + */ + +function randomNumber() +{ + let date = new Date(); + return date.getTime() % 100 + // console.log(date.getTime() % 100) + +} +console.log("This is a random value:", randomNumber()); \ No newline at end of file From 9bde8c3a91835067f65566c4aafe12967fd802c5 Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Wed, 26 Apr 2023 17:17:12 -0500 Subject: [PATCH 12/96] Delete sublian.py --- .../python/sublian.py | 72 ------------------- 1 file changed, 72 deletions(-) delete mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py deleted file mode 100644 index 8daeb81169..0000000000 --- a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py +++ /dev/null @@ -1,72 +0,0 @@ -@@ -0,0 +1,71 @@ -# Reto #2: EL PARTIDO DE TENIS -#### Dificultad: Media | Publicación: 09/01/23 | Corrección: 16/01/23 - -"""Enunciado -/* - * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. - * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien - * gane cada punto del juego. - * - * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. - * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: - * 15 - Love - * 30 - Love - * 30 - 15 - * 30 - 30 - * 40 - 30 - * Deuce - * Ventaja P1 - * Ha ganado el P1 - * - Si quieres, puedes controlar errores en la entrada de datos. - * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. - */ -""" - -def partido(scores): - score_p1=0 - score_p2=0 - points=["Love", "15", "30", "40"] - print("") - - for score in scores: - - if score=="P1": - score_p1+=1 - elif score=="P2": - score_p2+=1 - else: - print("Dato invalido, no se puede continuar") - return() - - if score_p1 == score_p2 and score_p1 > 0: - print("Deuce") - elif score_p1>3 or score_p2>3: - - if score_p1 == score_p2 - 2: - print("Ganador P2 \n") - return() - - elif score_p2 == score_p1 - 2: - print("Ganador P1 \n") - return() - - elif score_p1 == score_p2 - 1: - print("Ventaja P2") - continue - - elif score_p2 == score_p1 - 1: - print("Ventaja P1") - continue - - else: - print(f'{points[score_p1]} - {points[score_p2]}') - -if __name__ == '__main__': - - print("Primer partido") - partido(["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1", "P1"]) - print("Segundo partido") - partido(["P2", "P1", "P2", "P2", "P1", "P2"]) - print("Tercer partido") - partido(["P1", "P2", "P2", "P2", "P1", "P1", "P2", "P1", "P1", "P2", "P1", "P2", "P2", "P2"]) From f85232469c44e69907336ec97ef742f767bb0a5a Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Wed, 26 Apr 2023 17:32:29 -0500 Subject: [PATCH 13/96] Reto #3 Python --- .../python/sublian.py" | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/sublian.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/sublian.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/sublian.py" new file mode 100644 index 0000000000..8b5825f087 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/sublian.py" @@ -0,0 +1,72 @@ +""" +Reto #3: EL GENERADOR DE CONTRASEÑAS + Dificultad: Media | Publicación: 16/01/23 | Corrección: 23/01/23 + +Enunciado + * Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. + * Podrás configurar generar contraseñas con los siguientes parámetros: + * - Longitud: Entre 8 y 16. + * - Con o sin letras mayúsculas. + * - Con o sin números. + * - Con o sin símbolos. + * (Pudiendo combinar todos estos parámetros entre ellos) +""" + +# ficheros necesarios +import secrets +import string + +def leer_entero(texto="Indique el tamaño de la contraseña: "): + entrada = input(texto) + try: + entrada = int(entrada) + return entrada + except ValueError: + print ("La entrada es incorrecta: escribe un numero entero") + return 0 + + +def leer_cadena(texto): + entrada = input(texto).upper() + if entrada.isalpha() and entrada == "S": + return entrada + elif entrada =="N": + return False + else: + print("La entrada es incorrecta: escribe un caracter [s/n]") + leer_cadena(texto) + +if __name__ == '__main__': + + print("..::Reto #3: EL GENERADOR DE CONTRASEÑAS::..") + alphabet="" + + clave_tam = leer_entero() + if clave_tam>7 and clave_tam<17: + res_letras= leer_cadena("Desea que posea letras mayúsculas [s/n]: ") + if res_letras =="S": + letters = string.ascii_uppercase + alphabet +=letters + + res_numeros= leer_cadena("Desea que posea numeros [s/n]: ") + if res_numeros =="S": + digits = string.digits + alphabet +=digits + + res_simbolos= leer_cadena("Desea que posea símbolos [s/n]: ") + if res_simbolos =="S": + special_chars = string.punctuation + alphabet +=special_chars + + if res_letras or res_numeros or res_simbolos: + # generate a password string + pwd = '' + for i in range(clave_tam): + pwd += ''.join(secrets.choice(alphabet)) + print(pwd) + else: + print("No ha selecionado Letras, Numeros ni simbolos. No se puede generar la contraseña!") + else: + print("No se puede generar la contraseña. El rango permitido es de 8 a 16") + +#alphabet = letters + digits + special_chars From 29f536f2f9977431980c7017e6d357bd9e9f88f7 Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Wed, 26 Apr 2023 17:42:41 -0500 Subject: [PATCH 14/96] Reto #2 - Python --- .../python/sublian.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py new file mode 100644 index 0000000000..f4346a9643 --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py @@ -0,0 +1,70 @@ + +"""# Reto #2: EL PARTIDO DE TENIS +#### Dificultad: Media | Publicación: 09/01/23 | Corrección: 16/01/23 + +/* + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ +""" + +def partido(scores): + score_p1=0 + score_p2=0 + points=["Love", "15", "30", "40"] + print("") + + for score in scores: + + if score=="P1": + score_p1+=1 + elif score=="P2": + score_p2+=1 + else: + print("Dato invalido, no se puede continuar") + return() + + if score_p1 == score_p2 and score_p1 > 0: + print("Deuce") + elif score_p1>3 or score_p2>3: + + if score_p1 == score_p2 - 2: + print("Ganador P2 \n") + return() + + elif score_p2 == score_p1 - 2: + print("Ganador P1 \n") + return() + + elif score_p1 == score_p2 - 1: + print("Ventaja P2") + continue + + elif score_p2 == score_p1 - 1: + print("Ventaja P1") + continue + + else: + print(f'{points[score_p1]} - {points[score_p2]}') + +if __name__ == '__main__': + print("Primer partido") + partido(["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1", "P1"]) + print("Segundo partido") + partido(["P2", "P1", "P2", "P2", "P1", "P2"]) + print("Tercer partido") + partido(["P1", "P2", "P2", "P2", "P1", "P1", "P2", "P1", "P1", "P2", "P1", "P2", "P2", "P2"]) From bf06b50c9cf8fde333210efbee49e321cb8a4d59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Chocho?= <68519171+mchocho99@users.noreply.github.com> Date: Wed, 26 Apr 2023 19:50:19 -0300 Subject: [PATCH 15/96] Reto #0 - C# --- .../c#/mchocho99.cs" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/mchocho99.cs" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/mchocho99.cs" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/mchocho99.cs" new file mode 100644 index 0000000000..99b63dccae --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/c#/mchocho99.cs" @@ -0,0 +1,30 @@ +public static void reto0() +{ + /* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ + for (int i = 0; i <= 100; i++) + { + string result = ""; + if (i % 3 == 0) + { + result += "fizz"; + } + if (i % 5 == 0) + { + result += "buzz"; + } + if (result.Equals("")) + { + Console.WriteLine(i); + } else + { + Console.WriteLine(result); + } + } +} From d5ee0f2919ec164ef919f8d8413408534a069355 Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Wed, 26 Apr 2023 17:57:16 -0500 Subject: [PATCH 16/96] Reto #2 - Python --- .../python/sublian.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py index f4346a9643..255ac41b0e 100644 --- a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py @@ -1,4 +1,3 @@ - """# Reto #2: EL PARTIDO DE TENIS #### Dificultad: Media | Publicación: 09/01/23 | Corrección: 16/01/23 @@ -29,7 +28,6 @@ def partido(scores): print("") for score in scores: - if score=="P1": score_p1+=1 elif score=="P2": @@ -41,27 +39,23 @@ def partido(scores): if score_p1 == score_p2 and score_p1 > 0: print("Deuce") elif score_p1>3 or score_p2>3: - if score_p1 == score_p2 - 2: print("Ganador P2 \n") return() - elif score_p2 == score_p1 - 2: print("Ganador P1 \n") return() - elif score_p1 == score_p2 - 1: print("Ventaja P2") continue - elif score_p2 == score_p1 - 1: print("Ventaja P1") continue - else: print(f'{points[score_p1]} - {points[score_p2]}') if __name__ == '__main__': + print("Primer partido") partido(["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1", "P1"]) print("Segundo partido") From f43e45cdf67ae652371287fb0b56a42a8d7f536d Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Wed, 26 Apr 2023 18:03:06 -0500 Subject: [PATCH 17/96] Reto #3 Python --- .../python/sublian.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py index 255ac41b0e..1ef769cbbe 100644 --- a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/sublian.py @@ -1,3 +1,4 @@ + """# Reto #2: EL PARTIDO DE TENIS #### Dificultad: Media | Publicación: 09/01/23 | Corrección: 16/01/23 @@ -28,6 +29,7 @@ def partido(scores): print("") for score in scores: + if score=="P1": score_p1+=1 elif score=="P2": @@ -39,18 +41,23 @@ def partido(scores): if score_p1 == score_p2 and score_p1 > 0: print("Deuce") elif score_p1>3 or score_p2>3: + if score_p1 == score_p2 - 2: print("Ganador P2 \n") return() + elif score_p2 == score_p1 - 2: print("Ganador P1 \n") return() + elif score_p1 == score_p2 - 1: print("Ventaja P2") - continue + continue + elif score_p2 == score_p1 - 1: print("Ventaja P1") - continue + continue + else: print(f'{points[score_p1]} - {points[score_p2]}') From 4fe0d250fc592088652a005f265a3f28fa29a3c6 Mon Sep 17 00:00:00 2001 From: jpirulo Date: Wed, 26 Apr 2023 19:33:59 -0400 Subject: [PATCH 18/96] Reto #17 - GIT Y GITHUB --- .../python/jpirulo.py" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/jpirulo.py" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/jpirulo.py" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/jpirulo.py" new file mode 100644 index 0000000000..c2415cb9f6 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/jpirulo.py" @@ -0,0 +1,36 @@ +import requests +import json + +class Commit: + def __init__(self, hash, author, message, date): + self.hash = hash + self.author = author + self.message = message + self.date = date + +class GitHubAPI: + def __init__(self, owner, repo): + self.owner = owner + self.repo = repo + self.url = f"https://api.github.com/repos/{owner}/{repo}/commits?per_page=10" + + def get_last_commits(self): + response = requests.get(self.url) + commits_json = json.loads(response.text) + commits = [] + for commit_json in commits_json: + hash = commit_json['sha'][:6] + author = commit_json['commit']['author']['name'] + message = commit_json['commit']['message'] + date = commit_json['commit']['author']['date'][:-6] + commit = Commit(hash, author, message, date) + commits.append(commit) + return commits + +# Ejemplo de uso +github_api = GitHubAPI("Mouredev", "retos-programacion-2023") +print('Ultimos 10 Commits') + +commits = github_api.get_last_commits() +for i, commit in enumerate(commits): + print(f"Commit {i+1} | {commit.hash} | {commit.author} | {commit.message} | {commit.date}") From f969203547f3eca3068206fc7f8ce7c14fe03067 Mon Sep 17 00:00:00 2001 From: jpirulo Date: Wed, 26 Apr 2023 19:50:54 -0400 Subject: [PATCH 19/96] Reto #16 --- .../python/jpirulo.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Retos/Reto #16 - LA ESCALERA [Media]/python/jpirulo.py diff --git a/Retos/Reto #16 - LA ESCALERA [Media]/python/jpirulo.py b/Retos/Reto #16 - LA ESCALERA [Media]/python/jpirulo.py new file mode 100644 index 0000000000..2c21ae788a --- /dev/null +++ b/Retos/Reto #16 - LA ESCALERA [Media]/python/jpirulo.py @@ -0,0 +1,29 @@ +class Staircase: + def __init__(self, steps: int): + self.steps = steps + + def draw(self): + if self.steps > 0: + for step in range(self.steps + 1): + spaces = " " * (self.steps - step) + step_draw = "_" if step == 0 else "_|" + print(f"{spaces}{step_draw}") + elif self.steps < 0: + for step in range(abs(self.steps) + 1): + spaces = " " * ((step * 2) - 1) + step_draw = "_" if step == 0 else "|_" + print(f"{spaces}{step_draw}") + else: + print("__") + +staircase1 = Staircase(0) +staircase2 = Staircase(4) +staircase3 = Staircase(20) +staircase4 = Staircase(-4) +staircase5 = Staircase(-20) + +staircase1.draw() +staircase2.draw() +staircase3.draw() +staircase4.draw() +staircase5.draw() From 8cd0150b3d7a7bcef0975f2e8d226e36ab6e96bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Aldana?= Date: Wed, 26 Apr 2023 18:24:02 -0700 Subject: [PATCH 20/96] Reto #0 - python --- .../python/martin-aq.py" | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/martin-aq.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/martin-aq.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/martin-aq.py" new file mode 100644 index 0000000000..0484d598f4 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/martin-aq.py" @@ -0,0 +1,11 @@ +def fizzbuzz(): + for num in range(1,101): + if num % 3 == 0 and num % 5 == 0: + print("fizzbuzz") + elif num % 3 == 0: + print("fizz") + elif num % 5 == 0: + print("buzz") + else: + print(num) +fizzbuzz() \ No newline at end of file From 1a788c81f1fe1dd812282780a51999eca9114a10 Mon Sep 17 00:00:00 2001 From: "Sergio Flores Ledezma (zerch)" Date: Wed, 26 Apr 2023 22:44:31 -0400 Subject: [PATCH 21/96] reto #17 - Javascript --- .../typescript/zerchito.ts" | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/zerchito.ts" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/zerchito.ts" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/zerchito.ts" new file mode 100644 index 0000000000..fd539d3511 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/zerchito.ts" @@ -0,0 +1,48 @@ +/* + * ¡Estoy de celebración! He publicado mi primer libro: + * "Git y GitHub desde cero" + * - Papel: mouredev.com/libro-git + * - eBook: mouredev.com/ebook-git + * + * ¿Sabías que puedes leer información de Git y GitHub desde la gran + * mayoría de lenguajes de programación? + * + * Crea un programa que lea los últimos 10 commits de este repositorio y muestre: + * - Hash + * - Autor + * - Mensaje + * - Fecha y hora + * + * Ejemplo de salida: + * Commit 1 (el más reciente) | 12345A | MoureDev | Este es un commit | 24/04/2023 21:00 + * + * Se permite utilizar librerías que nos faciliten esta tarea. + * + */ +type RepositoryCommit ={ + hash: string, + author: string, + message: string, + date: Date +} +const repositoryName = 'mouredev/retos-programacion-2023'; +const NUMBER_OF_COMMITS = 10; +async function readCommits(repositoryName: string):Promise { + const url = `https://api.github.com/repos/${repositoryName}/commits` + let commitsData = await fetch(url) + .then(response => response.json()) + .catch(error => console.log(error)); + let commits = commitsData.slice(0, NUMBER_OF_COMMITS); + commits = commits.map(commitInfo => { + return { + hash: commitInfo.commit.tree.sha, + author: commitInfo.commit.author.name, + message: commitInfo.commit.message, + date: new Date(commitInfo.commit.author.date) + } + }); + console.log(commits) + return commits; +} + +readCommits(repositoryName); From 689303648e5a19c1bf7af7109c1fbd34431045aa Mon Sep 17 00:00:00 2001 From: "Sergio Flores Ledezma (zerch)" Date: Thu, 27 Apr 2023 01:25:56 -0400 Subject: [PATCH 22/96] reto #0 Typescript --- .../typescript/zerchito.ts" | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/typescript/zerchito.ts" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/typescript/zerchito.ts" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/typescript/zerchito.ts" new file mode 100644 index 0000000000..f8991d5da1 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/typescript/zerchito.ts" @@ -0,0 +1,25 @@ +/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ + +const MAX = 100; +const MIN = 1; +function fizzbuzz(): void { + for(let num = MIN; num<=MAX; num++){ + let response = ''; + if ( num%3 ===0 ) { + response = 'fizz'; + } + if ( num%5 === 0 ) { + response = response + 'buzz'; + } + console.log(response || num); + } +} + +fizzbuzz(); From 2898988a10d1743946b1c1c4a9cb59d287f09fbb Mon Sep 17 00:00:00 2001 From: Javier Pinilla Date: Thu, 27 Apr 2023 10:06:18 +0200 Subject: [PATCH 23/96] Reto #17 - Python --- .../python/ingjavierpinilla.py" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/ingjavierpinilla.py" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/ingjavierpinilla.py" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/ingjavierpinilla.py" new file mode 100644 index 0000000000..0a68333184 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/ingjavierpinilla.py" @@ -0,0 +1,36 @@ +import requests + + +class GithubService: + def __init__(self, repo): + self.repo = repo + self.base_url = f"https://api.github.com/repos/{self.repo}" + + def get_commits(self, per_page=10): + url = f"{self.base_url}/commits" + params = {"per_page": per_page} + try: + response = requests.get(url, params=params) + response.raise_for_status() + except requests.exceptions.HTTPError as err: + raise SystemExit(err) from None + return response.json() + + def print_commits(self, per_page=10): + commits = self.get_commits() + if not commits: + return None + for i, commit in enumerate(commits): + sha = commit.get("sha") + _commit = commit.get("commit") + author = _commit.get("author").get("name") + message = _commit.get("message").strip() + date = _commit.get("committer").get("date") + print(f"{i}. {sha} | {author} | {message} | {date}") + print() + + +if __name__ == "__main__": + url = "mouredev/retos-programacion-2023" + github_service = GithubService(url) + print(github_service.print_commits()) From 499cee6680d22f6fff80a66aa38c0905fef70888 Mon Sep 17 00:00:00 2001 From: Raul Garcia Date: Thu, 27 Apr 2023 17:01:15 +0200 Subject: [PATCH 24/96] Reto #17 - Javascript --- .../javascript/raulg91.js" | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/raulg91.js" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/raulg91.js" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/raulg91.js" new file mode 100644 index 0000000000..236e57a907 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/raulg91.js" @@ -0,0 +1,42 @@ +const https = require('https'); + + +function get_data() { + + let data = []; + //Set request options + let options = { + headers : { + "User-Agent":"raulg91" + } + }; + + const req = https.get( "https://api.github.com/repos/mouredev/retos-programacion-2023/commits",options,(res)=>{ + res.on('data', (chunk) => { + data.push(chunk); + }); + + res.on('end',()=>{ + const commits = JSON.parse(Buffer.concat(data).toString()); + + for(let i=0;i<10;i++){ + let message = commits[i].commit.message; + message = message.toString().replace(/\n/g,""); + let date = new Date(commits[i].commit.author.date); + let date_string = `${date.getDate()}/${date.getMonth()+1}/${date.getFullYear()} ${date.getHours()}:${date.getMinutes()}`; + console.log(`Commit ${i+1} | ${commits[i].sha} | ${commits[i].commit.author.name} | ${message} | ${date_string}`); + } + + }); + + + + }).on("error",(error)=>{ + console.log("Error: " + error.message); + }) + + req.end(); + +} + +get_data(); \ No newline at end of file From c15cef52c3c2151bf1de912740bbb4156013d257 Mon Sep 17 00:00:00 2001 From: saurivane Date: Thu, 27 Apr 2023 20:09:18 +0200 Subject: [PATCH 25/96] =?UTF-8?q?soluci=C3=B3n=20al=20reto=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/saurivane.py" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/saurivane.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/saurivane.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/saurivane.py" new file mode 100644 index 0000000000..f80a20cd8b --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/saurivane.py" @@ -0,0 +1,23 @@ +""""" +/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ +""" + +def fizzbuzz(num): + if num%3 == 0 and num%5 == 0: + return "fizzbuzz" + elif num%3 == 0: + return "fizz" + elif num%5 == 0: + return "buzz" + else: + return num + +for i in range(1,101): + print(fizzbuzz(i)) \ No newline at end of file From 39a3279cb2f7f2cfa70bb5a2e9be6f084ba95570 Mon Sep 17 00:00:00 2001 From: saurivane Date: Thu, 27 Apr 2023 20:27:10 +0200 Subject: [PATCH 26/96] Reto #1 - Python --- .../python/saurivane.py" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/saurivane.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/saurivane.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/saurivane.py" new file mode 100644 index 0000000000..b738823f22 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/saurivane.py" @@ -0,0 +1,23 @@ +"""/* + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + */ + """ + +letras=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","1","2","3","4","5","6","7","8","9","0", " "] + +valores=["4","I3","[",")","3","|=","&","#","1",",_|",">|","1","/\/\\","^/","0","|*","(_,)","I2","5","7","(_)","\/","\/\/","><","j","2","L","R","E","A","S","b","T","B","g","o", " "] + +language_hacker = dict(zip(letras,valores)) + +print("Introduzca el texto a convertir") +convertir = input().lower() +resultado = "" +for letter in convertir: + resultado += language_hacker[letter] + +print("Su texto hackeado es " + resultado) \ No newline at end of file From a537f47caf1212e999da3e43c7589ae4590b0b36 Mon Sep 17 00:00:00 2001 From: abanoj Date: Thu, 27 Apr 2023 22:24:47 +0200 Subject: [PATCH 27/96] Reto #3 - Javascript --- .../javascript/abanoj.js" | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/abanoj.js" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/abanoj.js" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/abanoj.js" new file mode 100644 index 0000000000..f1c5878b98 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/javascript/abanoj.js" @@ -0,0 +1,41 @@ +/* + * Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. + * Podrás configurar generar contraseñas con los siguientes parámetros: + * - Longitud: Entre 8 y 16. + * - Con o sin letras mayúsculas. + * - Con o sin números. + * - Con o sin símbolos. + * (Pudiendo combinar todos estos parámetros entre ellos) + */ + +const rangeGenerator = (start=0, stop, step=1) => { + return Array.from({ length: (stop - start) / step + 1}, (_, i) => start + (i * step)); +} + +const retoTres = (length = 8, capital = false, numbers = false, symbols = false ) => { + let options = rangeGenerator(97,122).map(e => String.fromCharCode(e)); + let password = ''; + + if(length < 8) length = 8; + if(length > 16) length = 16; + + if(capital) + options = options.concat(rangeGenerator(65,90).map(e => String.fromCharCode(e))); + + if(numbers) + options = options.concat(rangeGenerator(48,57).map(e => String.fromCharCode(e))); + + if(symbols){ + options = options.concat(rangeGenerator(33,47).map(e => String.fromCharCode(e))); + options = options.concat(rangeGenerator(58,64).map(e => String.fromCharCode(e))); + options = options.concat(rangeGenerator(91,96).map(e => String.fromCharCode(e))); + } + + console.log(options); + for (let i = 0; i < length; i++) { + password += options[Math.floor(Math.random() * options.length)]; + } + return password; +} + +retoTres() \ No newline at end of file From ba4b3e421590bfafa3b62ec397146e8e809df1e7 Mon Sep 17 00:00:00 2001 From: carlosf Date: Thu, 27 Apr 2023 15:44:53 -0500 Subject: [PATCH 28/96] Reto#15 - Java --- .../java/Cflorezp.java" | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 "Retos/Reto #15 - AUREBESH [F\303\241cil]/java/Cflorezp.java" diff --git "a/Retos/Reto #15 - AUREBESH [F\303\241cil]/java/Cflorezp.java" "b/Retos/Reto #15 - AUREBESH [F\303\241cil]/java/Cflorezp.java" new file mode 100644 index 0000000000..f2c9710acf --- /dev/null +++ "b/Retos/Reto #15 - AUREBESH [F\303\241cil]/java/Cflorezp.java" @@ -0,0 +1,70 @@ +package reto15Aurebesh; + +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +/* + * Crea una función que sea capaz de transformar Español al lenguaje básico del universo + * Star Wars: el "Aurebesh". + * - Puedes dejar sin transformar los caracteres que no existan en "Aurebesh". + * - También tiene que ser capaz de traducir en sentido contrario. + * + * ¿Lo has conseguido? Nómbrame en twitter.com/mouredev y escríbeme algo en Aurebesh. + * + * ¡Que la fuerza os acompañe! + */ +public class Cflorezp { + + public static void main(String[] args) { + System.out.println("**********************************************"); + System.out.println("Bienvenido al traductor de Español a Aurebesh\n"); + System.out.print("Escribe la palabra o frase que quieres traducir: "); + + Scanner input = new Scanner(System.in); + String traducir = input.nextLine(); + + System.out.println("Traducción: \n" + caracterAurebesh(traducir.toLowerCase())); + + } + + public static String caracterAurebesh(String frase){ + Map aurebesh = new HashMap<>(){{ + put("a", "aurek"); put("b", "besh"); put("c", "cresh"); put("d", "dorn"); + put("e", "esk"); put("f", "forn"); put("g", "grek"); put("h", "herf"); + put("i", "isk"); put("j", "jenth"); put("k", "krill"); put("l", "leth"); + put("m", "merm"); put("n", "nern"); put("o", "osk"); put("p", "peth"); + put("q", "qek"); put("r", "resh"); put("s", "senth"); put("t", "trill"); + put("u", "usk"); put("v", "vev"); put("w", "wesk"); put("x", "xesh"); + put("y", "yirt"); put("z", "zerek"); put("ae", "enth"); put("ch","cherek"); + put("eo", "onith"); put("kh", "krenth"); put("oo", "orenth"); put("sh", "sen"); + put("th", "thesh"); put("gn", "nen"); put(" ", " "); put("ñ", "ñ"); + }}; + + String duo = ""; + String provisional = ""; + StringBuilder creacionFrase = new StringBuilder(); + for(int i = 0; i < frase.length(); i++){ + if(i + 1 < frase.length()){ + duo = frase.substring(i, i + 2); + provisional = aurebesh.get(duo); + if(provisional == null){ + duo = frase.substring(i, i + 1); + provisional = aurebesh.get(duo) == null ? duo : aurebesh.get(duo); + creacionFrase.append(provisional); + } + else{ + creacionFrase.append(provisional); + i++; + } + }else{ + duo = frase.substring(i, i + 1); + provisional = aurebesh.get(duo); + creacionFrase.append(provisional); + } + } + return creacionFrase.toString(); + } +} + + From b6c56c7e4037feab24c3754924042d8038d4af82 Mon Sep 17 00:00:00 2001 From: saurivane Date: Thu, 27 Apr 2023 22:49:48 +0200 Subject: [PATCH 29/96] Reto #2 - Python --- .../python/saurivane.py | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/saurivane.py diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/saurivane.py b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/saurivane.py new file mode 100644 index 0000000000..205614f94e --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/python/saurivane.py @@ -0,0 +1,48 @@ +"""/* + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ +""" + +puntuacion = {0:"Love", 1:"15", 2:"30", 3:"40"} +player1 = 0 +player2 = 0 + +secuencia = ["P1", "P1", "P2", "P2", "P1", "P2", "P1", "P1"] + +for i in secuencia: + if i == "P1": + player1 = player1+1 + else: + player2 = player2+1 + + if player1 == 3 and player2 == 3: + print("Deuce") + elif player1 >= 4 or player2 >= 4: + diff = player1 - player2 + if diff == 0: + print("Deuce") + elif diff == 1: + print("Ventaja P1") + elif diff == -1: + print("Ventaja P2") + elif diff >= 2: + print("Ha ganado el P1") + + else: print("Ha ganado P2") + else: + print(f"{puntuacion[player1]} - {puntuacion[player2]}") \ No newline at end of file From 9a4a855beac3b2d94f81afeda740c76c3322576c Mon Sep 17 00:00:00 2001 From: Emmanuel Paul Carrillo Carpio Date: Thu, 27 Apr 2023 15:53:09 -0500 Subject: [PATCH 30/96] Retos/Reto #16/javascript/EmaPaul.js --- .../javascript/EmaPaul.js | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Retos/Reto #16 - LA ESCALERA [Media]/javascript/EmaPaul.js diff --git a/Retos/Reto #16 - LA ESCALERA [Media]/javascript/EmaPaul.js b/Retos/Reto #16 - LA ESCALERA [Media]/javascript/EmaPaul.js new file mode 100644 index 0000000000..ae0f519d38 --- /dev/null +++ b/Retos/Reto #16 - LA ESCALERA [Media]/javascript/EmaPaul.js @@ -0,0 +1,39 @@ +/* + * Crea una función que dibuje una escalera según su número de escalones. + * - Si el número es positivo, será ascendente de izquiera a derecha. + * - Si el número es negativo, será descendente de izquiera a derecha. + * - Si el número es cero, se dibujarán dos guiones bajos (__). + * + * Ejemplo: 4 + * _ + * _| + * _| + * _| + * _| + * + */ + + + +function escalones(numero){ + let contadorPositivos = 1; + let contadorNegativos = -1 + let escalera = ""; + + if(numero>0){ + while(contadorPositivos<=numero){ + escalera += ' '.repeat(numero - contadorPositivos) + '_|\n'; + contadorPositivos++; + } + }else if(numero<0){ + while(contadorNegativos>=numero){ + escalera += ' '.repeat(Math.abs(contadorNegativos) - 1) + '|_\n'; + contadorNegativos--; + } + }else { + escalera = '__'; + } + return escalera +} + +console.log(escalones(6)); From 23bb600606c64d54738fee448c89b53882abc05e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Chocho?= <68519171+mchocho99@users.noreply.github.com> Date: Thu, 27 Apr 2023 18:11:03 -0300 Subject: [PATCH 31/96] Reto #0 - Javascript --- .../javascript/mchocho99.js" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/mchocho99.js" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/mchocho99.js" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/mchocho99.js" new file mode 100644 index 0000000000..bb669ea73d --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/mchocho99.js" @@ -0,0 +1,24 @@ +export const reto0 = () => { + /* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ + for (let i = 1; i <= 100; i++) { + let result = ""; + if (i % 3 === 0) { + result += "fizz"; + } + if (i % 5 === 0) { + result += "buzz"; + } + if (result) { + console.log(result) + } else { + console.log(i); + } + } +} From 64274440584e3e236b991bee9bd2844e1051ac9d Mon Sep 17 00:00:00 2001 From: Ignacio Fuentes Date: Thu, 27 Apr 2023 20:06:25 -0300 Subject: [PATCH 32/96] Reto #1 - Python --- .../python/ignafuentes.py" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/ignafuentes.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/ignafuentes.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/ignafuentes.py" new file mode 100644 index 0000000000..da8889a3c7 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/ignafuentes.py" @@ -0,0 +1,17 @@ +def traductor_hacker(texto): + + lenguaje = {'a': '4', 'b': 'I3', 'c': '[', 'd': ')', 'e': '3', 'f': '|=', 'g': '&', 'h': '#', 'i': '1', 'j': ',_|', 'k': '>|', 'l': '1', 'm': 'JVI', 'n': '^/', 'o': '0', 'p': '|*', 'q': '(_,)', 'r': 'I2', 's': '5', 't': '7', 'u': '(_)', 'v': '\/', 'w': '\/\/', 'x': '><', 'y': 'j', 'z': '2' } + + texto_traducido = '' + + for caracter in texto: + if caracter.lower() in lenguaje.keys(): + texto_traducido += lenguaje[caracter.lower()] + else: + texto_traducido += caracter + + return texto_traducido + + +print(traductor_hacker('Hola a todo el mundo!')) +print(traductor_hacker(input('Ingresar el texto a traducir => '))) \ No newline at end of file From a4ecbaf2de06c605519cd1d0f53adfcdf53e8ded Mon Sep 17 00:00:00 2001 From: Jose Dos Ramos Date: Fri, 28 Apr 2023 01:11:09 +0100 Subject: [PATCH 33/96] =?UTF-8?q?A=C3=B1adir=20Reto=20de=20programaci?= =?UTF-8?q?=C3=B3n=20#3250?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Añadiendo el reto de programación #3250 en PHP --- .../php/josea2r.php" | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" new file mode 100644 index 0000000000..666cf3c4af --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" @@ -0,0 +1,70 @@ +/* + * ¡Estoy de celebración! He publicado mi primer libro: + * "Git y GitHub desde cero" + * - Papel: mouredev.com/libro-git + * - eBook: mouredev.com/ebook-git + * + * ¿Sabías que puedes leer información de Git y GitHub desde la gran + * mayoría de lenguajes de programación? + * + * Crea un programa que lea los últimos 10 commits de este repositorio y muestre: + * - Hash + * - Autor + * - Mensaje + * - Fecha y hora + * + * Ejemplo de salida: + * Commit 1 (el más reciente) | 12345A | MoureDev | Este es un commit | 24/04/2023 21:00 + * + * Se permite utilizar librerías que nos faciliten esta tarea. + * + */ + + https://gist.github.com/travstoll/d6d72855b4184fbfc30f3a20a9adbb4c + + //Auth Token para hacer uso del API (Añadir el tuyo creado previamente) + $token = "Introduce tu Token de Acceso Personal"; + + $url = "https://api.github.com/repos/mouredev/retos-programacion-2023/commits?per_page=10"; + + //Añadir la información necesaria para el uso de API (método y headers) + $opts = [ + 'http' => [ + 'method' => 'GET', + 'header' => [ + 'User-Agent: PHP', + 'Authorization: Bearer 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', + 'X-GitHub-Api-Version: 2022-11-28', + 'Content-type: application/x-www-form-urlencoded', + ], + ] + ]; + + //Inicializa file_get_contents + $context = stream_context_create($opts); + + //Realiza el request a la página + $content = file_get_contents($url, false, $context); + + //Convierte la información en Array + $response_array = json_decode($content, true); + + $commit_number = array('commit' => 0); + + //Luego de obtener la información del API podremos comenzar a obtener los datos de los commits + foreach($response_array as $commit) { + + $commit_number['commit'] = $commit_number['commit'] + 1; + + $sha = $commit['sha']; + $author_name = $commit['commit']['author']['name']; + $message = str_replace("\n", '', $commit['commit']['message']); + $time = date_format(date_create($commit['commit']['author']['date']), 'd/m/Y H:i'); + + echo "Commit {$commit_number['commit']} | " . $sha . " | " . $author_name . " | " . $message . " | " . $time . "\n"; + + } + +?> From cee5a9b900856e21f6c988ec37d82a3b3ed4107d Mon Sep 17 00:00:00 2001 From: Jose Dos Ramos Date: Fri, 28 Apr 2023 01:36:32 +0100 Subject: [PATCH 34/96] Adding Reto #3256 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Añadiendo Reto #3256 en PHP --- .../php/josea2r.php" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/josea2r.php" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/josea2r.php" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/josea2r.php" new file mode 100644 index 0000000000..2a479f9286 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/josea2r.php" @@ -0,0 +1,23 @@ +/* + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". + */ + + Date: Thu, 27 Apr 2023 21:43:15 -0400 Subject: [PATCH 35/96] reto #1 Typescript --- .../typescript/zerchito.ts" | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/typescript/zerchito.ts" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/typescript/zerchito.ts" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/typescript/zerchito.ts" new file mode 100644 index 0000000000..cef15a76e0 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/typescript/zerchito.ts" @@ -0,0 +1,61 @@ +/* + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + */ + +const HACKER_CODE = { + a: '4', + b: 'I3', + c: '[', + d: ')', + e: '3', + f: '|=', + g: '&', + h: '#', + i: '1', + j: ',_|', + k: '>|', + l: '1', + m: '/\\/\\', + n: '^/', + o: '0', + p: '|*', + q: '(_,)', + r: 'I2', + s: '5', + t: '7', + u: '(_)', + v: '\\/', + w: '\\/\\/', + x: '><', + y: 'j', + z: '2', + 1: 'L', + 2: 'R', + 3: 'E', + 4: 'A', + 5: 'S', + 6: 'b', + 7: 'T', + 8: 'B', + 9: 'g', + 0: 'o' +}; + +function transformNaturalToHacker(natural:string):string { + return natural + .toLowerCase() + .split('') + .map(character => HACKER_CODE[character] || character) + .join('') +} + +const NATURAL = 'Lenguaje Natural (zerchito)'; +const HACKER = transformNaturalToHacker(NATURAL); + +console.log(`Natural: ${NATURAL}`); +console.log(`Hacker: ${HACKER}`); \ No newline at end of file From bafe40841fb3defd9b1cece0b52861d5dbc3460a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateo=20=C3=81lvarez?= <123007132+drifterDev@users.noreply.github.com> Date: Thu, 27 Apr 2023 20:58:32 -0500 Subject: [PATCH 36/96] Reto #5 - Python --- "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/drifterDev.py" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/drifterDev.py" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/drifterDev.py" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/drifterDev.py" new file mode 100644 index 0000000000..63334d8adb --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/drifterDev.py" @@ -0,0 +1 @@ +print("Hola mundo!") From 3cacb93af475472eb9172d342c61827b1a1e79f4 Mon Sep 17 00:00:00 2001 From: LauraCastrillonMp Date: Thu, 27 Apr 2023 22:21:44 -0500 Subject: [PATCH 37/96] Reto #17 Javascript --- .../javascript/LauraCastrillonMp.js" | 46 +++++++++++++++++++ .../javascript/marcode24.js" | 1 + 2 files changed, 47 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/LauraCastrillonMp.js" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/LauraCastrillonMp.js" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/LauraCastrillonMp.js" new file mode 100644 index 0000000000..a4ea26455d --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/LauraCastrillonMp.js" @@ -0,0 +1,46 @@ +/* + * ¡Estoy de celebración! He publicado mi primer libro: + * "Git y GitHub desde cero" + * - Papel: mouredev.com/libro-git + * - eBook: mouredev.com/ebook-git + * + * ¿Sabías que puedes leer información de Git y GitHub desde la gran + * mayoría de lenguajes de programación? + * + * Crea un programa que lea los últimos 10 commits de este repositorio y muestre: + * - Hash + * - Autor + * - Mensaje + * - Fecha y hora + * + * Ejemplo de salida: + * Commit 1 (el más reciente) | 12345A | MoureDev | Este es un commit | 24/04/2023 21:00 + * + * Se permite utilizar librerías que nos faciliten esta tarea. + * +*/ + +async function getCommits() { + try { + const response = await fetch(`https://api.github.com/repos/mouredev/retos-programacion-2023/commits`); + const data = await response.json(); + let commits = []; + for (let i = 0; i < 10; i++) { + commits.push({ + commit: i + 1, + Hash: data[i].commit.tree.sha.slice(0, 7), + Autor: data[i].commit.author.name, + Mensaje: data[i].commit.message, + Fecha: data[i].commit.author.date + }); + let mensaje = commits[i].Mensaje.replace(/\n/g, " "); // Para eliminar el salto de linea que hay en el mensaje del commit + console.log(`Commit: ${commits[i].commit} | ${commits[i].Hash} | ${commits[i].Autor} | ${mensaje} | ${commits[i].Fecha}`); + } + } catch (error) { + return console.log(error); + } +} + +getCommits() + + diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/marcode24.js" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/marcode24.js" index 7e1bb6ce70..e49cd3950e 100644 --- "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/marcode24.js" +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/javascript/marcode24.js" @@ -36,3 +36,4 @@ const getCommits = ({ user, repo, limit = 10 }) => { }; // Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges +getCommits("mouredev", "retos-programacion-2023") \ No newline at end of file From e5bae0929b78cdc9721864759f454a07008b7649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Aldana?= Date: Thu, 27 Apr 2023 20:26:01 -0700 Subject: [PATCH 38/96] Reto #1 - Python --- .../python/martin-aq.py" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/martin-aq.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/martin-aq.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/martin-aq.py" new file mode 100644 index 0000000000..95eceeba5b --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/martin-aq.py" @@ -0,0 +1,21 @@ +def translate_to_leet(string): + + leet_string = "" + + hashMap = { + "a": "4", "b": "|3", "c": "[", "d": ")", "e": "3", "f": "|=", "g": "&", "h": "#", + "i": "1", "j": ",_|", "k": ">|", "l": "1", "m": "|V|","n": "^/", "o": "0", "p": "|*", + "q": "(_,)", "r": "|2", "s": "5", "t": "7", "u": "(_)", "v": "|/", "w": "VV", + "x": "><", "y": "j", "z": "2", "1": "L", "2": "R", "3": "E", "4": "A", "5": "S", + "6": "b", "7": "T", "8": "B", "9": "g", "0": "o" + } + + for word in string.lower(): + if word in hashMap.keys(): + leet_string += hashMap[word] + else: + leet_string += word + + return leet_string + +print(translate_to_leet(input("Ingrese una cadena de texto: "))) \ No newline at end of file From a0188bab13bb5c54f495fb9fe062a8eafa40948d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Aldana?= Date: Thu, 27 Apr 2023 20:39:15 -0700 Subject: [PATCH 39/96] Reto #5 - Python --- .../Reto #5 - HOLA MUNDO [F\303\241cil]/python/martin-aq.py" | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/martin-aq.py" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/martin-aq.py" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/martin-aq.py" new file mode 100644 index 0000000000..0f074f67ac --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/martin-aq.py" @@ -0,0 +1,4 @@ +def saludar(): + print("Hola Mundo!") + +saludar() \ No newline at end of file From ab073b99588e2c84dc82bb14b06636aaf1e51783 Mon Sep 17 00:00:00 2001 From: Jose Date: Fri, 28 Apr 2023 10:20:24 +0100 Subject: [PATCH 40/96] deleting token --- .../Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" index 666cf3c4af..9460474fe9 100644 --- "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" @@ -35,7 +35,7 @@ 'method' => 'GET', 'header' => [ 'User-Agent: PHP', - 'Authorization: Bearer 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', + 'Authorization: Bearer ' . $token, 'X-GitHub-Api-Version: 2022-11-28', 'Content-type: application/x-www-form-urlencoded', ], From 824cffca759ea8166f48e3b7d90feb872e08f7f6 Mon Sep 17 00:00:00 2001 From: Jose Dos Ramos Date: Fri, 28 Apr 2023 10:46:11 +0100 Subject: [PATCH 41/96] cutting sha from view --- .../Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" index 9460474fe9..9a8e629642 100644 --- "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/josea2r.php" @@ -25,7 +25,7 @@ //Código creado a partir del GIST de travstoll ubicado en esta página -> https://gist.github.com/travstoll/d6d72855b4184fbfc30f3a20a9adbb4c //Auth Token para hacer uso del API (Añadir el tuyo creado previamente) - $token = "Introduce tu Token de Acceso Personal"; + $token = "Añade tu Access Personal Token que puedes crear desde GitHub"; $url = "https://api.github.com/repos/mouredev/retos-programacion-2023/commits?per_page=10"; @@ -58,7 +58,7 @@ $commit_number['commit'] = $commit_number['commit'] + 1; - $sha = $commit['sha']; + $sha = substr($commit['sha'], 0, 7); $author_name = $commit['commit']['author']['name']; $message = str_replace("\n", '', $commit['commit']['message']); $time = date_format(date_create($commit['commit']['author']['date']), 'd/m/Y H:i'); From 731a4ea5ebd86146a729fbf9e3bd8bb359550a62 Mon Sep 17 00:00:00 2001 From: carlosf Date: Fri, 28 Apr 2023 12:01:37 -0500 Subject: [PATCH 42/96] Reto#16 - Java --- .../java/Cflorezp.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Retos/Reto #16 - LA ESCALERA [Media]/java/Cflorezp.java diff --git a/Retos/Reto #16 - LA ESCALERA [Media]/java/Cflorezp.java b/Retos/Reto #16 - LA ESCALERA [Media]/java/Cflorezp.java new file mode 100644 index 0000000000..69e0649dde --- /dev/null +++ b/Retos/Reto #16 - LA ESCALERA [Media]/java/Cflorezp.java @@ -0,0 +1,69 @@ +package reto16Escalera; + +import java.util.InputMismatchException; +import java.util.Scanner; + +/* + * Crea una función que dibuje una escalera según su número de escalones. + * - Si el número es positivo, será ascendente de izquiera a derecha. + * - Si el número es negativo, será descendente de izquiera a derecha. + * - Si el número es cero, se dibujarán dos guiones bajos (__). + * + * Ejemplo: 4 + * _ + * _| + * _| + * _| + * _| + */ +public class Cflorezp { + + public static void main(String[] args) { + + System.out.println("****** Pintor de Escaleras ******\n"); + System.out.print("¿Cuantos escalones desea que le dibuje? "); + Scanner input = new Scanner(System.in); + + try { + int numeroDeEscalones = input.nextInt(); + if (numeroDeEscalones > 0) { + escaleraPositiva(numeroDeEscalones); + } else if (numeroDeEscalones < 0) { + escaleraNegativa(numeroDeEscalones); + } else { + System.out.println("__"); + } + } catch (InputMismatchException e) { + System.out.println("El valor ingresado no es un número válido, por lo tanto no se dibujará nada"); + }finally { + input.close(); + } + } + + public static void escaleraPositiva(int escalones) { + for (int i = escalones; i >= 0; i--) { + for (int j = 0; j < i; j++) { + System.out.print(" "); + } + if (i == escalones) { + System.out.println("_"); + } else { + System.out.println("_|"); + } + } + } + + public static void escaleraNegativa(int escalones) { + escalones = escalones * -1; + for (int i = 0; i <= escalones; i++) { + for (int j = 0; j < i; j++) { + System.out.print(" "); + } + if (i == 0) { + System.out.println(" _"); + } else { + System.out.println("|_"); + } + } + } +} From 42d73dd10fa6e7af5468f6aae015b790c10be000 Mon Sep 17 00:00:00 2001 From: aaizaguirre Date: Fri, 28 Apr 2023 12:27:00 -0500 Subject: [PATCH 43/96] Reto #0 - JavaScript --- .../javascript/aaizaguirre.js" | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/aaizaguirre.js" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/aaizaguirre.js" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/aaizaguirre.js" new file mode 100644 index 0000000000..cdc5b29e1f --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/aaizaguirre.js" @@ -0,0 +1,14 @@ +for (let i = 1; i <= 100; i++){ + if (i % 15 === 0){ + console.log("fizzbuzz"); + continue; + } if (i % 3 === 0){ + console.log("fizz"); + continue; + } if (i % 5 === 0){ + console.log("buzz"); + continue; + } else{ + console.log(i) + }; +}; From 20564eb5dad91c5978d4a6b02b3b47ab0ff2d27f Mon Sep 17 00:00:00 2001 From: aaizaguirre Date: Fri, 28 Apr 2023 12:36:50 -0500 Subject: [PATCH 44/96] Reto #0 - Python --- .../python/aaizaguirre.py" | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/aaizaguirre.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/aaizaguirre.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/aaizaguirre.py" new file mode 100644 index 0000000000..34b20c9501 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/aaizaguirre.py" @@ -0,0 +1,9 @@ +for i in range(1,101): + if i % 15 == 0: + print("fizzbuzz") + elif i % 3 == 0: + print("fizz") + elif i % 5 == 0: + print("buzz") + else: + print(i) \ No newline at end of file From 62d4780a61afab52aa9c1d661c4548960946376a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Chocho?= <68519171+mchocho99@users.noreply.github.com> Date: Fri, 28 Apr 2023 15:20:34 -0300 Subject: [PATCH 45/96] Reto #0 - PHP --- .../php/mchocho99.php" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/mchocho99.php" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/mchocho99.php" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/mchocho99.php" new file mode 100644 index 0000000000..3f1d0c8bed --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/php/mchocho99.php" @@ -0,0 +1,29 @@ +"; + } else { + echo $return; + echo "
"; + } + } +} + +reto0(); From 42b8076d2558166303953b845e788d1e0df17000 Mon Sep 17 00:00:00 2001 From: abanoj Date: Fri, 28 Apr 2023 20:29:33 +0200 Subject: [PATCH 46/96] Reto #4 - Javascript --- .../javascript/abanoj.js | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/abanoj.js diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/abanoj.js b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/abanoj.js new file mode 100644 index 0000000000..d8a41ff28e --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/javascript/abanoj.js @@ -0,0 +1,50 @@ +/* + * Escribe un programa que, dado un número, compruebe y muestre si es primo, fibonacci y par. + * Ejemplos: + * - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" + * - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" + */ + +const esPrimo = num => { + let primo = (num<2)? false: true; + for(let i=2; i { + let a = 0; + let b = 1; + while (b { + let result = ''; + if(esPrimo(num)){ + result += `${num} es primo, `; + } else { + result += `${num} no es primo, `; + } + + if(esFibonacci(num)){ + result += 'es fibonacci '; + } else { + result += 'no es fibonacci '; + } + + if(num%2 === 0){ + result += 'y es par.'; + } else { + result += 'y no es par.'; + } + return result; +} \ No newline at end of file From 30c6b3744c1791c0aea5d33be612ee8c08218e6f Mon Sep 17 00:00:00 2001 From: Jaen <116536708+jaennova@users.noreply.github.com> Date: Fri, 28 Apr 2023 16:54:44 -0600 Subject: [PATCH 47/96] Reto #6 Kotlin --- .../kotlin/jaennova.kt | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/kotlin/jaennova.kt diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/kotlin/jaennova.kt b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/kotlin/jaennova.kt new file mode 100644 index 0000000000..f8620c29ac --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/kotlin/jaennova.kt @@ -0,0 +1,57 @@ +fun main() { + val rounds = listOf( + Pair("🗿", "✂️"), + Pair("✂️", "🗿"), + Pair("📄", "✂️") + ) + + val result = calculateWinner(rounds) + + println("El ganador es $result") +} + +fun calculateWinner(rounds: List>): String { + var player1Score = 0 + var player2Score = 0 + + rounds.forEach { round -> + val player1Choice = round.first + val player2Choice = round.second + + when { + player1Choice == player2Choice -> { + // Empate + } + player1Choice == "🗿" && (player2Choice == "✂️" || player2Choice == "🦎") -> { + // Gana jugador 1 + player1Score++ + } + player1Choice == "✂️" && (player2Choice == "📄" || player2Choice == "🦎") -> { + // Gana jugador 1 + player1Score++ + } + player1Choice == "📄" && (player2Choice == "🗿" || player2Choice == "🖖") -> { + // Gana jugador 1 + player1Score++ + } + player1Choice == "🦎" && (player2Choice == "📄" || player2Choice == "🖖") -> { + // Gana jugador 1 + player1Score++ + } + player1Choice == "🖖" && (player2Choice == "🗿" || player2Choice == "✂️") -> { + // Gana jugador 1 + player1Score++ + } + else -> { + // Gana jugador 2 + player2Score++ + } + } + } + + return when { + player1Score > player2Score -> "Player 1" + player2Score > player1Score -> "Player 2" + else -> "Tie" + } +} From 65bad9ef46e9f5a8b8bf500153062da4c03fc15d Mon Sep 17 00:00:00 2001 From: giovany osorio Date: Fri, 28 Apr 2023 18:54:48 -0500 Subject: [PATCH 48/96] Reto #9 javascript --- .../javascript/giovanyosorio.js" | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 "Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/giovanyosorio.js" diff --git "a/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/giovanyosorio.js" "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/giovanyosorio.js" new file mode 100644 index 0000000000..d98fd92400 --- /dev/null +++ "b/Retos/Reto #9 - HETEROGRAMA, ISOGRAMA Y PANGRAMA [F\303\241cil]/javascript/giovanyosorio.js" @@ -0,0 +1,67 @@ +/*Crea 3 funciones, cada una encargada de detectar si una cadena de + * texto es un heterograma, un isograma o un pangrama. + * - Debes buscar la definición de cada uno de estos términos. + */ +//Es una palabra o frase que no contiene ninguna letra repetida.1 + +function heterograma(palabra) { + var abecedario = "abcdefghijklmnñopqrstuvwxyz"; + var palabra = palabra.toLowerCase(); + var heterograma = true; + for (var i = 0; i < abecedario.length; i++) { + var contador = 0; + for (var j = 0; j < palabra.length; j++) { + if (abecedario[i] == palabra[j]) { + contador++; + } + } + if (contador > 1) { + heterograma = false; + } + } + if (heterograma) { + console.log("La palabra " + palabra + " es un heterograma"); + } else { + console.log("La palabra " + palabra + " no es un heterograma"); + } +} + +heterograma("murcielago"); + +function esIsograma(cadena) { + cadena = cadena.toLowerCase(); + let contador = {}; + for (let i = 0; i < cadena.length; i++) { + let letra = cadena[i]; + + if (contador[letra]) { + return false; + } + contador[letra] = true; + } + + return true; +} + +esIsograma("acondicionar") + +function esPangrama(cadena) { + // Convertir la cadena a minúsculas para hacer la comparación de caracteres más fácil + cadena = cadena.toLowerCase(); + // Crear un objeto para llevar la cuenta de la cantidad de veces que aparece cada letra en la cadena + let contador = {}; + // Recorrer cada letra de la cadena + for (let i = 0; i < cadena.length; i++) { + let letra = cadena[i]; + // Si la letra es una letra del alfabeto, agregarla al objeto contador + if (/[a-z]/.test(letra)) { + contador[letra] = true; + } + } + // Si el objeto contador tiene 26 propiedades (una para cada letra del alfabeto), entonces la cadena es un pangrama + return Object.keys(contador).length === 26; +} + + + +esPangrama(" Benjamín pidió una bebida de kiwi y fresa. Noé, sin vergüenza, la más exquisita champaña del menú.") \ No newline at end of file From 3aab8bfcbbd49012c9d791ffcc07de58124a9bcc Mon Sep 17 00:00:00 2001 From: Reddmar Quevedo Date: Fri, 28 Apr 2023 18:58:04 -0500 Subject: [PATCH 49/96] Reto #0 - Python MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reto #0 - Python, creación de un programa que muestra por consola los numeros del 1 al 100, pero al cumplir ciertas condiciones muestre "fizz", "buzz", "fizzbuzz". --- .../python/akaidmaru.py" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/akaidmaru.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/akaidmaru.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/akaidmaru.py" new file mode 100644 index 0000000000..58968fd224 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/akaidmaru.py" @@ -0,0 +1,24 @@ +''' + * Escribe un programa que muestre por consola (con un print) los + * números de 1 a 100 (ambos incluidos y con un salto de línea entre + * cada impresión), sustituyendo los siguientes: + * - Múltiplos de 3 por la palabra "fizz". + * - Múltiplos de 5 por la palabra "buzz". + * - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz". +''' + + +def fizzbuzz(): + for num in range(1, 101): + if num % 3 == 0 and num % 5 == 0: + print('FizzBuzz\n') + elif num % 3 == 0: + print('Fizz\n') + elif num % 5 == 0: + print('Buzz\n') + else: + print(f'{num}\n') + + +if __name__ == "__main__": + fizzbuzz() From a9714a24cccfee1703e81a38e0fcd2db979045f7 Mon Sep 17 00:00:00 2001 From: Axel_IR <105371667+AiR94@users.noreply.github.com> Date: Fri, 28 Apr 2023 20:54:16 -0600 Subject: [PATCH 50/96] Add files via upload My python solution --- .../python/Air94..py" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/Air94..py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/Air94..py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/Air94..py" new file mode 100644 index 0000000000..74a5d8be33 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/Air94..py" @@ -0,0 +1,15 @@ + +def analyze(n): + if i%5 == 0 and i%3==0: + print("\nfizzbuzz") + elif i%5 == 0: + print("\nbuzz") + elif i%3==0: + print("\nfizz") + else: + print("\n", i) + + +for i in range(1, 101): + analyze(i) + From 13988ac9339886bbefcf304e38bb2fd6af613573 Mon Sep 17 00:00:00 2001 From: Axel_IR <105371667+AiR94@users.noreply.github.com> Date: Fri, 28 Apr 2023 21:04:43 -0600 Subject: [PATCH 51/96] Delete Air94..py --- .../python/Air94..py" | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/Air94..py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/Air94..py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/Air94..py" deleted file mode 100644 index 74a5d8be33..0000000000 --- "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/Air94..py" +++ /dev/null @@ -1,15 +0,0 @@ - -def analyze(n): - if i%5 == 0 and i%3==0: - print("\nfizzbuzz") - elif i%5 == 0: - print("\nbuzz") - elif i%3==0: - print("\nfizz") - else: - print("\n", i) - - -for i in range(1, 101): - analyze(i) - From 13e93d07d6946f9bbba42fc027e695e484b486ad Mon Sep 17 00:00:00 2001 From: Axel_IR <105371667+AiR94@users.noreply.github.com> Date: Fri, 28 Apr 2023 21:05:39 -0600 Subject: [PATCH 52/96] Reto #0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mi solución del reto #0 --- .../python/Air94.py" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/Air94.py" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/Air94.py" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/Air94.py" new file mode 100644 index 0000000000..74a5d8be33 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/python/Air94.py" @@ -0,0 +1,15 @@ + +def analyze(n): + if i%5 == 0 and i%3==0: + print("\nfizzbuzz") + elif i%5 == 0: + print("\nbuzz") + elif i%3==0: + print("\nfizz") + else: + print("\n", i) + + +for i in range(1, 101): + analyze(i) + From c1ff02a2c615d6e2bc3d6a0aa55c7852a6241187 Mon Sep 17 00:00:00 2001 From: "Sergio Flores Ledezma (zerch)" Date: Fri, 28 Apr 2023 23:22:27 -0400 Subject: [PATCH 53/96] reto #2 Typescript --- .../typescript/zerchito.ts | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/typescript/zerchito.ts diff --git a/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/typescript/zerchito.ts b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/typescript/zerchito.ts new file mode 100644 index 0000000000..b83e9e544e --- /dev/null +++ b/Retos/Reto #2 - EL PARTIDO DE TENIS [Media]/typescript/zerchito.ts @@ -0,0 +1,53 @@ +/* + * Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado. + * El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien + * gane cada punto del juego. + * + * - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja. + * - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente: + * 15 - Love + * 30 - Love + * 30 - 15 + * 30 - 30 + * 40 - 30 + * Deuce + * Ventaja P1 + * Ha ganado el P1 + * - Si quieres, puedes controlar errores en la entrada de datos. + * - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos. + */ + +function resumeMatch(matchPlays:string[]): void { + const players = { + P1: 0, + P2: 0 + } + matchPlays.forEach(play => { + players[play]++; + // a partir de 3 puntos los empates son deuce + if (players.P1 < 3 && players.P2 < 3 && !(players.P1 + players.P2 === 6) ) { + console.log(`${transformScore(players.P1)} - ${transformScore(players.P2)}`); + } else{ + if (players.P1 === players.P2) { + console.log('Deuce'); + } + if (Math.abs(players.P1 - players.P2) === 1){ + console.log(`Ventaja ${play}`); + } else { + console.log(`Ha ganado el ${play}`); + } + } + }) +} + +function transformScore (score: number): string { + switch(score){ + case 0: return 'Love'; + case 1: return '15'; + case 2: return '30'; + case 3: return '40'; + default: return `${score}`; + } +} + +resumeMatch(['P1', 'P1', 'P2', 'P2', 'P1', 'P2', 'P1', 'P1']); \ No newline at end of file From b50dfea60b8482beed1f9b1df759b7f626ef9129 Mon Sep 17 00:00:00 2001 From: Reddmar Quevedo Date: Fri, 28 Apr 2023 22:43:59 -0500 Subject: [PATCH 54/96] Reto #1 - Python Conversor de lenguaje natural a lenguaje l33t. --- .../python/akaidmaru.py" | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/akaidmaru.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/akaidmaru.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/akaidmaru.py" new file mode 100644 index 0000000000..7a55fa3fbe --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/akaidmaru.py" @@ -0,0 +1,51 @@ +''' +* Escribe un programa que reciba un texto y transforme lenguaje natural a +* "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje +* se caracteriza por sustituir caracteres alfanuméricos. +* - Utiliza esta tabla(https: // www.gamehouse.com/blog/leet-speak-cheat-sheet/) +* con el alfabeto y los números en "leet". +* (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") +''' + +leet_dir = { + 'a': '4', + 'b': 'I3', + 'c': '[', + 'd': ')', + 'e': '3', + 'f': '|=', + 'g': '&', + 'h': '#', + 'i': '1', + 'j': ',_|', + 'k': '>|', + 'l': '£', + 'm': '|\/|', + 'n': '^/', + 'o': '0', + 'p': '|*', + 'q': '(_,)', + 'r': 'I2', + 's': '5', + 't': '7', + 'u': '(_)', + 'v': '\/', + 'w': '\/\/', + 'x': '><', + 'y': 'j', + 'z': '2', +} + +def lenguaje_hacker(): + text = input('Please, input your Text to convert to l33t code:\n>').lower() + leet_text = '' + + for letter in text: + if letter in leet_dir: + leet_text += leet_dir[letter] + else: + leet_text += letter + return print(leet_text) + + +lenguaje_hacker() \ No newline at end of file From 676488d60dfee28fa69a700e24ea56961cbc4042 Mon Sep 17 00:00:00 2001 From: Cristian Arias Mejuto Date: Sat, 29 Apr 2023 06:22:19 +0200 Subject: [PATCH 55/96] Iniciado reto 16 --- Retos/Reto #17/dart/titoworlddev.dart | 34 +++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Retos/Reto #17/dart/titoworlddev.dart diff --git a/Retos/Reto #17/dart/titoworlddev.dart b/Retos/Reto #17/dart/titoworlddev.dart new file mode 100644 index 0000000000..b30268b2bc --- /dev/null +++ b/Retos/Reto #17/dart/titoworlddev.dart @@ -0,0 +1,34 @@ +/* + * ¡Estoy de celebración! He publicado mi primer libro: + * "Git y GitHub desde cero" + * - Papel: mouredev.com/libro-git + * - eBook: mouredev.com/ebook-git + * + * ¿Sabías que puedes leer información de Git y GitHub desde la gran + * mayoría de lenguajes de programación? + * + * Crea un programa que lea los últimos 10 commits de este repositorio y muestre: + * - Hash + * - Autor + * - Mensaje + * - Fecha y hora + * + * Ejemplo de salida: + * Commit 1 (el más reciente) | 12345A | MoureDev | Este es un commit | 24/04/2023 21:00 + * + * Se permite utilizar librerías que nos faciliten esta tarea. + * + */ + +import 'package:http/http.dart' as http; +import 'dart:convert'; + +const URL = 'https://api.github.com'; +const USER = 'mouredev'; +const REPO = 'retos-programacion-2023'; + +void main() async { + print(await http + .get(Uri.parse('$URL/repos/$USER/$REPO/commits?per_page=10')) + .then((res) => jsonDecode(res.body))); +} From a6bd016c3b29d1208dda84d2bd6b8b79995729ae Mon Sep 17 00:00:00 2001 From: ManuRGDev Date: Sat, 29 Apr 2023 12:14:00 +0200 Subject: [PATCH 56/96] feat: Reto mouredev#17 - Typescript --- .../typescript/manurgdev.ts" | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/manurgdev.ts" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/manurgdev.ts" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/manurgdev.ts" new file mode 100644 index 0000000000..5e958ec2d5 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/manurgdev.ts" @@ -0,0 +1,125 @@ +const getLastCommits = async (params: getLastCommitsParams = {}) => { + const { repositoryName, numberOfCommits } = { repositoryName: 'mouredev/retos-programacion-2023', numberOfCommits: 10, ...params }; + const url = `https://api.github.com/repos/${repositoryName}/commits?per_page=${numberOfCommits}`; + let commitsApiData: GithubApiCommit[] = await fetch( + url, + { + headers: { 'Accept': 'application/vnd.github.v3+json' }, + method: 'GET' + } + ) + .then(response => response.json()) + .catch((error: Error) => console.log(error)); + const commits: CommitsInfo[] = commitsApiData.map(commitInfo => { + return { + hash: commitInfo.commit.tree.sha, + author: commitInfo.commit.author.name, + message: commitInfo.commit.message, + date: new Date(commitInfo.commit.author.date).toLocaleString() + } + }); + + printCommitsInfo(commits); +} + +const printCommitsInfo = (commits: CommitsInfo[]) => { + commits.forEach((commit, index) => { + console.log(`Commit ${index + 1} | ${commit.hash} | ${commit.author} | ${commit.message} | ${commit.date}`); + console.log('-------------------------------'); + }); +} + +getLastCommits(); + + +/** Types */ + +export type CommitsInfo = { + hash: string, + author: string, + message: string, + date: string +}; + +export type getLastCommitsParams = { + repositoryName?: string, + numberOfCommits?: number +}; + +/** START Types extracted from QuickType */ +export type GithubApiCommit = { + sha: string; + node_id: string; + commit: Commit; + url: string; + html_url: string; + comments_url: string; + author: GithubAuthor | null; + committer: GithubAuthor | null; + parents: Parent[]; +} + +export type GithubAuthor = { + login: string; + id: number; + node_id: string; + avatar_url: string; + gravatar_id: string; + url: string; + html_url: string; + followers_url: string; + following_url: string; + gists_url: string; + starred_url: string; + subscriptions_url: string; + organizations_url: string; + repos_url: string; + events_url: string; + received_events_url: string; + type: Type; + site_admin: boolean; +} + +export enum Type { + User = "User", +} + +export type Commit = { + author: CommitAuthor; + committer: CommitAuthor; + message: string; + tree: Tree; + url: string; + comment_count: number; + verification: Verification; +} + +export type CommitAuthor = { + name: string; + email: string; + date: Date; +} + +export type Tree = { + sha: string; + url: string; +} + +export type Verification = { + verified: boolean; + reason: Reason; + signature: null | string; + payload: null | string; +} + +export enum Reason { + Unsigned = "unsigned", + Valid = "valid", +} + +export type Parent = { + sha: string; + url: string; + html_url: string; +} +/** END Types extracted from QuickType */ From 5589e5044df4906435550f567131ef791478b298 Mon Sep 17 00:00:00 2001 From: ManuRGDev Date: Sat, 29 Apr 2023 12:31:57 +0200 Subject: [PATCH 57/96] style: remove useless export from types --- .../typescript/manurgdev.ts" | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/manurgdev.ts" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/manurgdev.ts" index 5e958ec2d5..75778acd7e 100644 --- "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/manurgdev.ts" +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/manurgdev.ts" @@ -34,20 +34,20 @@ getLastCommits(); /** Types */ -export type CommitsInfo = { +type CommitsInfo = { hash: string, author: string, message: string, date: string }; -export type getLastCommitsParams = { +type getLastCommitsParams = { repositoryName?: string, numberOfCommits?: number }; /** START Types extracted from QuickType */ -export type GithubApiCommit = { +type GithubApiCommit = { sha: string; node_id: string; commit: Commit; @@ -59,7 +59,7 @@ export type GithubApiCommit = { parents: Parent[]; } -export type GithubAuthor = { +type GithubAuthor = { login: string; id: number; node_id: string; @@ -80,11 +80,11 @@ export type GithubAuthor = { site_admin: boolean; } -export enum Type { +enum Type { User = "User", } -export type Commit = { +type Commit = { author: CommitAuthor; committer: CommitAuthor; message: string; @@ -94,30 +94,30 @@ export type Commit = { verification: Verification; } -export type CommitAuthor = { +type CommitAuthor = { name: string; email: string; date: Date; } -export type Tree = { +type Tree = { sha: string; url: string; } -export type Verification = { +type Verification = { verified: boolean; reason: Reason; signature: null | string; payload: null | string; } -export enum Reason { +enum Reason { Unsigned = "unsigned", Valid = "valid", } -export type Parent = { +type Parent = { sha: string; url: string; html_url: string; From d821dc3817c2dfa41e9e28b4ce14171ae6a34404 Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Sat, 29 Apr 2023 11:31:45 -0500 Subject: [PATCH 58/96] Reto #4 - Python --- .../python/sublian.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/sublian.py diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/sublian.py b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/sublian.py new file mode 100644 index 0000000000..e1d2db4bfd --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/python/sublian.py @@ -0,0 +1,39 @@ +""" +Reto #4: PRIMO, FIBONACCI Y PAR + Dificultad: Media | Publicación: 23/01/23 | Corrección: 30/01/23 + * Escribe un programa que, dado un número, compruebe y muestre si es primo, fibonacci y par. + * Ejemplos: + * - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" + * - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" +""" +import math + +def is_perfect_square(number): + sqrt = int(math.sqrt(number)) + return sqrt*sqrt==number + +def check_prime_fibonacci_pair(number): + + result =f"{number}: " + #primo + if number > 1: + for index in range(2,number): + if number%index==0: + result +="No es primo," + break + else: + result +="Es primo," + else: + result +="No es primo," + + #fibonacci + result += " Es Fibonacci" if number>0 and(is_perfect_square(5*number*number+4) or is_perfect_square(5*number*number-4)) else " No es Fibonacci" + + #par + result += ", es par!" if number %2 ==0 else ", es impar!" + print(result) + +if __name__ == '__main__': + + value= int(input("Ingrese valor a evaluar: ")) + check_prime_fibonacci_pair(value) \ No newline at end of file From aff6e987ddd55a20e1a464fd7a5e2132cf070f32 Mon Sep 17 00:00:00 2001 From: Cristian Arias Mejuto Date: Sat, 29 Apr 2023 18:36:04 +0200 Subject: [PATCH 59/96] Finalizado Reto #17 --- Retos/Reto #17/dart/titoworlddev.dart | 37 +++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/Retos/Reto #17/dart/titoworlddev.dart b/Retos/Reto #17/dart/titoworlddev.dart index b30268b2bc..2e607d1810 100644 --- a/Retos/Reto #17/dart/titoworlddev.dart +++ b/Retos/Reto #17/dart/titoworlddev.dart @@ -20,15 +20,42 @@ * */ -import 'package:http/http.dart' as http; +// import 'package:http/http.dart' as http; +import 'dart:io'; import 'dart:convert'; const URL = 'https://api.github.com'; const USER = 'mouredev'; const REPO = 'retos-programacion-2023'; -void main() async { - print(await http - .get(Uri.parse('$URL/repos/$USER/$REPO/commits?per_page=10')) - .then((res) => jsonDecode(res.body))); +void main() { + printCommits(10); +} + +void printCommits(int commitsLength) async { + // final data = await http + // .get(Uri.parse('$URL/repos/$USER/$REPO/commits')) + // .then((res) => jsonDecode(res.body)); + + /* Aunque es mas facil con http, dependiendo de como y donde lo ejecutes se + puede hacer la peticion con dart:io ya que http necesita + un proyecto de dart para instalar las dependencias y poder usarlas + pero dart:io no lo necesita */ + final data = await HttpClient() + .getUrl(Uri.parse('$URL/repos/$USER/$REPO/commits')) + .then((req) => req.close()) + .then((res) => res.transform(utf8.decoder).join()) + .then((res) => jsonDecode(res)); + + for (int i = 1; i <= commitsLength; i++) { + final hash = data[i]['sha'].substring(0, 7).toUpperCase(); + final commit = data[i]['commit']; + final name = commit['author']['name']; + final message = commit['message']; + final date = DateTime.parse(commit['author']['date']); + final dateFormated = + '${date.day}/${date.month}/${date.year} ${date.hour}:${date.minute}'; + + print('Commit $i | $hash | $name | $message | $dateFormated\n\n'); + } } From a836bbe9f58368a6f440f6fb4d2a2bed720658a4 Mon Sep 17 00:00:00 2001 From: omgslinux Date: Sat, 29 Apr 2023 20:58:49 +0200 Subject: [PATCH 60/96] gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..43aa6e48cc --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.vscode/launch.json +.vscode/settings.json From bd626329aa8b03a6f1a1f2ccd504afcbd84cb925 Mon Sep 17 00:00:00 2001 From: omgslinux Date: Sat, 29 Apr 2023 21:36:07 +0200 Subject: [PATCH 61/96] Reto #17 - PHP --- .../php/omgslinux.php" | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/omgslinux.php" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/omgslinux.php" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/omgslinux.php" new file mode 100644 index 0000000000..b8e2662109 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/php/omgslinux.php" @@ -0,0 +1,120 @@ +_repo; + } + + public function setRepo($url): self + { + $this->_repo = $url; + + return $this; + } + + private function getCommitURL(): ?string + { + if (null!=$this->getRepo()) { + return $this->getRepo() . '/commits'; + } + + return null; + } + + public function getCommits(int $number=10): array + { + $headerItems = [ + 'Content-type:' => 'application/json', + 'Accept:' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', + 'User-Agent:' => 'PHP', + ]; + $header = ""; + foreach ($headerItems as $item => $value) { + $header .= "$item $value\n"; + } + $options = [ + "http" => [ + 'method' => 'GET', + 'header' => $header + ] + ]; + + $context = stream_context_create($options); + $data = []; + if (null!=$this->getCommitURL()) { + $url = $this->getCommitURL() . '?per_page=' . $number; + $this->_data = $data = json_decode(file_get_contents($url, false, $context), true); + } + + return $data; + } + + public function getCommitAuthor($commit) + { + return $commit['commit']['author']['name']; + } + + public function getCommitDate($commit): string + { + $date = new DateTime($commit['commit']['author']['date']); + + return $date->format('d/m/Y H:i'); + } + + public function getCommitHash($commit) + { + return substr($commit['sha'], 0, 7); + } + + public function getCommitMessage($commit) + { + return str_replace("\n", '', $commit['commit']['message']); + } + +} + +$info = new gitInfo(); +$commits = $info + ->setRepo('https://api.github.com/repos/mouredev/retos-programacion-2023') + ->getCommits(10); + +$count = 0; +foreach ($commits as $commit) { + $count++; + printf( + "Commit {%d} | %s | %s | %s | %s\n", + $count, + $info->getCommitHash($commit), + $info->getCommitAuthor($commit), + $info->getCommitMessage($commit), + $info->getCommitDate($commit) + ); + +} + \ No newline at end of file From 441babfad5716686acc75bb5bf82a2178cd2bdcb Mon Sep 17 00:00:00 2001 From: omgslinux Date: Sat, 29 Apr 2023 22:16:50 +0200 Subject: [PATCH 62/96] gitignore --- .gitignore | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 43aa6e48cc..0000000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.vscode/launch.json -.vscode/settings.json From eb53adc864ae1d179e7e164258428103407bb920 Mon Sep 17 00:00:00 2001 From: saurivane Date: Sat, 29 Apr 2023 23:33:55 +0200 Subject: [PATCH 63/96] Retos #3 - Python --- .../python/saurivane.py" | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/saurivane.py" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/saurivane.py" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/saurivane.py" new file mode 100644 index 0000000000..c22b8887f5 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/python/saurivane.py" @@ -0,0 +1,46 @@ +""" +/* + * Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. + * Podrás configurar generar contraseñas con los siguientes parámetros: + * - Longitud: Entre 8 y 16. + * - Con o sin letras mayúsculas. + * - Con o sin números. + * - Con o sin símbolos. + * (Pudiendo combinar todos estos parámetros entre ellos) + */ + """ + +import random +import string + +def contraseña(long, mayus, num, sim): + + contraseña = "" + azar = "abcdefghijklmnñopqrstuvwxyz" + + if mayus == "S": + azar = azar + "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ" + + if num == "S": + azar = azar + "0123456789" + + if sim == "S": + azar = azar + "ºª\\!|@·#$%&/()=?\'¿¡€^`[*+]¨´><;,:._-" + + if long == "A" or "8": + for i in range(0,8): + contraseña = contraseña + random.choice(azar) + elif long == "B" or "16": + for i in range(0,16): + contraseña = contraseña + random.choice(azar) + + return contraseña + +longitud = (input("Elige la longitud de la contraseña entre A)8 o B)16: ")) +mayusculas = input("Con mayusculas? S/N: ") +numeros = input("Con númros?S/N: ") +simbolos = input("Con símbolos?S/N: ") + +print(contraseña(longitud.upper(), mayusculas.upper(), numeros.upper(), simbolos.upper())) + + \ No newline at end of file From bb0c831a5e1fbe465d2c17b4de90b452858b3bd7 Mon Sep 17 00:00:00 2001 From: giovany osorio Date: Sat, 29 Apr 2023 20:19:50 -0500 Subject: [PATCH 64/96] Reto #10 javascript --- .../javascript/giovanyosorio.js | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Retos/Reto #10 - LA API [Media]/javascript/giovanyosorio.js diff --git a/Retos/Reto #10 - LA API [Media]/javascript/giovanyosorio.js b/Retos/Reto #10 - LA API [Media]/javascript/giovanyosorio.js new file mode 100644 index 0000000000..204fcbe3b3 --- /dev/null +++ b/Retos/Reto #10 - LA API [Media]/javascript/giovanyosorio.js @@ -0,0 +1,22 @@ +/* + * Llamar a una API es una de las tareas más comunes en programación. + * + * Implementa una llamada HTTP a una API (la que tú quieras) y muestra su + * resultado a través de la terminal. Por ejemplo: Pokémon, Marvel... + * + * Aquí tienes un listado de posibles APIs: + * https://github.com/public-apis/public-apis + */ + +//API CORONAVIRUS +//https://coronavirus.m.pipedream.net/ + + +fetch('https://coronavirus.m.pipedream.net/') + .then(response => response.json()) + .then(data => { + console.log(data); + }) + .catch(error => { + console.error(error); + }); \ No newline at end of file From ac8c05a52a2a0fe1f46128714fd40ca2533f2242 Mon Sep 17 00:00:00 2001 From: "Sergio Flores Ledezma (zerch)" Date: Sat, 29 Apr 2023 21:32:27 -0400 Subject: [PATCH 65/96] reto #3 Typescript --- .../typescript/zerchito.ts" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/typescript/zerchito.ts" diff --git "a/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/typescript/zerchito.ts" "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/typescript/zerchito.ts" new file mode 100644 index 0000000000..87e983a658 --- /dev/null +++ "b/Retos/Reto #3 - EL GENERADOR DE CONTRASE\303\221AS [Media]/typescript/zerchito.ts" @@ -0,0 +1,34 @@ +/* + * Escribe un programa que sea capaz de generar contraseñas de forma aleatoria. + * Podrás configurar generar contraseñas con los siguientes parámetros: + * - Longitud: Entre 8 y 16. + * - Con o sin letras mayúsculas. + * - Con o sin números. + * - Con o sin símbolos. + * (Pudiendo combinar todos estos parámetros entre ellos) + */ +const CHARACTERS_LIB = { + alphabet: "abcdefghijklmnopqrstuvwxyz", + numbers: "0123456789", + symbols: "&/\\^=?!@#$%*+.,:;|()[]{}<>-_" +} + +function generatePassword ( + numberOfCharacters: number, + enableUpperCase: boolean, + enableNumbers: boolean, + enableSimbols: boolean +) { + let password = ''; + let library = CHARACTERS_LIB.alphabet; + if(enableUpperCase) library += CHARACTERS_LIB.alphabet.toUpperCase(); + if(enableNumbers) library += CHARACTERS_LIB.numbers; + if(enableSimbols) library += CHARACTERS_LIB.symbols; + for(let number = 0; number < numberOfCharacters; number++){ + const random = Math.random() * library.length-1; + password = password + library.charAt(random); + } + return password; +} + +console.log(generatePassword(16, true, true, true)); From f633d5f0891fc3300bb1cc966faa6f9c0fe467b7 Mon Sep 17 00:00:00 2001 From: Jaen <116536708+jaennova@users.noreply.github.com> Date: Sat, 29 Apr 2023 21:51:02 -0600 Subject: [PATCH 66/96] Reto #7 Kotlin --- .../kotlin/jaennova.kt | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/kotlin/jaennova.kt diff --git a/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/kotlin/jaennova.kt b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/kotlin/jaennova.kt new file mode 100644 index 0000000000..52c332732e --- /dev/null +++ b/Retos/Reto #7 - EL SOMBRERO SELECCIONADOR [Media]/kotlin/jaennova.kt @@ -0,0 +1,38 @@ +fun main() { + val preguntas = arrayOf( + "¿Cuál es tu asignatura favorita?", + "¿Qué cualidad valoras más en una persona?", + "¿Qué lugar prefieres para estudiar?", + "¿Cuál es tu mayor miedo?", + "¿Qué cualidad te define mejor?" + ) + + val respuestas = arrayOf( + arrayOf("Astronomía", "Historia de la Magia", "Herbología", "Encantamientos"), + arrayOf("Valentía", "Astucia", "Lealtad", "Inteligencia"), + arrayOf("La biblioteca", "La sala común", "El invernadero", "El lago negro"), + arrayOf("Las arañas", "El fracaso", "El rechazo", "La oscuridad"), + arrayOf("Valentía", "Astucia", "Lealtad", "Inteligencia") + ) + + val casas = arrayOf("Gryffindor", "Slytherin", "Hufflepuff", "Ravenclaw") + val puntajes = IntArray(casas.size) + + for (i in preguntas.indices) { + println(preguntas[i]) + for (j in respuestas[i].indices) { + println("${j+1}. ${respuestas[i][j]}") + } + print("Respuesta: ") + val respuesta = readLine()?.toIntOrNull() ?: 0 + for (j in casas.indices) { + puntajes[j] += if (respuesta == j+1) 2 else 0 + puntajes[j] += if (respuesta == (j+1) % 4 + 1) 1 else 0 + puntajes[j] -= if (respuesta == (j+2) % 4 + 1) 1 else 0 + puntajes[j] -= if (respuesta == (j+3) % 4 + 1) 2 else 0 + } + } + + val casaGanadora = casas[puntajes.indices.maxByOrNull { puntajes[it] } ?: 0] + println("¡Felicidades! Has sido seleccionado para la casa de $casaGanadora.") +} From b59d5c0cdc8a2e29ee6c5d2a874127eb35e37342 Mon Sep 17 00:00:00 2001 From: abanoj Date: Sun, 30 Apr 2023 11:40:23 +0200 Subject: [PATCH 67/96] Reto #6 - Javascript --- .../javascript/abanoj.js | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/abanoj.js diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/abanoj.js b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/abanoj.js new file mode 100644 index 0000000000..b6b49c8795 --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/javascript/abanoj.js @@ -0,0 +1,44 @@ +/* + * Crea un programa que calcule quien gana más partidas al piedra, + * papel, tijera, lagarto, spock. + * - El resultado puede ser: "Player 1", "Player 2", "Tie" (empate) + * - La función recibe un listado que contiene pares, representando cada jugada. + * - El par puede contener combinaciones de "🗿" (piedra), "📄" (papel), + * "✂️" (tijera), "🦎" (lagarto) o "🖖" (spock). + * - Ejemplo. Entrada: [["🗿","✂️"], ["✂️","🗿"], ["📄","✂️"]]. Resultado: "Player 2". + * - Debes buscar información sobre cómo se juega con estas 5 posibilidades. + */ + +const retoSeis = games => { + const rules = { + "✂️": ["📄", "🦎"], + "📄": ["🗿", "🖖"], + "🗿": ["🦎", "✂️"], + "🦎": ["🖖", "📄"], + "🖖": ["✂️", "🗿"], + }; + + let player1 = 0, player2 = 0; + + for (const game of games) { + let player1_game = game[0]; + let player2_game = game[1]; + + if (player1_game === player2_game) continue; + + if(rules[player1_game].includes(player2_game)){ + player1++; + } else if (rules[player2_game].includes(player1_game)){ + player2++; + } + } + + return (player1 === player2)? 'Tie': (player1 > player2)? 'Player 1': 'Player 2'; +}; + +console.log(retoSeis([["🗿", "✂️"]])); +console.log(retoSeis([["🗿", "🗿"]])); +console.log(retoSeis([["✂️", "🗿"]])); +console.log(retoSeis([["🗿","✂️"], ["✂️","🗿"], ["📄","✂️"]])); +console.log(retoSeis([["🗿", "🗿"], ["🗿", "🗿"], ["🗿", "🗿"], ["🗿", "🗿"]])); +console.log(retoSeis([["🖖", "🗿"], ["✂️", "📄"], ["🗿", "🗿"], ["🦎", "🖖"]])); \ No newline at end of file From 9314b102db29701ea6b8f228fdf8ad288cd65e3c Mon Sep 17 00:00:00 2001 From: pyRamsd Date: Sun, 30 Apr 2023 07:23:01 -0500 Subject: [PATCH 68/96] Reto #17 - python --- .../python/pyramsd.py" | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/pyramsd.py" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/pyramsd.py" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/pyramsd.py" new file mode 100644 index 0000000000..ed135a0632 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/pyramsd.py" @@ -0,0 +1,9 @@ +import git +import pathlib + +if __name__ == '__main__': + repo = git.Repo(pathlib.Path(__file__).parent.resolve(), search_parent_directories=True) + commits = list(repo.iter_commits(repo.active_branch, max_count=10)) + for i in range(len(commits)): + to_print = "Commit " + str(i + 1) + " : " + commits[i].hexsha + " \n Autor: " + commits[i].author.name + " \n Mensaje: " + commits[i].message.splitlines()[0] + " \n Fecha y hora: " + str(commits[i].committed_datetime) + "\n" + print(to_print) \ No newline at end of file From e3fc9e68537b1d36b8210885dbe04cd91a0118ba Mon Sep 17 00:00:00 2001 From: Sergio Ruiz <98649699+pyramsd@users.noreply.github.com> Date: Sun, 30 Apr 2023 07:29:47 -0500 Subject: [PATCH 69/96] Reto #17 - python --- .../python/pyramsd.py" | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/pyramsd.py" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/pyramsd.py" index ed135a0632..2f00278bfc 100644 --- "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/pyramsd.py" +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/pyramsd.py" @@ -6,4 +6,5 @@ commits = list(repo.iter_commits(repo.active_branch, max_count=10)) for i in range(len(commits)): to_print = "Commit " + str(i + 1) + " : " + commits[i].hexsha + " \n Autor: " + commits[i].author.name + " \n Mensaje: " + commits[i].message.splitlines()[0] + " \n Fecha y hora: " + str(commits[i].committed_datetime) + "\n" - print(to_print) \ No newline at end of file + print(to_print) + From 286a5c378c654efb1b0aeedf5ad76bd8077391d7 Mon Sep 17 00:00:00 2001 From: "Sergio Flores Ledezma (zerch)" Date: Sun, 30 Apr 2023 11:38:42 -0400 Subject: [PATCH 70/96] reto #4 Typescript --- .../typescript/zerchito.ts | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/typescript/zerchito.ts diff --git a/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/typescript/zerchito.ts b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/typescript/zerchito.ts new file mode 100644 index 0000000000..ab483f0b13 --- /dev/null +++ b/Retos/Reto #4 - PRIMO, FIBONACCI Y PAR [Media]/typescript/zerchito.ts @@ -0,0 +1,55 @@ +/* + * Escribe un programa que, dado un número, compruebe y muestre si es primo, fibonacci y par. + * Ejemplos: + * - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" + * - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" + */ +class NumberChecker { + + fibonacciNumbers: number[] = [1 , 1]; + + checkNummber(num: number) { + const primeCheck = this.#isPrime(num); + const fibonacciCheck = this.#isFibonacci(num); + const evenCheck = this.#isEven(num); + return `${num} ${primeCheck}, ${fibonacciCheck} y ${evenCheck}`; + } + + #isPrime(num: number): string{ + let primeCheck = true; + for (let div = 2; num<= Math.sqrt(num); div++) { + if(num%div === 0){ + primeCheck = false; + break; + } + } + return primeCheck ? 'es primo': 'no es primo'; + } + + #isFibonacci(num: number): string { + let lastIndex = this.fibonacciNumbers.length - 1; + let lastFibonacci = this.fibonacciNumbers[lastIndex]; + let fiboCheck = false; + if (this.fibonacciNumbers.includes(num)) { + fiboCheck = true; + } else if (num > lastFibonacci) { + while (num > lastFibonacci) { + const newFibonacci = lastFibonacci + this.fibonacciNumbers[lastIndex-1]; + lastFibonacci = newFibonacci; + this.fibonacciNumbers.push(newFibonacci); + lastIndex++; + fiboCheck = num === newFibonacci; + } + } + + return fiboCheck ? 'es fibonacci' : 'no es fibonacci'; + } + + #isEven(num: number): string { + return num % 2 ? 'es par' : 'es impar'; + } +} + +const checker = new NumberChecker(); +console.log(checker.checkNummber(2)) +console.log(checker.checkNummber(7)) \ No newline at end of file From 046112241cfee3709cd17ea2c3860fd979c0841d Mon Sep 17 00:00:00 2001 From: Cristian Arias Mejuto Date: Sun, 30 Apr 2023 19:35:46 +0200 Subject: [PATCH 71/96] Arreglada la ruta de la carpeta --- .../dart/titoworlddev.dart" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Retos/Reto #17/dart/titoworlddev.dart => "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/dart/titoworlddev.dart" (100%) diff --git a/Retos/Reto #17/dart/titoworlddev.dart "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/dart/titoworlddev.dart" similarity index 100% rename from Retos/Reto #17/dart/titoworlddev.dart rename to "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/dart/titoworlddev.dart" From b7dd5302fa6979374d13f3c6be3669bc6c094b6b Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Sun, 30 Apr 2023 11:48:17 -0700 Subject: [PATCH 72/96] reto #17 --- .../python/KevinED11.py" | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/KevinED11.py" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/KevinED11.py" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/KevinED11.py" new file mode 100644 index 0000000000..bd7cec3877 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/KevinED11.py" @@ -0,0 +1,58 @@ +import requests + + +from typing import Generator + + +def get_repo_commits(repo: str) -> str: + return f"https://api.github.com/repos/{repo}/commits" + + +def all_commits(repo_url: str) -> list[dict]: + try: + return requests.get(repo_url).json() + except requests.exceptions.RequestException as err: + print(err) + + +def format_commits(commits: list[dict]) -> Generator: + return (f"commit #{str(i+1)} | hash={str(commit['sha'])} | Author={commit['commit']['author']['name']} | Message={commit['commit']['message']} | Date={commit['commit']['author']['date']}" for i, commit in enumerate(commits)) + + +def commits_to_show(number: int = 10) -> int: + try: + return abs(int(number)) + except ValueError: + print(ValueError( + f"Invalid value for 'number': '{number}'. Please enter a valid integer.")) + + +def generate_commits(commits: Generator, number: int = 10, mode="DESC") -> list[str]: + mode = mode.upper() + commit_mode: tuple[str, str] = ("ASC", "DESC") + + try: + if mode not in commit_mode: + raise ValueError(f"PLace a valide mode: {commit_mode}") + except ValueError as err: + print(err) + + if mode == commit_mode[0]: + return [commit for commit in commits][:number] + + return [commit for commit in commits][-number:] + + +def main() -> None: + repo_to_use = get_repo_commits(repo="mouredev/retos-programacion-2023") + available_commits = all_commits(repo_url=repo_to_use) + formatted_commits = format_commits(commits=available_commits) + commits_number_to_show = commits_to_show(number="5") + + commits = generate_commits( + formatted_commits, commits_number_to_show, mode="asc") + print(commits) + + +if __name__ == "__main__": + main() From 84b47085d44a02ac84a5ea83a28c74bd2ed5ba46 Mon Sep 17 00:00:00 2001 From: guido2288 Date: Sun, 30 Apr 2023 21:13:31 -0300 Subject: [PATCH 73/96] Reto #0 - javascript --- .../javascript/guido2288.js" | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 "Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/guido2288.js" diff --git "a/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/guido2288.js" "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/guido2288.js" new file mode 100644 index 0000000000..68d7651b37 --- /dev/null +++ "b/Retos/Reto #0 - EL FAMOSO FIZZ BUZZ [F\303\241cil]/javascript/guido2288.js" @@ -0,0 +1,13 @@ +for (let i = 1; i <= 100; i++) { + + if (i % 3 === 0 && i % 5 === 0) { + console.log('fizzbuzz' + '\n') + } else if (i % 3 === 0 && i % 5 != 0) { + console.log('fizz' + '\n') + } else if (i % 3 != 0 && i % 5 === 0) { + console.log('buzz' + '\n') + } else { + console.log(i + '\n') + } + +} From 6ae3a5f24c02944a7de75f531cb3ebdb95cfd80d Mon Sep 17 00:00:00 2001 From: guido2288 Date: Sun, 30 Apr 2023 22:17:24 -0300 Subject: [PATCH 74/96] Reto #1 - javascript --- .../javascript/guido2288.js" | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/guido2288.js" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/guido2288.js" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/guido2288.js" new file mode 100644 index 0000000000..5f626545af --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/javascript/guido2288.js" @@ -0,0 +1,45 @@ +function leetLenguaje(word) { + + const leetWord = word.toLowerCase() + .replaceAll('1', 'L') + .replaceAll('2', 'R') + .replaceAll('3', 'E') + .replaceAll('4', 'A') + .replaceAll('5', 'S') + .replaceAll('6', 'b') + .replaceAll('7', 'T') + .replaceAll('8', 'B') + .replaceAll('9', 'g') + .replaceAll('0', 'o') + .replaceAll('a', '4') + .replaceAll('b', 'I3') + .replaceAll('c', '[') + .replaceAll('d', ')') + .replaceAll('e', '3') + .replaceAll('f', '|=') + .replaceAll('g', '&') + .replaceAll('h', '#') + .replaceAll('i', '1') + .replaceAll('j', ',_|') + .replaceAll('k', '>|') + .replaceAll('l', '1') + .replaceAll('m', '/\\/\\') + .replaceAll('n', '^/') + .replaceAll('o', '0') + .replaceAll('p', '|*') + .replaceAll('q', '(_,)') + .replaceAll('r', 'I2') + .replaceAll('s', '5') + .replaceAll('t', '7') + .replaceAll('u', '(_)') + .replaceAll('v', '\/') + .replaceAll('w', '\/\/') + .replaceAll('x', '><') + .replaceAll('y', 'j') + .replaceAll('z', '2') + + return leetWord; +}; + +console.log(leetLenguaje('Hello word!')) + From ceda8c0a9f6fcaf8c60dd91e0299c2dd2e3f5a8a Mon Sep 17 00:00:00 2001 From: "Sergio Flores Ledezma (zerch)" Date: Mon, 1 May 2023 00:09:16 -0400 Subject: [PATCH 75/96] reto #5 C# --- .../Reto #5 - HOLA MUNDO [F\303\241cil]/c#/zerchito.cs" | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c#/zerchito.cs" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c#/zerchito.cs" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c#/zerchito.cs" new file mode 100644 index 0000000000..b031db43de --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c#/zerchito.cs" @@ -0,0 +1,8 @@ +/* + * Escribe un !Hola Mundo! en todos los lenguajes de programación que puedas. + * Seguro que hay algún lenguaje que te llama la atención y nunca has utilizado, + * o quizás quieres dar tus primeros pasos... ¡Pues este es el momento! + * + * A ver quién se atreve con uno de esos lenguajes que no solemos ver por ahí... + */ +Console.WriteLine("Hello world"); \ No newline at end of file From 2652a98a3f59985104dd63eec76c888ea6cf97e6 Mon Sep 17 00:00:00 2001 From: "Sergio Flores Ledezma (zerch)" Date: Mon, 1 May 2023 00:52:58 -0400 Subject: [PATCH 76/96] reto #6 Typescript --- .../typescript/zerchito.ts | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/typescript/zerchito.ts diff --git a/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/typescript/zerchito.ts b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/typescript/zerchito.ts new file mode 100644 index 0000000000..8ce4965381 --- /dev/null +++ b/Retos/Reto #6 - PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK [Media]/typescript/zerchito.ts @@ -0,0 +1,40 @@ +/* + * Crea un programa que calcule quien gana más partidas al piedra, + * papel, tijera, lagarto, spock. + * - El resultado puede ser: "Player 1", "Player 2", "Tie" (empate) + * - La función recibe un listado que contiene pares, representando cada jugada. + * - El par puede contener combinaciones de "🗿" (piedra), "📄" (papel), + * "✂️" (tijera), "🦎" (lagarto) o "🖖" (spock). + * - Ejemplo. Entrada: [("🗿","✂️"), ("✂️","🗿"), ("📄","✂️")]. Resultado: "Player 2". + * - Debes buscar información sobre cómo se juega con estas 5 posibilidades. +*/ + +const RULES = { + '🗿': ['✂️', '🦎'], + '📄': ['🗿', '🖖'], + '✂️': ['📄', '🦎'], + '🦎': ['🖖', '📄'], + '🖖': ['✂️', '🗿'] +}; + +type PosiblePlays = '🗿' | '📄' | '✂️' | '🦎' | '🖖'; + +type PlayTuple = [PosiblePlays, PosiblePlays]; + +type ResultType = 'Player 2' | 'Player 1' | 'Tie'; + +function calcResult(plays: PlayTuple[]): ResultType { + let score1 = 0; + let score2 = 0; + plays.forEach(play=> { + if(RULES[play[0]].includes(play[1])) { + score1++; + } else if(play[0] !== play[1]){ + score2++; + } + }) + const player = score1 > score2 ? 1 : 2; + return score1 === score2 ? 'Tie' : `Player ${player}`; +} + +console.log(calcResult([["🗿","✂️"], ["✂️","🗿"], ["📄","✂️"]])); From 04195bb453789815c9576da31c56dea90762c319 Mon Sep 17 00:00:00 2001 From: EzeSandes Date: Mon, 1 May 2023 12:54:32 -0300 Subject: [PATCH 77/96] Reto #10 - JavaScript git commit -m Reto --- .../javascript/EzeSandes.js | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Retos/Reto #10 - LA API [Media]/javascript/EzeSandes.js diff --git a/Retos/Reto #10 - LA API [Media]/javascript/EzeSandes.js b/Retos/Reto #10 - LA API [Media]/javascript/EzeSandes.js new file mode 100644 index 0000000000..8d5d86a17a --- /dev/null +++ b/Retos/Reto #10 - LA API [Media]/javascript/EzeSandes.js @@ -0,0 +1,30 @@ +/* + * Llamar a una API es una de las tareas más comunes en programación. + * + * Implementa una llamada HTTP a una API (la que tú quieras) y muestra su + * resultado a través de la terminal. Por ejemplo: Pokémon, Marvel... + * + * Aquí tienes un listado de posibles APIs: + * https://github.com/public-apis/public-apis + */ + +const API_URL = 'https://v2.jokeapi.dev/joke/Programming'; + +async function fetchData(url, options = undefined) { + try { + const res = await fetch(url, options); + if (!res.ok) throw new Error('⛔ERROR RESPONSE DATA⛔'); + + return await res.json(); + } catch (error) { + console.log(error.message); + } +} + +fetchData(API_URL) + .then(data => { + if (data.error) throw new Error('⛔DATA ERROR⛔'); + + console.log(data); + }) + .catch(error => console.log(error.message)); From e1391cccd5a703770742937e556c3093401669d1 Mon Sep 17 00:00:00 2001 From: KevinED11 Date: Mon, 1 May 2023 09:39:24 -0700 Subject: [PATCH 78/96] reto #17 --- .../typescript/KevinED11.ts" | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/KevinED11.ts" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/KevinED11.ts" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/KevinED11.ts" new file mode 100644 index 0000000000..05e69729ce --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/typescript/KevinED11.ts" @@ -0,0 +1,81 @@ +import axios from "axios" + +interface DataCommit { + sha: string; + commit: { + author: { + name: string; + date: string; + }; + message: string; + }; +} + + +class GitHub { + private userName: string; + private repoName: string + private baseUrl: string + + constructor(userName: string, repoName: string) { + this.userName = userName + this.repoName = repoName + this.baseUrl = `https://api.github.com/repos/${this.userName}/${this.repoName}` + } + + async getCommits(): Promise{ + try { + const response = await axios.get(`${this.baseUrl}/commits`) + return response.data + } catch (err) { + console.error(err) + return [] + } + + } + + async formatCommits(showCommits: number) { + showCommits = Math.abs(showCommits) + const allCommits: DataCommit[] | [] = await this.getCommits() + const formattedCommits = allCommits.map((commit: DataCommit, indice: number) => { + return { + commit: indice + 1, + sha: commit.sha, + author: commit.commit.author.name, + date: commit.commit.author.date, + message: commit.commit.message.replace("\n", "") + + } + }) + + return formattedCommits.slice(0, showCommits) + } + + + get nameRepo(): string { + return this.repoName + } + + get userNameRepository(): string { + return this.userName + } + + + + +} + +const main = async (): Promise => { + const github = new GitHub("mouredev", "retos-programacion-2023") + const commits = await github.getCommits() + const commits2 = await github.formatCommits(-10) + console.log(commits2) + console.log(commits2.length) + console.log(github.nameRepo) + console.log(github.userNameRepository) + +} + + + +main() \ No newline at end of file From 37f13a47dcfc5f8ef47e755b9cccb661f06a14bb Mon Sep 17 00:00:00 2001 From: Leonardo Rodriguez Date: Mon, 1 May 2023 11:40:47 -0500 Subject: [PATCH 79/96] Reto #17 - Python --- .../python/Engleonardorm7.py" | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/Engleonardorm7.py" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/Engleonardorm7.py" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/Engleonardorm7.py" new file mode 100644 index 0000000000..bd38a96919 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/Engleonardorm7.py" @@ -0,0 +1,16 @@ +from github import Github + +# Access the repository +g = Github("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") +repo = g.get_repo("mouredev/retos-programacion-2023") + +# Get the last 10 commits +commits = repo.get_commits()[:10] + +# Display commit information +for i, commit in enumerate(commits): + sha = commit.sha[:7] + author = commit.commit.author.name + message = commit.commit.message + date = commit.commit.author.date.strftime("%d/%m/%Y %H:%M") + print(f"Commit {i+1} | {sha} | {author} | {message} | {date}") From 619097444aedf49aee21ef2c00634f4d9dafb789 Mon Sep 17 00:00:00 2001 From: Leonardo Rodriguez Date: Mon, 1 May 2023 11:41:59 -0500 Subject: [PATCH 80/96] Reto #17 - Python --- .../python/Engleonardorm7.py" | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/Engleonardorm7.py" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/Engleonardorm7.py" index bd38a96919..336727963b 100644 --- "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/Engleonardorm7.py" +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/Engleonardorm7.py" @@ -1,13 +1,10 @@ from github import Github -# Access the repository -g = Github("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") +g = Github("pon tu access token aqui...") repo = g.get_repo("mouredev/retos-programacion-2023") -# Get the last 10 commits commits = repo.get_commits()[:10] -# Display commit information for i, commit in enumerate(commits): sha = commit.sha[:7] author = commit.commit.author.name From 494f72a5a3503fefac9b8462824477d00da63a22 Mon Sep 17 00:00:00 2001 From: mjordanaam Date: Mon, 1 May 2023 21:00:06 +0200 Subject: [PATCH 81/96] Reto #5 - Bash, C++, C, Dart, Java, JavaScript, PHP, Python, TypeScript --- .../bash/mjordanaam.sh" | 10 ++++++++++ .../c++/mjordanaam.cpp" | 16 ++++++++++++++++ .../c/mjordanaam.c" | 14 ++++++++++++++ .../dart/mjordanaam.dart" | 3 +++ .../java/mjordanaam.java" | 13 +++++++++++++ .../javascript/mjordanaam.js" | 8 ++++++++ .../php/mjordanaam.php" | 10 ++++++++++ .../python/mjordanaam.py" | 10 ++++++++++ .../typescript/mjordanaam.ts" | 8 ++++++++ 9 files changed, 92 insertions(+) create mode 100755 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/bash/mjordanaam.sh" create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c++/mjordanaam.cpp" create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c/mjordanaam.c" create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/dart/mjordanaam.dart" create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/java/mjordanaam.java" create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/mjordanaam.js" create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/php/mjordanaam.php" create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/mjordanaam.py" create mode 100644 "Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/typescript/mjordanaam.ts" diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/bash/mjordanaam.sh" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/bash/mjordanaam.sh" new file mode 100755 index 0000000000..9ef72daac2 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/bash/mjordanaam.sh" @@ -0,0 +1,10 @@ +#!/bin/bash +# /* +# * Escribe un !Hola Mundo! en todos los lenguajes de programación que puedas. +# * Seguro que hay algún lenguaje que te llama la atención y nunca has utilizado, +# * o quizás quieres dar tus primeros pasos... ¡Pues este es el momento! +# * +# * A ver quién se atreve con uno de esos lenguajes que no solemos ver por ahí... +# */ +echo "Hello World!" + diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c++/mjordanaam.cpp" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c++/mjordanaam.cpp" new file mode 100644 index 0000000000..c516c026a5 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c++/mjordanaam.cpp" @@ -0,0 +1,16 @@ +/* + * Escribe un !Hola Mundo! en todos los lenguajes de programación que puedas. + * Seguro que hay algún lenguaje que te llama la atención y nunca has utilizado, + * o quizás quieres dar tus primeros pasos... ¡Pues este es el momento! + * + * A ver quién se atreve con uno de esos lenguajes que no solemos ver por ahí... + */ +#include + +using namespace std; + +int main() { + cout << "Hello World!" << endl; + + return 0; +} \ No newline at end of file diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c/mjordanaam.c" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c/mjordanaam.c" new file mode 100644 index 0000000000..d900e4d5c5 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/c/mjordanaam.c" @@ -0,0 +1,14 @@ +/* + * Escribe un !Hola Mundo! en todos los lenguajes de programación que puedas. + * Seguro que hay algún lenguaje que te llama la atención y nunca has utilizado, + * o quizás quieres dar tus primeros pasos... ¡Pues este es el momento! + * + * A ver quién se atreve con uno de esos lenguajes que no solemos ver por ahí... + */ +#include + +int main() { + printf("Hello World!"); + + return 0; +} \ No newline at end of file diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/dart/mjordanaam.dart" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/dart/mjordanaam.dart" new file mode 100644 index 0000000000..ea4f4dced8 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/dart/mjordanaam.dart" @@ -0,0 +1,3 @@ +void main(){ + print("Hello World!"); +} \ No newline at end of file diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/java/mjordanaam.java" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/java/mjordanaam.java" new file mode 100644 index 0000000000..7a36042452 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/java/mjordanaam.java" @@ -0,0 +1,13 @@ +/* + * Escribe un !Hola Mundo! en todos los lenguajes de programación que puedas. + * Seguro que hay algún lenguaje que te llama la atención y nunca has utilizado, + * o quizás quieres dar tus primeros pasos... ¡Pues este es el momento! + * + * A ver quién se atreve con uno de esos lenguajes que no solemos ver por ahí... + */ + +public class mjordanaam { + public static void main(String[] args) { + System.out.println("Hello World!"); + } +} diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/mjordanaam.js" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/mjordanaam.js" new file mode 100644 index 0000000000..46ad21466e --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/javascript/mjordanaam.js" @@ -0,0 +1,8 @@ +/* + * Escribe un !Hola Mundo! en todos los lenguajes de programación que puedas. + * Seguro que hay algún lenguaje que te llama la atención y nunca has utilizado, + * o quizás quieres dar tus primeros pasos... ¡Pues este es el momento! + * + * A ver quién se atreve con uno de esos lenguajes que no solemos ver por ahí... + */ +console.log("Hello World!"); \ No newline at end of file diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/php/mjordanaam.php" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/php/mjordanaam.php" new file mode 100644 index 0000000000..e7f4922b93 --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/php/mjordanaam.php" @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/mjordanaam.py" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/mjordanaam.py" new file mode 100644 index 0000000000..d7c433941c --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/python/mjordanaam.py" @@ -0,0 +1,10 @@ +""" +/* + * Escribe un !Hola Mundo! en todos los lenguajes de programación que puedas. + * Seguro que hay algún lenguaje que te llama la atención y nunca has utilizado, + * o quizás quieres dar tus primeros pasos... ¡Pues este es el momento! + * + * A ver quién se atreve con uno de esos lenguajes que no solemos ver por ahí... + */ +""" +print("Hello World!") \ No newline at end of file diff --git "a/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/typescript/mjordanaam.ts" "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/typescript/mjordanaam.ts" new file mode 100644 index 0000000000..46ad21466e --- /dev/null +++ "b/Retos/Reto #5 - HOLA MUNDO [F\303\241cil]/typescript/mjordanaam.ts" @@ -0,0 +1,8 @@ +/* + * Escribe un !Hola Mundo! en todos los lenguajes de programación que puedas. + * Seguro que hay algún lenguaje que te llama la atención y nunca has utilizado, + * o quizás quieres dar tus primeros pasos... ¡Pues este es el momento! + * + * A ver quién se atreve con uno de esos lenguajes que no solemos ver por ahí... + */ +console.log("Hello World!"); \ No newline at end of file From d8828e960537ac2b270057411f9de1f39a787b78 Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 1 May 2023 21:07:31 +0200 Subject: [PATCH 82/96] =?UTF-8?q?Correcci=C3=B3n=20Reto=20#17?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++-- .../python/mouredev.py" | 7 ++++++ .../ejercicio.md" | 23 +++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/mouredev.py" create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/ejercicio.md" diff --git a/README.md b/README.md index cc65befe06..fde3bb6659 100644 --- a/README.md +++ b/README.md @@ -34,9 +34,10 @@ Aquí encontrarás el listado de retos, su fecha de publicación, dificultad y e * **#14** - 03/04/23 | Fácil | [`OCTAL Y HEXADECIMAL`](./Retos/Reto%20%2314%20-%20OCTAL%20Y%20HEXADECIMAL%20%5BFácil%5D/ejercicio.md) | Correcciones: [[EN VÍDEO](https://youtu.be/T8qY1nUCHkM)] [[MI SOLUCIÓN](./Retos/Reto%20%2314%20-%20OCTAL%20Y%20HEXADECIMAL%20%5BFácil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2314%20-%20OCTAL%20Y%20HEXADECIMAL%20%5BFácil%5D/)] * **#15** - 10/04/23 | Fácil | [`AUREBESH`](./Retos/Reto%20%2315%20-%20AUREBESH%20%5BFácil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2315%20-%20AUREBESH%20%5BFácil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2315%20-%20AUREBESH%20%5BFácil%5D/)] * **#16** - 17/04/23 | Media | [`LA ESCALERA`](./Retos/Reto%20%2316%20-%20LA%20ESCALERA%20%5BMedia%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2316%20-%20LA%20ESCALERA%20%5BMedia%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2316%20-%20LA%20ESCALERA%20%5BMedia%5D/)] -* **#17** - 24/04/23 | Difícil | [`GIT Y GITHUB`](./Retos/Reto%20%2317%20-%20GIT%20Y%20GITHUB%20%5BDifícil%5D/ejercicio.md) | Último reto publicado +* **#17** - 24/04/23 | Difícil | [`GIT Y GITHUB`](./Retos/Reto%20%2317%20-%20GIT%20Y%20GITHUB%20%5BDifícil%5D/ejercicio.md) | Correcciones: [[MI SOLUCIÓN](./Retos/Reto%20%2317%20-%20GIT%20Y%20GITHUB%20%5BDifícil%5D/python/mouredev.py)] [[COMUNIDAD](./Retos/Reto%20%2317%20-%20GIT%20Y%20GITHUB%20%5BDifícil%5D/)] +* **#18** - 01/05/23 | Difícil | [`WEB SCRAPING`](./Retos/Reto%20%2318%20-%20WEB%20SCRAPING%20%5BDifícil%5D/ejercicio.md) | Último reto publicado -> **Corrección y Publicación próximo reto - 01/05/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1100104369787109496) en [Twitch](https://twitch.tv/mouredev)** +> **Corrección y Publicación próximo reto - 11/05/23 | [🗓️ Horario evento corrección en directo](https://discord.gg/mouredev?event=1102500650471936050) en [Twitch](https://twitch.tv/mouredev)** *Puedes ejecutar el archivo [language_stats.py](./Retos/language_stats.py) para visualizar las estadísticas de uso de cada lenguaje.* diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/mouredev.py" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/mouredev.py" new file mode 100644 index 0000000000..7c04a72531 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/mouredev.py" @@ -0,0 +1,7 @@ +import git + +commit_counter = 1 + +for commit in list(git.Repo(".").iter_commits())[:10]: + print(f"Commit {commit_counter} | {commit.hexsha} | {commit.author.name} | {commit.message} | {commit.authored_datetime}".replace("\n", "")) + commit_counter += 1 \ No newline at end of file diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/ejercicio.md" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/ejercicio.md" new file mode 100644 index 0000000000..e702fb587a --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/ejercicio.md" @@ -0,0 +1,23 @@ +# Reto #18: Web scraping +#### Dificultad: Difícil | Publicación: 01/05/23 | Corrección: 11/05/23 + +## Enunciado + +``` +/* + * El día 128 del año celebramos en la comunidad el "Hola Mundo day" + * Vamos a hacer "web scraping" sobre su sitio web: https://holamundo.day + * + * Crea un programa que se conecte a la web del evento e imprima únicamente la agenda de eventos + * del día 8. Mostrando hora e información de cada uno. + * Ejemplo: "16:00 | Bienvenida" + * + * Se permite utilizar librerías que nos faciliten esta tarea. + * + */ +``` +#### Tienes toda la información extendida sobre los retos de programación semanales en **[retosdeprogramacion.com/semanales2023](https://retosdeprogramacion.com/semanales2023)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file From bca58b3d154ac5039c2bbabfff836ccc0b6e1745 Mon Sep 17 00:00:00 2001 From: Qv1ko Date: Mon, 1 May 2023 21:25:34 +0200 Subject: [PATCH 83/96] Reto #17 - Java --- .../java/Qv1ko.java" | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/java/Qv1ko.java" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/java/Qv1ko.java" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/java/Qv1ko.java" new file mode 100644 index 0000000000..057c807f6f --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/java/Qv1ko.java" @@ -0,0 +1,25 @@ +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.storage.file.FileRepositoryBuilder; +import org.ietf.jgss.GSSException; + +import java.io.File; +import java.io.IOException; + +public class Qv1ko { + + public static void main(String[] args) { + lastCommits(); + }// main + + private static void lastCommits() { + String repoPath = "."; + Git git = new Git(new FileRepositoryBuilder().setGitDir(new File(repoPath)).readEnvironment().findGitDir().build()); + int num = 1; + for (RevCommit commit : git.log().setMaxCount(10).call()) { + System.out.println("Commit " + num + " | " + commit.getName() + " | " + commit.getAuthorIdent().getName() + " | " + commit.getFullMessage() + " | " + commit.getAuthorIdent().getWhen()); + } + } + +}// class From 60a48f30f1cfb5b6d2f46686e743e6732354e196 Mon Sep 17 00:00:00 2001 From: Marius Date: Mon, 1 May 2023 21:34:22 +0200 Subject: [PATCH 84/96] El lenguaje Hacker --- .../python/MariusBD.py" | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/MariusBD.py" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/MariusBD.py" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/MariusBD.py" new file mode 100644 index 0000000000..48d719ea79 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/python/MariusBD.py" @@ -0,0 +1,35 @@ + + + +""" +/* + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + */ +""" + +def leet_translator(texto): + texto = texto.lower() + leet_dict = { + 'A':'4','B':'I3','C':'[','D':')','E':'3','F':'|=','G':'&','H':'#','I':'1','J':',_|','K':'>|','L':'1','M':'/\/\ ','N':'^/','O':'0', + 'P':'|*','Q':'(_,)','R':'I2','S':'5','T':'7','U':'(_)','V':'\/','W':'\/\/','X':'><', + 'Y':'j','Z':'2','0':'O','1':'I','2':'Z','3':'E','4':'A','5':'S','6':'b','7':'T','8':'B','9':'g'} + leet_traducido = "" + + for letra in texto: + if letra == ' ': + leet_traducido += letra + for clave,valor in leet_dict.items(): + if letra.lower() == clave.lower(): + leet_traducido += valor + + return(leet_traducido) + +print(leet_translator('El Lenguaje Hacker Del Programador')) + + + From 48f66f30421193dbbf10ac8890906d3fa2187372 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?r=3Dcos=284=CE=B8=29?= Date: Mon, 1 May 2023 14:41:31 -0500 Subject: [PATCH 85/96] Reto mouredev#16 -C++ --- .../c++/OlvadisHernandezLedesma.cpp | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 Retos/Reto #16 - LA ESCALERA [Media]/c++/OlvadisHernandezLedesma.cpp diff --git a/Retos/Reto #16 - LA ESCALERA [Media]/c++/OlvadisHernandezLedesma.cpp b/Retos/Reto #16 - LA ESCALERA [Media]/c++/OlvadisHernandezLedesma.cpp new file mode 100644 index 0000000000..c220799985 --- /dev/null +++ b/Retos/Reto #16 - LA ESCALERA [Media]/c++/OlvadisHernandezLedesma.cpp @@ -0,0 +1,85 @@ +#include +#include +#include +using std::string; +using std::cout; +using std::endl; +using std::setw; +using std::cin; + +void drawLadder(int n); +void ladderpositiv(int n); +void ladderNegativ(int n); + +int main() { + int escalon; + do { + cout << "Ingrese el numero de escalones: "; + cin >> escalon; + + if (cin.fail() || cin.eof()) { + break; + } + + drawLadder(escalon); + } while (escalon); + + return 0; +} + +void ladderNegativ(int n){ + n=n*-1; + string parte1="_", parte2="|_"; + for(int i=1; i<=n; i++){ + if(i==1) { + cout<=1; i--){ + if(i==n) { + for(int j=1; j<=i; j++){ + cout<<" "; + } + cout<0) { + ladderPositiv(n); + }else if(n<0){ + ladderNegativ(n); + }else{ + cout<<"__"< Date: Mon, 1 May 2023 14:17:03 -0600 Subject: [PATCH 86/96] Reto #18 - Javascript --- .../javascript/marcode24.js" | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/javascript/marcode24.js" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/javascript/marcode24.js" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/javascript/marcode24.js" new file mode 100644 index 0000000000..76ede82962 --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/javascript/marcode24.js" @@ -0,0 +1,43 @@ +/* + * El día 128 del año celebramos en la comunidad el "Hola Mundo day" + * Vamos a hacer "web scraping" sobre su sitio web: https://holamundo.day + * + * Crea un programa que se conecte a la web del evento e imprima únicamente la agenda de eventos + * del día 8. Mostrando hora e información de cada uno. + * Ejemplo: "16:00 | Bienvenida" + * + * Se permite utilizar librerías que nos faciliten esta tarea. + * + */ + +const puppeteer = require('puppeteer'); + +const SITE = 'https://holamundo.day/'; + +const getShedule = async () => { + const browser = await puppeteer.launch({ + headless: 'new', + }); + const page = await browser.newPage(); + await page.goto(SITE); + const title = await page.title(); + const content = await page.$$('article.notion-page-content-inner'); + const events = content[7]; // 7 is the index of the events section + + const quoteElements = await events.$$('blockquote.notion-quote'); + const eventInfo = await Promise.all(quoteElements.map(async (quoteElement) => { + const spanElement = await quoteElement.$('span[data-slate-string="true"]'); + const text = await quoteElement.evaluate((el) => el.textContent, spanElement); + return text; + })); + const schedule = `${title}\n\n`.concat(eventInfo + .map((event) => event.replace(/\n/g, ' ')) + .join('\n')); + if (browser) await browser.close(); + return schedule; +}; + +getShedule().then((schedule) => console.log(schedule)); + +// Visita mi repo en GitHub para ver y correr los tests de este código --> https://github.com/marcode24/weekly-challenges + From a8d0b2a640b13f21caf97ae1cad15065b4ff0c56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Ram=C3=ADrez?= Date: Mon, 1 May 2023 23:11:54 +0200 Subject: [PATCH 87/96] reto18 --- .../c#/borazuwarah.cs" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/c#/borazuwarah.cs" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/c#/borazuwarah.cs" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/c#/borazuwarah.cs" new file mode 100644 index 0000000000..d19e5b5980 --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/c#/borazuwarah.cs" @@ -0,0 +1,36 @@ +/* + * El día 128 del año celebramos en la comunidad el "Hola Mundo day" + * Vamos a hacer "web scraping" sobre su sitio web: https://holamundo.day + * + * Crea un programa que se conecte a la web del evento e imprima únicamente la agenda de eventos + * del día 8. Mostrando hora e información de cada uno. + * Ejemplo: "16:00 | Bienvenida" + * + * Se permite utilizar librerías que nos faciliten esta tarea. + * + */ + +using System; +using HtmlAgilityPack; + +namespace Reto18 +{ + internal class Program + { + static void Main(string[] args) + { + string url = "https://holamundo.day"; + var web = new HtmlWeb(); + var doc = web.Load(url); + + var events = doc.DocumentNode.SelectNodes("//blockquote[@class='BlockquoteElement___StyledBlockquote-sc-1dtx4ci-0 slate-BlockquoteElement notion-quote unset-width']"); + + foreach (var event in events) + { + if (event.InnerText.Contains("|")) + Console.WriteLine(event.InnerText); + } + Console.ReadKey(); + } + } +} From 80dd4ec1031a0a704acd36e3243d01fbaa437e33 Mon Sep 17 00:00:00 2001 From: Luis Fernando <31860002+FernanApps@users.noreply.github.com> Date: Mon, 1 May 2023 16:27:31 -0500 Subject: [PATCH 88/96] Add files via upload --- .../kotlin/fernanapps.kt" | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/kotlin/fernanapps.kt" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/kotlin/fernanapps.kt" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/kotlin/fernanapps.kt" new file mode 100644 index 0000000000..75888e79f0 --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/kotlin/fernanapps.kt" @@ -0,0 +1,67 @@ +import java.net.URL +/** +.......................... Printing ............................................. +@author: FernanApps + + >_ Agenda 8 de mayo | “Hola Mundo” day + + 16:00 | Bienvenida + 16:30 | De Junior a Junior: cómo abrirte paso | Antonio Rodríguez + 17:00 | El Rol del Analista Funcional en el Ciclo de Desarrollo | Luisina de Paula + 17:30 | Taller: Git y Github para el mundo | Ehud Aguirre + 18:00 | Mesa redonda + 18:30 | Descanso + Sorteos + 19:00 | Clean Code: cómo dormir más y mejor | Fran Sierra + 19:30 | Abrazando al fracaso | Afor Digital + 20:00 | Taller: Descubre el mundo de machine learning | Stefy Mojica + 20:30 | Elevator pitch + 21:00 | Invitados + 21:30 | Mi primer año como Desarrollador a los 45 años | Gerardo Arrieta + 22:00 | Taller: Testing, más que código | Manu Rodríguez + 22:30 | Descanso + Sorteos + 23:00 | Despedida + + */ +fun main() { + + val pageUrl = "https://holamundo.day/" + val title8May = "Agenda 8 de mayo" + + val htmlString = downloadPage(pageUrl) + val articleBlocks = extractHTMLTagBlock("article", htmlString) + val articleBlock8May = articleBlocks.filter { it.contains(title8May) }.toString() + val articleBlock8MayFilter = Regex(" + println(event) + } +} + +fun downloadPage(pageUrl: String): String { + val html = URL(pageUrl).openConnection().apply { + setRequestProperty("User-Agent", "Mozilla/5.0") + }.getInputStream().bufferedReader().use { + it.readText() + } + return html +} + +fun extractHTMLTagBlock(tag: String, html: String): List { + val regex = Regex("<$tag.*?", RegexOption.DOT_MATCHES_ALL) + val blocks: List = regex.findAll(html).map { + it.value + }.toList() + return blocks +} + +fun extractHTMLTagContent(input: String): String { + val regex = "<[^>]*>".toRegex() + return regex.replace(input, "") +} \ No newline at end of file From 379a774f8231748161e97864f7a831cb686e52e1 Mon Sep 17 00:00:00 2001 From: Luis Fernando <31860002+FernanApps@users.noreply.github.com> Date: Mon, 1 May 2023 16:28:13 -0500 Subject: [PATCH 89/96] Delete fernanapps.kt --- .../kotlin/fernanapps.kt" | 67 ------------------- 1 file changed, 67 deletions(-) delete mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/kotlin/fernanapps.kt" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/kotlin/fernanapps.kt" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/kotlin/fernanapps.kt" deleted file mode 100644 index 75888e79f0..0000000000 --- "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/kotlin/fernanapps.kt" +++ /dev/null @@ -1,67 +0,0 @@ -import java.net.URL -/** -.......................... Printing ............................................. -@author: FernanApps - - >_ Agenda 8 de mayo | “Hola Mundo” day - - 16:00 | Bienvenida - 16:30 | De Junior a Junior: cómo abrirte paso | Antonio Rodríguez - 17:00 | El Rol del Analista Funcional en el Ciclo de Desarrollo | Luisina de Paula - 17:30 | Taller: Git y Github para el mundo | Ehud Aguirre - 18:00 | Mesa redonda - 18:30 | Descanso + Sorteos - 19:00 | Clean Code: cómo dormir más y mejor | Fran Sierra - 19:30 | Abrazando al fracaso | Afor Digital - 20:00 | Taller: Descubre el mundo de machine learning | Stefy Mojica - 20:30 | Elevator pitch - 21:00 | Invitados - 21:30 | Mi primer año como Desarrollador a los 45 años | Gerardo Arrieta - 22:00 | Taller: Testing, más que código | Manu Rodríguez - 22:30 | Descanso + Sorteos - 23:00 | Despedida - - */ -fun main() { - - val pageUrl = "https://holamundo.day/" - val title8May = "Agenda 8 de mayo" - - val htmlString = downloadPage(pageUrl) - val articleBlocks = extractHTMLTagBlock("article", htmlString) - val articleBlock8May = articleBlocks.filter { it.contains(title8May) }.toString() - val articleBlock8MayFilter = Regex(" - println(event) - } -} - -fun downloadPage(pageUrl: String): String { - val html = URL(pageUrl).openConnection().apply { - setRequestProperty("User-Agent", "Mozilla/5.0") - }.getInputStream().bufferedReader().use { - it.readText() - } - return html -} - -fun extractHTMLTagBlock(tag: String, html: String): List { - val regex = Regex("<$tag.*?", RegexOption.DOT_MATCHES_ALL) - val blocks: List = regex.findAll(html).map { - it.value - }.toList() - return blocks -} - -fun extractHTMLTagContent(input: String): String { - val regex = "<[^>]*>".toRegex() - return regex.replace(input, "") -} \ No newline at end of file From a9bacf7d094c8f9a5e6008dfd5f1d9d5c797f4db Mon Sep 17 00:00:00 2001 From: Luis Fernando <31860002+FernanApps@users.noreply.github.com> Date: Mon, 1 May 2023 16:28:54 -0500 Subject: [PATCH 90/96] Solution - Reto#18 WebScraping --- .../kotlin/fernanapps.kt" | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/kotlin/fernanapps.kt" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/kotlin/fernanapps.kt" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/kotlin/fernanapps.kt" new file mode 100644 index 0000000000..75888e79f0 --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/kotlin/fernanapps.kt" @@ -0,0 +1,67 @@ +import java.net.URL +/** +.......................... Printing ............................................. +@author: FernanApps + + >_ Agenda 8 de mayo | “Hola Mundo” day + + 16:00 | Bienvenida + 16:30 | De Junior a Junior: cómo abrirte paso | Antonio Rodríguez + 17:00 | El Rol del Analista Funcional en el Ciclo de Desarrollo | Luisina de Paula + 17:30 | Taller: Git y Github para el mundo | Ehud Aguirre + 18:00 | Mesa redonda + 18:30 | Descanso + Sorteos + 19:00 | Clean Code: cómo dormir más y mejor | Fran Sierra + 19:30 | Abrazando al fracaso | Afor Digital + 20:00 | Taller: Descubre el mundo de machine learning | Stefy Mojica + 20:30 | Elevator pitch + 21:00 | Invitados + 21:30 | Mi primer año como Desarrollador a los 45 años | Gerardo Arrieta + 22:00 | Taller: Testing, más que código | Manu Rodríguez + 22:30 | Descanso + Sorteos + 23:00 | Despedida + + */ +fun main() { + + val pageUrl = "https://holamundo.day/" + val title8May = "Agenda 8 de mayo" + + val htmlString = downloadPage(pageUrl) + val articleBlocks = extractHTMLTagBlock("article", htmlString) + val articleBlock8May = articleBlocks.filter { it.contains(title8May) }.toString() + val articleBlock8MayFilter = Regex(" + println(event) + } +} + +fun downloadPage(pageUrl: String): String { + val html = URL(pageUrl).openConnection().apply { + setRequestProperty("User-Agent", "Mozilla/5.0") + }.getInputStream().bufferedReader().use { + it.readText() + } + return html +} + +fun extractHTMLTagBlock(tag: String, html: String): List { + val regex = Regex("<$tag.*?", RegexOption.DOT_MATCHES_ALL) + val blocks: List = regex.findAll(html).map { + it.value + }.toList() + return blocks +} + +fun extractHTMLTagContent(input: String): String { + val regex = "<[^>]*>".toRegex() + return regex.replace(input, "") +} \ No newline at end of file From a2896854c4bb65259d6bfac2b866a69b26bd7045 Mon Sep 17 00:00:00 2001 From: AlbertoVf Date: Mon, 1 May 2023 23:33:08 +0200 Subject: [PATCH 91/96] reto#18 - python --- .../python/albertovf.py" | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/albertovf.py" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/albertovf.py" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/albertovf.py" new file mode 100644 index 0000000000..bcb3ae02a9 --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/albertovf.py" @@ -0,0 +1,16 @@ +from bs4 import BeautifulSoup +import requests + +url = "https://holamundo.day/" + +page = requests.get(url) +soup = BeautifulSoup(page.content, 'html.parser') + +day = soup.find_all('h1')[-2] + +if day: + print(day.text) + next_element = day.find_next_sibling() + while next_element is not None and next_element.name == 'blockquote': + print(next_element.text) + next_element = next_element.find_next_sibling() From 6e9e6b109f515ed7a01be8239ff824aad3535cda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Garc=C3=ADa=20Urb=C3=A1ez?= Date: Mon, 1 May 2023 22:48:21 -0400 Subject: [PATCH 92/96] Reto #12 - Python --- .../python/JoseMHU.py" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/JoseMHU.py" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/JoseMHU.py" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/JoseMHU.py" new file mode 100644 index 0000000000..41456c66f6 --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/JoseMHU.py" @@ -0,0 +1,23 @@ +from requests_html import HTMLSession +import re +URL = "https://holamundo.day/" + + +def get_agenda(n_agenda: int): + session = HTMLSession() + web_data = session.get(URL).html.find(".BlockquoteElement___StyledBlockquote-sc-1dtx4ci-0") + count = 0 + for element in web_data: + try: + valid_content = re.match("[\d:|]", element.text).string + if re.search("Bienvenida", valid_content): + count += 1 + if count == n_agenda: + print(valid_content) + except AttributeError: + pass + + +if __name__ == "__main__": + # En get_agenda se puede especificar 1 = 1 era agenda (4 de mayo) // 2 = 2da agenda (8 de mayo) + get_agenda(2) From fb02bfed386fc7c175ada67e279b0c799d1172ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Chocho?= <68519171+mchocho99@users.noreply.github.com> Date: Tue, 2 May 2023 00:02:01 -0300 Subject: [PATCH 93/96] Reto #1 - Java --- .../java/mchocho99.java" | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 "Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/java/mchocho99.java" diff --git "a/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/java/mchocho99.java" "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/java/mchocho99.java" new file mode 100644 index 0000000000..5458b2c0c5 --- /dev/null +++ "b/Retos/Reto #1 - EL LENGUAJE HACKER [F\303\241cil]/java/mchocho99.java" @@ -0,0 +1,54 @@ + private static final Map DICTIONARY = new HashMap<>() {{ + put('A', "4"); + put('B', "I3"); + put('C', "["); + put('D', ")"); + put('E', "3"); + put('F', "|="); + put('G', "&"); + put('H', "#"); + put('I', "1"); + put('J', ",_|"); + put('K', ">|"); + put('L', "£"); + put('M', "/\\/\\"); + put('N', "^/"); + put('O', "0"); + put('P', "|*"); + put('Q', "(_,)"); + put('R', "I2"); + put('S', "5"); + put('T', "7"); + put('U', "(_)"); + put('V', "\\/"); + put('W', "\\/\\/"); + put('X', "><"); + put('Y', " j"); + put('Z', "2"); + put('0', "o"); + put('1', "L"); + put('2', "R"); + put('3', "E"); + put('4', "A"); + put('5', "S"); + put('6', "b"); + put('7', "T"); + put('8', "B"); + put('9', "g"); + put(' ', " "); + }}; + + public static void reto1 (String text) { + /* + * Escribe un programa que reciba un texto y transforme lenguaje natural a + * "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje + * se caracteriza por sustituir caracteres alfanuméricos. + * - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet/) + * con el alfabeto y los números en "leet". + * (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a") + */ + String upperText = text.toUpperCase(); + for (int i = 0; i < upperText.length(); i++) { + System.out.print(DICTIONARY.get(upperText.charAt(i))); + } + } From 55229f57579c7284dbfc4fe7d630a708e47ee8e2 Mon Sep 17 00:00:00 2001 From: pyRamsd Date: Mon, 1 May 2023 23:30:09 -0500 Subject: [PATCH 94/96] Reto #18 - python --- .../python/pyramsd.py" | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/pyramsd.py" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/pyramsd.py" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/pyramsd.py" new file mode 100644 index 0000000000..dd2157ac52 --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/pyramsd.py" @@ -0,0 +1,18 @@ +from bs4 import BeautifulSoup +import requests + +url = "https://holamundo.day/" +page = requests.get(url) +soup = BeautifulSoup(page.content, "html.parser") + +main = soup.find_all("blockquote", class_="BlockquoteElement___StyledBlockquote-sc-1dtx4ci-0 slate-BlockquoteElement notion-quote unset-width") + +eventos = [] + +for i in main: + i = i.text + eventos.append(i) + +print("EVENTOS 8 DE MAYO:\n-------------------") +for j in eventos[19:]: + print(j) From 14c76c50450b2b2077b66db7dd3caf9890075f03 Mon Sep 17 00:00:00 2001 From: Cristhian Date: Mon, 1 May 2023 23:38:04 -0500 Subject: [PATCH 95/96] Reto #17 - Python --- .../python/Bryan112094.py" | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 "Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/Bryan112094.py" diff --git "a/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/Bryan112094.py" "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/Bryan112094.py" new file mode 100644 index 0000000000..518963d376 --- /dev/null +++ "b/Retos/Reto #17 - GIT Y GITHUB [Dif\303\255cil]/python/Bryan112094.py" @@ -0,0 +1,25 @@ +# ¡Estoy de celebración! He publicado mi primer libro: +# "Git y GitHub desde cero" +# - Papel: mouredev.com/libro-git +# - eBook: mouredev.com/ebook-git +# ¿Sabías que puedes leer información de Git y GitHub desde la gran +# mayoría de lenguajes de programación? +# Crea un programa que lea los últimos 10 commits de este repositorio y muestre: +# - Hash +# - Autor +# - Mensaje +# - Fecha y hora +# Ejemplo de salida: +# Commit 1 (el más reciente) | 12345A | MoureDev | Este es un commit | 24/04/2023 21:00 +# Se permite utilizar librerías que nos faciliten esta tarea. + +from git import Repo +import pathlib + +def listCommits(numero): + repositorio = Repo(pathlib.Path(__file__).parent.resolve(), search_parent_directories=True) + commits = list(repositorio.iter_commits(repositorio.active_branch, max_count=numero)) + for i in range(numero): + print(F"Commit {str(i + 1)}: {commits[i].hexsha}\n Autor: {commits[i].author.name}\n Mensaje: {commits[i].message.splitlines()[0]}\n Fecha y hora: {str(commits[i].committed_datetime)}\n") + +listCommits(10) \ No newline at end of file From 1d8ae0a905a3cf77e4ec79209904df9622670062 Mon Sep 17 00:00:00 2001 From: blackriper Date: Tue, 2 May 2023 00:10:10 -0600 Subject: [PATCH 96/96] Reto #18 python --- .../python/blackriper.py" | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 "Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/blackriper.py" diff --git "a/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/blackriper.py" "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/blackriper.py" new file mode 100644 index 0000000000..38e71de1c4 --- /dev/null +++ "b/Retos/Reto #18 - WEB SCRAPING [Dif\303\255cil]/python/blackriper.py" @@ -0,0 +1,26 @@ +from requests_html import HTMLSession +""" +instalar libreria pip install requests_html + +""" + + + +def main(): + # iniciar objeto de sesion y obtener la pagina + session=HTMLSession() + page=session.get("https://holamundo.day") + + """ + al inspecionar la pagina puedes ver que cada evento de la + charla usa una etiqueta blockquote solo hay que ver cuantos elementos son + y traer el rango en este caso [19:34] + postd: los conte de manera manual para saber el rango debe de haber una mejor manera + de hacerlo + """ + + for event in page.html.find("blockquote")[19:34]: + print(event.text) + +if __name__=='__main__': + main() \ No newline at end of file