Parcours
/
F#
F#
/
Exercices
/
Propre comme un sou neuf
Propre comme un sou neuf

Propre comme un sou neuf

Exercice d'apprentissage

Introduction

Le type char de F# est une valeur de 16 bits qui représente les plus petites composantes adressables du texte, immuable par défaut.

On peut définir des char comme littéraux à l'aide de guillemets simples :

let ch = 'A'
// => val ch: char = 'A'

Les strings sont une séquence de char.

On peut extraire un char d'une string grâce à son indice (en partant de zéro) :

"Exercism"[4] //  =>  'c'

Parcourir une string renvoie un char à chaque étape.

L'exemple suivant utilise une fonction d'ordre supérieur et une fonction anonyme, par commodité. Elles seront vues en détail plus tard dans le programme, mais pour l'instant il s'agit essentiellement d'une façon concise d'écrire une boucle sur les caractères d'une string.

Seq.map (fun c -> c, int c) "F#"  //  =>  [('F', 70); ('#', 35)]

Comme montré ci-dessus, on peut convertir un char en sa valeur int. Cela fonctionne aussi (au moins dans certains cas) pour d'autres écritures :

Seq.map (fun c -> c, int c) "東京"  //  =>  [('東', 26481); ('京', 20140)]

C'est l'Int16 sous-jacent qui est utilisé pour comparer des caractères :

'A' < 'D'  // =>  true

De plus, on peut convertir un int en char :

char 77  // => 'M'

La bibliothèque System.Char contient l'ensemble complet des méthodes attendues pour un langage .NET, comme les conversions majuscule/minuscule :

'a' |> System.Char.ToUpper  // =>  'A'

'Q' |> System.Char.ToLower  // =>  'q'

Instructions

Dans cet exercice, on va implémenter un ensemble partiel de routines utilitaires pour aider un développeur à nettoyer des noms d'identifiants.

Au fil des 6 tâches, tu construiras progressivement les fonctions transform, qui convertit des caractères isolés, et clean, qui convertit des strings.

Un identifiant valide se compose de zéro ou plusieurs lettres, tirets bas, tirets, points d'interrogation et emojis.

Si une string vide est passée à la fonction clean, une string vide doit être renvoyée.

1. Remplace tous les tirets rencontrés par des tirets bas

Implémente la fonction transform pour remplacer tous les tirets par des tirets bas.

transform '-'  // => "_"

2. Supprime tous les espaces

Supprime tous les caractères d'espacement, y compris ceux en début et en fin de string.

transform ' '  // => ""

3. Convertis du camelCase en kebab-case

Modifie la fonction transform pour convertir du camelCase en kebab-case.

transform 'D'  // => "-d"

4. Omets les caractères qui sont des chiffres

Modifie la fonction transform pour omettre tout caractère numérique.

transform '7'  // => ""

5. Remplace les lettres grecques minuscules par des points d'interrogation

Modifie la fonction transform pour remplacer toutes les lettres grecques comprises entre 'α' et 'ω'.

transform 'β' // => "?"

6. Combine ces opérations pour les appliquer à une string

Implémente la fonction clean pour appliquer ces opérations à une string entière.

Les caractères qui ne relèvent pas de ces règles doivent rester inchangés.

clean "  a2b Cd-ω😀  " //  => "ab-cd_?😀"

Assemble une string à partir de caractères

Ce sujet sera traité en détail plus tard dans le programme.

Pour l'instant, il peut être utile de savoir qu'il existe une fonction d'ordre supérieur appelée String.collect, qui convertit une collection de chars en une string, à l'aide d'une fonction que tu fournis.

let transform ch = $"{ch}_"
String.collect transform "abc"  // =>  "a_b_c_"
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
F# Exercism

Prêt à commencer Propre comme un sou neuf ?

Inscris-toi sur Exercism pour apprendre et maîtriser F# avec 18 concepts148 exercices, et un vrai mentorat humain, le tout gratuitement.