Percursos
/
Elixir
Elixir
/
Exercícios
/
Administrador de sistemas alemão
Administrador de sistemas alemão

Administrador de sistemas alemão

Exercício de aprendizagem

Introdução

Charlists

As charlists são criadas com o sigil ~c.

~c"hello"
Note

Repara que, em versões mais antigas do Elixir, as charlists são representadas como 'hello', com aspas simples.

Embora sejam muito parecidas com strings, os dois tipos de dados são bastante diferentes um do outro. Uma charlist é uma lista de números inteiros. Os números inteiros representam os valores Unicode de um determinado caráter, também conhecidos como pontos de código.

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

Podes colocar um ? antes de um caráter para obter o seu ponto de código.

?A
# => 65

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

Como as charlists são listas, podes trabalhar com elas tal como com qualquer outra lista: com recursão e correspondência de padrões.

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

Podes concatenar duas listas com ++.

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

Quanto mais longa for a primeira lista, mais lenta é a concatenação, por isso evita acrescentar repetidamente elementos a listas de comprimento arbitrário.

Case

case é uma estrutura de controlo de fluxo que nos permite comparar um determinado valor com vários padrões. As cláusulas de uma expressão case são avaliadas de cima para baixo, até se encontrar uma correspondência.

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"

Instruções

Trabalhas como administrador de sistemas numa grande empresa em Munique, na Alemanha. Uma das tuas responsabilidades é gerir contas de email.

Tens ouvido queixas de pessoas que dizem não conseguir enviar emails ao Sr. Müller. Percebes rapidamente que a maior parte da empresa usa um cliente de email antigo que não reconhece müller@firma.de como um endereço de email válido, por causa do caráter não-ASCII.

Dizer às pessoas para abandonarem o seu cliente de email antigo preferido é uma batalha perdida, por isso decides criar aliases sanitizados para todas as contas de email.

1. Sanitiza os nomes de utilizador existentes removendo tudo exceto as letras minúsculas

Implementa a função sanitize/1. Deve aceitar um nome de utilizador como uma charlist e devolver o nome de utilizador sem todos os carateres que não sejam letras minúsculas.

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

2. Permitir underscores

Estende a função sanitize/1. Não deve remover os underscores do nome de utilizador.

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

3. Substituir carateres alemães

Há 4 carateres não-ASCII no alfabeto alemão, e todos eles têm substitutos ASCII amplamente reconhecidos.

Caráter alemão Substituto ASCII
ä ae
ö oe
ü ue
ß ss

Estende a função sanitize/1. Deve substituir os carateres alemães de acordo com a tabela. Podes assumir com segurança que todos os nomes de utilizador já estão em minúsculas.

Username.sanitize(~c"cäcilie_weiß")
# => ~c"caecilie_weiss"
Editar via GitHub A ligação abre numa nova janela ou separador
Elixir Exercism

Estás pronto para começar Administrador de sistemas alemão?

Inscreve-te no Exercism para aprenderes e dominares Elixir com 58 conceitos168 exercícios, e mentoria humana real, tudo grátis.