Skip to content

Commit f59dd75

Browse files
committed
agrego ejercicio paquetes
1 parent 57ba0db commit f59dd75

6 files changed

Lines changed: 132 additions & 1 deletion

File tree

capitulos/06_practica.qmd

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,21 @@ Error in filtrar_por_vocal(1:3) : palabras debe ser un vector carácter.
7171
## Ejercicio 3
7272

7373
Crear un nuevo paquete llamado `unidad3` para guardar allí al menos 4 de las funciones creadas en los ejercicios de la Práctica 3.
74+
75+
## Ejercicio 4
76+
77+
Hoy en día, casi todas las plataformas digitales —redes sociales, correos electrónicos, tiendas online y homebanking, entre otras— requieren que los usuarios se registren mediante un nombre de usuario y una contraseña. Para mantener la seguridad de nuestras cuentas, es fundamental utilizar contraseñas seguras y diferentes en cada sitio, evitando así que la filtración de una de ellas comprometa las demás. Sin embargo, muchas personas tienden a usar contraseñas simples o repetidas, lo que aumenta el riesgo de ser víctimas de ataques informáticos. Una buena práctica es generar contraseñas personalizadas que resulten fáciles de recordar para el usuario, pero difíciles de adivinar para otros.
78+
79+
En este ejercicio vamos a **crear una función en R que le ayude a las personas a elegir una contraseña**, siguiendo una regla determinada a partir de la información provista por el usuario, y distribuirla mediante la **creación de un paquete**. Si bien puede ser una muy buena estrategia que cada persona invente para sí mismo una regla para generar contraseñas fáciles de recordar, probablemente no sea lo más seguro utilizar una regla propuesta por un tercero, como se propone en esta tarea. No obstante, será una buena oportunidad para seguir aprendiendo.
80+
81+
- El paquete se llama `seguridad`.
82+
- La función que exporta el paquete debe llamarse `generar_clave()` y debe tener tres argumentos de entrada: un número de dos dígitos, un nombre y un apellido.
83+
- El número de dos dígitos no debe tener un valor asignado por defecto.
84+
- Los valores por defecto para los otros dos argumentos deben ser el primer nombre y el apellido del estudiante.
85+
- La función tiene que generar un nombre de usuario a partir del nombre y apellido provistos. Por ejemplo, si el nombre es "Silvina" y el apellido es "Perez", el nombre de usuario a crear debe ser "silvina_perez".
86+
- La contraseña sugerida por la función debe estar formada por las 3 primeras letras del apellido, seguidas por los dígitos que resultan de la multiplicación entre la cantidad de vocales del nombre y la cantidad de consonantes del apellido, luego por las primeras 2 letras del nombre y finalmente por los dígitos que resulten de la multiplicación entre el número ingresado por el usuario y un número elegido por la función al azar entre el 1 y el 10
87+
- Por ejemplo, si el nombre es "Silvina" (3 vocales), el apellido es "Perez" (3 consonantes), el dígito elegido es 32 y el número aleatorio resulta ser 4, la contraseña sugerida debe ser: "per9si128".
88+
- Tanto el nombre de usuario como la contraseña sugeridas deben ser letras minúsculas, sin importar lo que ingrese el usuario.
89+
- La función debe imprimir un mensaje similar al siguiente `¡La contraseña se ha generado correctamente!` y devolver una lista con el nombre de usario y la contraseña.
90+
- Pueden emplear los principios de la descomposición algorítmica y crear otras funciones auxiliares si lo consideran necesario, pero la función `generar_clave()` debe ser la única que exporte el paquete.
91+
- Una vez finalizado, se debe encapsular el paquete en un archivo comprimido de formato `.tar.gz`, que se crea automáticamente ejecutando la función `build()`.

