Skip to content

Exercices ASP.NET

Série 1

  1. Créer un endpoint /pair qui retourne tous les entiers pairs entre 0 et 20
    • Par exemple, GET /pair retourne [0, 2, 4, 6, 8, 10, ..., 20]
  2. Créer un endpoint /pair/{nb} qui retourne tous les entiers pairs entre 0 et nb
    • Par exemple, GET /pair/10 retourne [0, 2, 4, 6, 8, 10]
  3. Créer un endpoint /impair/{nb} qui retourne tous les entiers impairs entre 0 et nb
    • Par exemple, GET /impair/10 retourne [1, 3, 5, 7, 9]
  4. Créer un endpoint /consonnes/{word} qui retourne la liste des consonnes d'un mot
    • Par exemple, GET /consonnes/hello retourne ["h", "l", "l"]
  5. Créer un endpoint /longueur/{word} qui retourne longueurs de la chaîne de caractères word
    • Par exemple, GET /longueur/hello retourne 5

Série 2

  1. Créer un endpoint /palindrome/{word} qui retourne Est un palindrome si word est un palindrome, sinon N'est pas un palindrome
    • Par exemple, GET /palindrome/toto retourne N'est pas un palindrome, et GET /palindrome/totot retourne Est un palindrome
  2. Créer un endpoint /schtroumpf/{nb1}/{nb2} qui retourne le schtroumpf d'un tableau de nb1 éléments aléatoires et d'un tableau de nb2 éléments aléatoires. Les valeurs des deux tableaux sont comprises entre 1 et 12
    • voir définition dans les exos C#
    • Par exemple, GET /schtroumpf/4/2 avec les tableaux aléatoire [4, 8, 7, 12] et [3, 6], le résultat sera 279
  3. Créer un endpoint /notes qui génère 10 notes aléatoires et renvoie un json listant les notes, la moyenne et le nombre de notes supérieures à la moyenne.
    • Exemple
      {
          "notes": [12, 15, 8, 10, 18, 14, 9, 11, 13, 16],
          "moyenne": 12.6,
          "nbNotesSupMoyenne": 5
      }
      
  4. Créer un endpoint /notes/{nb} qui génère nb notes aléatoires et renvoie un json listant les notes, la moyenne et le nombre de notes supérieurs à la moyenne.
    • Exemple: /notes/10
      {
          "notes": [12, 15, 8, 10, 18, 14, 9, 11, 13, 16],
          "moyenne": 12.6,
          "nbNotesSupMoyenne": 5
      }
      
Solutions
code
using System.Reflection.Metadata.Ecma335;

bool IsPalindromeAlgo(string input)
{
  for (int i = 0; i < input.Length / 2; i++)
  {
    if (input[i] != input[input.Length - i - 1])
    {
      return false;
    }
  }
  return true;
}

bool IsPalindromeEz(string input) => string.Join("", input.Reverse()) == input;

List<int> generateRandomIntList(int nb)
{
  List<int> items = [];
  Random r = new();
  for (int i = 0; i < nb; i++)
  {
    items.Add(r.Next(1, 12));
  }
  return items;
}

int ComputeSchtroumpf(List<int> items1, List<int> items2)
{
  int result = 0;
  foreach (var item1 in items1)
  {
    foreach (var item2 in items2)
    {
      result += item1 * item2;
    }
  }
  return result;
}


int ComputeRandomSchtroumpf(int nb1, int nb2)
{
  Random r = new();
  List<int> items1 = generateRandomIntList(nb1);
  List<int> items2 = generateRandomIntList(nb2);
  return ComputeSchtroumpf(items1, items2);
}

int ComputeExampleSchtroumpf()
{
  return ComputeSchtroumpf([4, 8, 7, 12], [3, 6]);
}

GradeResponse GenerateGradeResponse(int n = 10)
{
  var rng = new Random();
  List<int> notes = Enumerable.Range(1, n).Select(_ => rng.Next(20)).ToList();
  var avg = notes.Average();
  int nbSup = notes.Where(note => note > avg).Count();
  return new GradeResponse(notes, avg, nbSup);
}

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/pair", () => Enumerable.Range(0, 11).Select(n => n * 2));
app.MapGet("/pair/{nb}", (int nb) => Enumerable.Range(0, nb + 1).Select(n => n % 2 == 0));
app.MapGet("/impair/{nb}", (int nb) => Enumerable.Range(0, nb + 1).Select(n => n % 2 != 0));
app.MapGet("/consonnes/{mot}", (string mot) => mot.ToLower().Where(c => !"aiueoy".Contains(c)));
app.MapGet("/longueur/{word}", (string word) => word.Length);


app.MapGet("/palindrome/{word}", (string word) => IsPalindromeAlgo(word) ? "Est un palindrome" : "n'est pas un palindrome");
app.MapGet("/ez/palindrome/{word}", (string word) => IsPalindromeEz(word) ? "Est un palindrome" : "n'est pas un palindrome");
app.MapGet("/schtroumpf/{nb1}/{nb2}", (int nb1, int nb2) => ComputeRandomSchtroumpf(nb1, nb2));
app.MapGet("/example/schtroumpf/", () => ComputeExampleSchtroumpf());
app.MapGet("/notes", GenerateGradeResponse);
app.MapGet("/notes/{nb}", (int nb) => GenerateGradeResponse(nb));


app.Run();


record GradeResponse(List<int> Notes, double Moyenne, int NbNotesSupMoyenne);
appels de test
@base_url=http://localhost:5286
###
{{base_url}}/pair
###
{{base_url}}/pair/5
###
{{base_url}}/consonnes/hello
###
{{base_url}}/consonnes/aaabb
###
{{base_url}}/palindrome/elle
###
{{base_url}}/palindrome/tintin
###
{{base_url}}/ez/palindrome/elle
###
{{base_url}}/ez/palindrome/tintin
###
{{base_url}}/example/schtroumpf/
###
{{base_url}}/schtroumpf/5/2
###
{{base_url}}/notes
###
{{base_url}}/notes/7