Advertisement
MonsterScripter

CodinGame_2023_09_02__20_21_34__ascii_art.php

Sep 2nd, 2023 (edited)
1,349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.30 KB | None | 0 0
  1. <?php
  2.  
  3. // Lecture de la largeur d'une lettre en art ASCII (L) et de sa hauteur (H)
  4. fscanf(STDIN, "%d", $L);
  5. fscanf(STDIN, "%d", $H);
  6.  
  7. // Lecture de la ligne de texte à afficher en art ASCII (T)
  8. $T = stream_get_line(STDIN, 256 + 1, "\n");
  9.  
  10. // Conversion du texte en majuscules pour simplifier les correspondances en art ASCII
  11. $T = strtoupper($T);
  12.  
  13. // Lecture des caractères de l'alphabet en art ASCII
  14. for ($i = 0; $i < $H; $i++)
  15. {
  16.     $ROW = stream_get_line(STDIN, 1024 + 1, "\n");
  17.     $output = '';
  18.  
  19.     // Parcours des caractères du texte à afficher
  20.     for ($j = 0; $j < strlen($T); $j++) {
  21.         $letter = $T[$j];
  22.  
  23.         // Détermination de la plage de caractères correspondant à la lettre
  24.         $alphaBeginning = ctype_upper($letter) ? 'A' : 'a';
  25.         $alphaEnding = ctype_upper($letter) ? 'Z' : 'z';
  26.         $start = 0;
  27.  
  28.         if (ord($letter) < ord($alphaBeginning) || ord($letter) > ord($alphaEnding)) {
  29.             $start = ((ord($alphaEnding) - ord($alphaBeginning)) + 1) * $L;
  30.         } else {
  31.             $start = (ord($letter) - ord($alphaBeginning)) * $L;
  32.         }
  33.  
  34.         // Ajout de la partie correspondante de la ligne ROW à la sortie
  35.         $output .= substr($ROW, $start, $L);
  36.     }
  37.  
  38.     // Affichage de la ligne
  39.     echo($output . "\n");
  40. }
  41.  
  42. /**
  43.  * Objectif
  44.  * Dans les gares et aéroports on croise souvent ce type d'écran :
  45.  *
  46.  * Vous êtes-vous demandé comment il serait possible de simuler cet affichage dans un bon vieux terminal ? Nous oui : avec l'art ASCII !
  47.  *
  48.  * Règles
  49.  * L'art ASCII permet de représenter des formes en utilisant des caractères. Dans notre cas, ces formes sont précisément des mots. Par exemple, le mot "MANHATTAN" pourra être affiché ainsi en art ASCII :
  50.  *
  51.  * # #  #  ### # #  #  ### ###  #  ###
  52.  * ### # # # # # # # #  #   #  # # # #
  53.  * ### ### # # ### ###  #   #  ### # #
  54.  * # # # # # # # # # #  #   #  # # # #
  55.  * # # # # # # # # # #  #   #  # # # #
  56.  *
  57.  * Votre mission : Écrire un programme capable d'afficher une ligne de texte en art ASCII dans un style qui vous est fourni en entrée.
  58.  *
  59.  * Entrées du jeu
  60.  * Entrée
  61.  * Ligne 1 : la largeur L d'une lettre représentée en art ASCII. Toutes les lettres font la même largeur.
  62.  *
  63.  * Ligne 2 : la hauteur H d'une lettre représentée en art ASCII. Toutes les lettres font la même hauteur.
  64.  *
  65.  * Ligne 3 : La ligne de texte T, composée de N caractères ASCII
  66.  *
  67.  * Lignes suivantes : La chaîne de caractères ABCDEFGHIJKLMNOPQRSTUVWXYZ? représentée en art ASCII.
  68.  *
  69.  * Sortie
  70.  * Le texte T en art ASCII.
  71.  * Les caractères de a à z seront affichés en art ASCII par leur équivalent en majuscule.
  72.  * Les caractères qui ne sont pas dans les intervales [a-z] ou [A-Z], seront affichés par le point d'interrogation en art ASCII.
  73.  *
  74.  * Contraintes
  75.  * 0 < L < 30
  76.  * 0 < H < 30
  77.  * 0 < N < 200
  78.  *
  79.  * Exemple 1
  80.  * Entrée
  81.  * 4
  82.  * 5
  83.  * E
  84.  *  #  ##   ## ##  ### ###  ## # # ###  ## # # #   # # ###  #  ##   #  ##   ## ### # # # # # # # # # # ### ###
  85.  * # # # # #   # # #   #   #   # #  #    # # # #   ### # # # # # # # # # # #    #  # # # # # # # # # #   #   #
  86.  * ### ##  #   # # ##  ##  # # ###  #    # ##  #   ### # # # # ##  # # ##   #   #  # # # # ###  #   #   #   ##
  87.  * # # # # #   # # #   #   # # # #  #  # # # # #   # # # # # # #    ## # #   #  #  # # # # ### # #  #  #
  88.  * # # ##   ## ##  ### #    ## # # ###  #  # # ### # # # #  #  #     # # # ##   #  ###  #  # # # #  #  ###  #
  89.  *
  90.  * Sortie
  91.  * ###
  92.  *
  93.  * #
  94.  *
  95.  * ##
  96.  *
  97.  * #
  98.  *
  99.  * ###
  100.  *
  101.  * Exemple 2
  102.  * Entrée
  103.  * 4
  104.  * 5
  105.  * MANHATTAN
  106.  *  #  ##   ## ##  ### ###  ## # # ###  ## # # #   # # ###  #  ##   #  ##   ## ### # # # # # # # # # # ### ###
  107.  * # # # # #   # # #   #   #   # #  #    # # # #   ### # # # # # # # # # # #    #  # # # # # # # # # #   #   #
  108.  * ### ##  #   # # ##  ##  # # ###  #    # ##  #   ### # # # # ##  # # ##   #   #  # # # # ###  #   #   #   ##
  109.  * # # # # #   # # #   #   # # # #  #  # # # # #   # # # # # # #    ## # #   #  #  # # # # ### # #  #  #
  110.  * # # ##   ## ##  ### #    ## # # ###  #  # # ### # # # #  #  #     # # # ##   #  ###  #  # # # #  #  ###  #
  111.  *
  112.  * Sortie
  113.  * # #  #  ### # #  #  ### ###  #  ###
  114.  * ### # # # # # # # #  #   #  # # # #
  115.  * ### ### # # ### ###  #   #  ### # #
  116.  * # # # # # # # # # #  #   #  # # # #
  117.  * # # # # # # # # # #  #   #  # # # #
  118.  */
  119.  
  120. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement