Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.util.Map;
- import java.util.HashMap;
- /**
- * Objectif
- * Autrefois, les gens s'amusaient à transformer des "recettes" en images surprises à l'aide de machines à écrire.
- * Utilisez la recette fournie pour créer une image reconnaissable.
- *
- * Les morceaux de la recette sont séparés par un espace.
- * Chaque morceau vous indiquera soit :
- * - nl signifiant Nouvelle Ligne (retour chariot)
- * - ~ou~
- * - combien de fois répéter un caractère donné
- *
- * Par exemple :
- * - 4z signifie zzzz
- * - 1{ signifie {
- * - 10= signifie ==========
- * - 5bS signifie \\\\\ (voir la liste des abréviations ci-dessous)
- * - 27 signifie 77
- * - 123 signifie 333333333333 (si un morceau est composé uniquement de chiffres, le caractère est le dernier chiffre.)
- *
- * Donc, si une partie de la recette est
- * 2* 15sp 1x 4sQ nl
- * ... cela signifie d'afficher
- * ** x''''
- * puis passer à une nouvelle ligne.
- *
- * Abréviations utilisées :
- * - sp = espace
- * - bS = barre oblique inversée \
- * - sQ = apostrophe simple '
- * et
- * - nl = Nouvelle Ligne
- *
- * Sources/références :
- * https://asciiart.cc
- * https://loriemerson.net/2013/01/18/d-i-y-typewriter-art/
- * https://www.youtube.com/watch?v=kyK5WvpFxqo
- *
- * Entrée
- * Une chaîne de caractères représentant la recette
- *
- * Sortie
- * Une chaîne de caractères (sur plusieurs lignes) représentant l'image créée par la recette
- *
- * Contraintes
- * 5 ≤ Longueur de la recette ≤ 1000
- * Il n'y aura pas de guillemets doubles (") dans la recette
- * La recette contiendra au moins 1 nl (Nouvelle Ligne)
- *
- * Exemple
- * Entrée
- * 1sp 1/ 1bS 1_ 1/ 1bS nl 1( 1sp 1o 1. 1o 1sp 1) nl 1sp 1> 1sp 1^ 1sp 1< nl 2sp 3|
- * Sortie
- * /\_/\
- * ( o.o )
- * > ^ <
- * |||
- **/
- class Solution {
- public static void main(String args[]) {
- final Scanner in = new Scanner(System.in);
- final String T = in.nextLine();
- // Définition des abréviations utilisées
- Map<String, String> abbr = new HashMap<String, String>(); {
- abbr.put("sp", " ");
- abbr.put("bS", "\\\\");
- abbr.put("sQ", "\'");
- abbr.put("nl", "\n");
- }
- final StringBuilder sb = new StringBuilder();
- // Délimiteur utilisé pour séparer les morceaux de la recette
- final String delimiter = " ";
- final String[] symbols = T.split(delimiter);
- for (String s : symbols) {
- // Remplacement des abréviations par leur valeur correspondante
- for (Map.Entry<String, String> entry : abbr.entrySet()) {
- s = s.replaceAll(entry.getKey(), entry.getValue());
- }
- int firstCharIndex = 0;
- for (Character c : s.toCharArray()) {
- if (Character.isDigit(c)) firstCharIndex++;
- else break;
- }
- Integer r;
- String content;
- if (firstCharIndex > 0) {
- // Si le morceau commence par des chiffres, récupérer le nombre
- r = Integer.parseInt(s.substring(0, firstCharIndex));
- content = s.substring(firstCharIndex, s.length());
- } else {
- r = 1;
- content = s;
- }
- // Répéter le contenu du morceau la bonne quantité de fois
- for (int i = 0; i < r; i++) {
- sb.append(content);
- }
- }
- System.out.println(sb.toString());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement