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
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.
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.
L’entrada és una seqüència de paraules sense espais, i sense sentinella.
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.
Input
lili abc wow mum linotip ascii
Output
_ _ _ _
| ||_|| ||_|
| || || || |
|_||_||_||_|
_
___ | |_ ___
| .'|| . || _|
|__,||___||___|
_ _ _ ___ _ _ _
| | | || . || | | |
|_____||___||_____|
_____ _ _ _____
| || | || |
|_|_|_||___||_|_|_|
_ _ _ _
| ||_| ___ ___ | |_ |_| ___
| || || || . || _|| || . |
|_||_||_|_||___||_| |_|| _|
|_|
_ _
___ ___ ___ |_||_|
| .'||_ -|| _|| || |
|__,||___||___||_||_|