Tracks
/
Elixir
Elixir
/
Ejercicios
/
Sysadmin alemán
Sysadmin alemán

Sysadmin alemán

Ejercicio de aprendizaje

Introducción

Charlists

Las charlists se crean con el sigilo ~c.

~c"hello"
Note

Ten en cuenta que en versiones anteriores de Elixir, las charlists se representan como 'hello' con comillas simples.

Aunque se parecen mucho a los strings, los dos tipos de datos son bastante diferentes entre sí. Una charlist es una lista de enteros. Los enteros representan los valores Unicode de un carácter determinado, también conocidos como puntos de código.

[65, 66, 67]
# => ~c"ABC"

Puedes anteponer ? a un carácter para obtener su punto de código.

?A
# => 65

[?:, ?)]
# => ~c":)"

Como las charlists son listas, puedes trabajar con ellas igual que con cualquier otra lista: usando recursión y coincidencia de patrones.

[first_letter | _] = ~c"cat"
first_letter
# => 99

Puedes concatenar dos listas con ++.

~c"hi" ++ ~c"!"
# => ~c"hi!"

Cuanto más larga sea la primera lista, más lenta será la concatenación, así que evita agregar elementos repetidamente a listas de longitud arbitraria.

Case

case es una estructura de control de flujo que nos permite comparar un valor dado contra muchos patrones. Las cláusulas de una expresión case se evalúan de arriba hacia abajo, hasta que se encuentra una coincidencia.

age = 15

case age do
  0 -> ~c"infant"
  age when age < 4 -> ~c"baby"
  age when age < 13 -> ~c"child"
  age when age < 18 -> ~c"teenager"
  _ -> ~c"adult"
end

# => ~c"teenager"

Instrucciones

Trabajas como administrador de sistemas para una gran empresa en Múnich, Alemania. Una de tus responsabilidades es gestionar cuentas de correo electrónico.

Has estado escuchando quejas de personas que dicen que no pueden enviar correos al Sr. Müller. Rápidamente te das cuenta de que la mayoría de la empresa usa un cliente de correo electrónico antiguo que no reconoce müller@firma.de como una dirección de correo válida debido al carácter no ASCII.

Decirle a la gente que abandone su antiguo cliente de correo favorito es una batalla perdida, así que decides crear alias saneados para todas las cuentas de correo.

1. Sanea los nombres de usuario existentes eliminando todo excepto las letras minúsculas

Implementa la función sanitize/1. Debe aceptar un nombre de usuario como charlist y devolver el nombre de usuario con todos los caracteres eliminados excepto las letras minúsculas.

Username.sanitize(~c"schmidt1985")
# => ~c"schmidt"

2. Permite guiones bajos

Extiende la función sanitize/1. No debe eliminar los guiones bajos del nombre de usuario.

Username.sanitize(~c"mark_fischer$$$")
# => ~c"mark_fischer"

3. Sustituye los caracteres alemanes

Hay 4 caracteres no ASCII en el alfabeto alemán, y todos tienen sustitutos ASCII comúnmente reconocidos.

Carácter alemán Sustituto ASCII
ä ae
ö oe
ü ue
ß ss

Extiende la función sanitize/1. Debe sustituir los caracteres alemanes según la tabla. Puedes asumir sin problema que todos los nombres de usuario ya están en minúsculas.

Username.sanitize(~c"cäcilie_weiß")
# => ~c"caecilie_weiss"
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Elixir Exercism

¿Todo listo para empezar Sysadmin alemán?

Regístrate en Exercism para aprender y dominar Elixir con 58 conceptos168 ejercicios y mentoría humana real, todo gratis.