Carrés concentriques

Le but de cet exercice est de dessiner des carrés emboités les uns dans les autres en utilisant des lettres. Voici un exemple pour les lettres 'o', 'x', 'i' et 'u' :

uuuuuuu
uiiiiiu
uixxxiu
uixoxiu
uixxxiu
uiiiiiu
uuuuuuu

Tout au centre se trouve la première lettre 'o'. Cette lettre est entourée par un carré de 'x'. Ce carré est lui même entouré d'un carré de 'i'. Enfin un carré de 'u' entoure l'ensemble de la figure.

La séquence des lettres à utiliser pour dessiner les carrés vous est donnée en entrée, en commençant par les lettres à utiliser pour dessiner les petits carrés du milieu.

Limites de temps et de mémoire (Python)

  • Temps : 1 s sur une machine à 1 GHz.
  • Mémoire : 16 000 ko.

Contraintes

  • 1 <= N <= 300, où N est le nombre de lettres.

Entrée

  • La première ligne de l'entrée contient un entier : le nombre de lettres N.
  • La seconde ligne de l'entrée contient un mot de N lettres, dont toutes les lettres sont minuscules (entre 'a' et 'z' inclus) et non accentuées.

Sortie

Vous devez afficher des carrés imbriqués les uns dans les autres comme décrit dans le sujet (et aussi dans l'exemple ci-dessous).

Exemple

entrée :

5
carre

sortie :

eeeeeeeee
errrrrrre
errrrrrre
erraaarre
erracarre
erraaarre
errrrrrre
errrrrrre
eeeeeeeee

Commentaires

Nous vous proposons des indications pour lire l'entrée et afficher la sortie, en C++ et Caml, afin que vous ne risquiez pas d'être bloqué là-dessus. Il n'est pas du tout obligatoire de les utiliser.

Entrée-Sortie en C++

   #include <stdio.h> 

   const int MAX_NB_LETTRES = 300;
   int nbLettres;
   char lettres[MAX_NB_LETTRES+1];

   int main()
   {
      scanf("%d%s", &nbLettres, lettres);

      // affichage du dessin 
      ...
      putchar(lettres[idLettre]);  // pour afficher une lettre
      ...
      putchar('\n');               // pour retourner à la ligne
      ...
           
      return 0;
   }

Note : la variable "nbLettres" contient le nombre de lettres, et "lettres[idLettre]" contient la idLettre-ème lettre (pour idLettre compris entre 0 à nbLettres-1 inclus).

Entrée-Sortie en Caml

   open Printf;;
   let nbLettres, lettres = Scanf.scanf " %d %s" (fun x y -> x,y);;
   ...
   print_char lettres.[idLettre];  (* pour afficher une lettre *)
   ...
   print_char '\n';                (* pour retourner à la ligne *)
   ...

Note : la variable "nbLettres" contient le nombre de lettres, et "lettres.[idLettre]" contient la idLettre-ème lettre (pour idLettre compris entre 0 à nbLettres-1 inclus).


Source : http://www.france-ioi.org/ Créé par : Arthur Charguéraud et Mathias Hiron.