Linotip ASCII Z95587


Statement
 

pdf   zip   main.cc

thehtml

Volem un programa que actua com una Linotip, una màquina de fa força temps que ajuntava caràcters d’una font per imprimir textos. En el nostre programa, es tracta de mostrar només paraules fent servir una font ASCII. Per exemple, si volem imprimir la paraula "magpie", la sortida hauria de ser:

                       _                  
 _____  ___  ___  ___ |_| ___             
|     || .'|| . || . || || -_|            
|_|_|_||__,||_  ||  _||_||___|            
            |___||_|                      

Si descarregueu el fitxer main.cc a la icona de nom ".CPP", veureu que la font ja ve declarada com a constant en una matriu abecedari de tipus vector<string>:

const vector<string> abecedari = { /*
                                                                 
     0      1      2      3      4      5      6      7      8   
     |      |      |      |      |      |      |      |      |   
*/  "        _               _           ___           _      _   . . .
    " ___   | |_    ___    _| |   ___   |  _|   ___   | |_   |_|  . . .
    "| .'|  | . |  |  _|  | . |  | -_|  |  _|  | . |  |   |  | |  . . .
    "|__,|  |___|  |___|  |___|  |___|  |_|    |_  |  |_|_|  |_|  . . .
    "                                          |___|              . . .
};

Cada submatriu de 5 × 7 caràcters d’abecedari conté una lletra de la font, i la majoria de lletres ocupen 5 caràcters d’ample. Tota la part sense "pintar" són espais blancs (' '). Com que hi ha algunes lletres més estretes o més amples, tenim les següents excepcions a l’amplada de 5 caràcters: la lletra "l" i la lletra "i" tenen una amplada de 3 caràcters, i la lletra "m" i la lletra "w" tenen una amplada de 7 caràcters (com a mostra teniu la paraula "magpie" de més amunt).

Així doncs, el nostre programa ha d’anar mirant cada lletra de la paraula que volem imprimir, anar a l’abecedari a buscar la lletra corresponent, i acumular les submatrius de cada lletra de la font en una matriu resultat. Un cop fet això, s’ha de mostrar la matriu resultat per pantalla.

Fes, doncs, un programa que llegeixi una seqüència de paraules sense sentinella i les mostri per pantalla usant la font ASCII donada, tal com feia la Linotip.

Observació

  • Recordeu que el tipus vector<string> és, en realitat, una matriu de caràcters, ja que es pot pensar que cada string és pràcticament com un vector<char>. Tanmateix, és important mantenir el tipus vector<string> ja que algunes operacions són més senzilles.
  • L’equivalent a vector<char>(7, 'x') és string(7, 'x'). Això t’ha de permetre inicialitzar una matriu de caràcters.
  • Es pot fer servir push_back per afegir elements a un vector, i l’operador + per fer créixer un string.
  • No rebusqueu algorismes eficients de fer aquest problema, l’únic desafiament és aconseguir imprimir les paraules.
  • Descomposeu el problema en operacions més petites que siguin funcions més còmodes i fàcils d’escriure.

Entrada

L’entrada és una seqüència de paraules sense espais, i sense sentinella.

Sortida

La sortida és la seqüència de paraules impreses en la font ASCII, cadascuna ocupant 5 línies de text. Les línies de text tenen espais en els buits de cada lletra però no hi ha espais extra al final ni entre lletres. Per tant cada paraula és exactament una concatenació de les submatrius de les lletres tenint en compte la seva amplada.

Public test cases
  • Input

    lili
    abc
    wow
    mum
    linotip
    ascii
    

    Output

     _  _  _  _ 
    | ||_|| ||_|
    | || || || |
    |_||_||_||_|
                
          _        
     ___ | |_  ___ 
    | .'|| . ||  _|
    |__,||___||___|
                   
                       
     _ _ _  ___  _ _ _ 
    | | | || . || | | |
    |_____||___||_____|
                       
                       
     _____  _ _  _____ 
    |     || | ||     |
    |_|_|_||___||_|_|_|
                       
     _  _            _    _      
    | ||_| ___  ___ | |_ |_| ___ 
    | || ||   || . ||  _|| || . |
    |_||_||_|_||___||_|  |_||  _|
                            |_|  
                    _  _ 
     ___  ___  ___ |_||_|
    | .'||_ -||  _|| || |
    |__,||___||___||_||_|
                         
    
  • Information
    Author
    PRO1
    Language
    Catalan
    Official solutions
    C++
    User solutions
    C++