capitulos/07_soluciones_06.qmd

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,5 @@ Los materiales con las soluciones se encuentran [en este repositorio *online*](h
1414
- La carpeta `man` contiene archivos para la generación de páginas de ayuda, creados automáticamente a partir de la documentación de las funciones (no se edita a mano).
1515
- El archivo `DESCRIPTION` debe ser editado a mano.
1616
- El archivo `NAMESPACE` no debe ser editado a mano, sino que es modificado automáticamente a partir de la documentación de las funciones.
17-
- Se ha omitido el archivo
1817
- Estos paquetes son extremadamente sencillos y contienen lo mínimo e indispensable para su funcionamiento. Un desarrollo más profesional debe incluir otros aspectos, como los mencionados en el material de lectura opcional.
1918
- En estos directorios no se incluyeron otros archivos que son creados automáticamente por `devtools` al crear el paquete: el archivo de configuración del proyecto (extensión `.Rproj`), la carpeta `.Rproj.user` y los archivos `.gitignore` y `.Rbuildignore`. Estos componentes no son de interés para los ejemplos básicos desarrollados.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Package: seguridad
2+
Title: Sugerencias para nombres de usuario y contraseñas
3+
Version: 0.0.0.9000
4+
Authors@R:
5+
person("Julian", "L'heureux", , "lheureuxjulian@gmail.com", role = c("aut", "cre"))
6+
Description: Paquete que contiene una función para crear un usuario y contraseña a partir de los datos ingresados.
7+
License: `use_mit_license()`, `use_gpl3_license()`
8+
Encoding: UTF-8
9+
Roxygen: list(markdown = TRUE)
10+
Config/roxygen2/version: 8.0.0
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Generated by roxygen2: do not edit by hand
2+
3+
export(generar_clave)
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#' Generador de nombre de usuario y contraseña segura
2+
#'
3+
#' Esta función genera un nombre de usuario y una contraseña combinando partes
4+
#' del nombre, apellido y un número, incluyendo un número aleatorio.
5+
#'
6+
#' @param codigo Entero de dos cifras. Número que se usará en el cálculo de la contraseña.
7+
#' @param nombre Caracter. Nombre del usuario. Por defecto es `"silvina"`.
8+
#' @param apellido Caracter. Apellido del usuario. Por defecto es `"perez"`.
9+
#'
10+
#' @return Una lista con dos elementos:
11+
#' \describe{
12+
#' \item{nombre_usuario}{El nombre de usuario en formato `nombre_apellido`, todo en minúsculas.}
13+
#' \item{contraseña}{Una cadena que conforma una contraseña creada con los datos aportados}
14+
#' }
15+
#'
16+
#' @details
17+
#' La contraseña se construye de la siguiente manera:
18+
#' \itemize{
19+
#' \item 3 primeras letras del apellido (minúsculas)
20+
#' \item cantidad de vocales del nombre multiplicada por la cantidad de consonantes del apellido
21+
#' \item 2 primeras letras del nombre
22+
#' \item código multiplicado por un número aleatorio del 1 al 10
23+
#' }
24+
#'
25+
#' Se imprime un mensaje indicando que la contraseña fue generada correctamente.
26+
#'
27+
#' @examples
28+
#' generar_clave(42, "Juan", "Martinez")
29+
#' generar_clave(32)
30+
#'
31+
#' @export
32+
generar_clave <- function(codigo, nombre = "silvina", apellido = "perez") {
33+
if(!(codigo %% 1 == 0 && codigo < 100 && codigo > 9)){
34+
stop("El código no es válido.")
35+
}
36+
nombre <- tolower(nombre)
37+
apellido <- tolower(apellido)
38+
39+
letras_nombre <- strsplit(nombre, "")[[1]]
40+
letras_apellido <- strsplit(apellido, "")[[1]]
41+
42+
# se podria usar funciones como chartr para eliminar acentos, diéreisis, etc, pero no nos fijemos en eso
43+
n_vocales_nombre <- sum(letras_nombre %in% c("a", "e", "i", "o", "u"))
44+
n_conson_apellido <- length(letras_apellido) - sum(letras_apellido %in% c("a", "e", "i", "o", "u"))
45+
46+
47+
primeras_3_apellido <- substr(apellido, 1, 3)
48+
prod <- n_vocales_nombre * n_conson_apellido
49+
primeras_2_nombre <- substr(nombre, 1, 2)
50+
numero_azar <- sample(1:10, 1)
51+
prod_codigo <- codigo * numero_azar
52+
clave <- paste0(primeras_3_apellido, prod, primeras_2_nombre, prod_codigo)
53+
54+
nombre_usuario <- paste(nombre, apellido, sep = "_")
55+
56+
message("¡La contraseña se ha generado correctamente!")
57+
58+
return(list(nombre_usuario = nombre_usuario, contraseña = clave))
59+
}

paquetes_unidad_6/seguridad/man/generar_clave.Rd

Lines changed: 42 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)