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ó
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.vector<char>(7, 'x')
és string(7, 'x')
. Això
t’ha de permetre inicialitzar una matriu de caràcters.push_back
per afegir elements a un vector, i l’operador +
per fer créixer un string
.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.
Input
lili abc wow mum linotip ascii
Output
_ _ _ _ | ||_|| ||_| | || || || | |_||_||_||_| _ ___ | |_ ___ | .'|| . || _| |__,||___||___| _ _ _ ___ _ _ _ | | | || . || | | | |_____||___||_____| _____ _ _ _____ | || | || | |_|_|_||___||_|_|_| _ _ _ _ | ||_| ___ ___ | |_ |_| ___ | || || || . || _|| || . | |_||_||_|_||___||_| |_|| _| |_| _ _ ___ ___ ___ |_||_| | .'||_ -|| _|| || | |__,||___||___||_||_|