Müasir şriftlər əsasən iki növə ayrılır: kontur şriftləri, burada qliflər (fərdi simvol formalı şəkillər) riyazi olaraq əyrilər toplusu kimi təsvir olunur və bitmap şriftləri, burada qliflər piksel nümunələri vasitəsilə müəyyən olunur. Şriftlərə həmçinin daxil edilmiş əlavə məlumatlar, məsələn, kerning cütləri (müəyyən qlif cütlərinin, məsələn, "AW" arasında düzgün məsafə tənzimləməsi üçün), trackinq ipucları (qliflər arası məsafənin idarə olunması üçün), antialiasing ipucları (piksel kənarlarının hamarlanması üçün) və daha çoxu əlavə edilmiş ola bilər. Müasir şriftlər sadəcə formalardan ibarət toplusundan daha çox funksiyaya malikdirlər və onların düzgün nümayiş etdirilməsi proqramlaşdırmada tez-tez rast gəlinən çətinlikdir.
Bu məsələdə biz bitmap şriftlərinə və qliflərin yerləşdirilməsinin sadə forması olan qlif sıxlaşdırılmasına (glyph packing) diqqət yetirəcəyik. Məqsəd qlifləri bir-birinə yatay olaraq ən azı bir piksel məsafə saxlayaraq maksimum dərəcədə sıx yerləşdirməkdir. Məsələn, aşağıda solda Roma əlifbasının "P" və "J" simvollarının qlifləri göstərilmişdir. Sağ tərəfdə isə onlar sıxlaşdırıldıqdan sonra verilmişdir. Qliflərin o qədər yaxın yerləşdirildiyinə, lakin yatay olaraq toxunmadığına diqqət yetirin.

Budur başqa bir nümunə. Bu halda qeyd edək ki, sonuncu qlifi ümumiyyətlə sıxlaşdırmaq mümkün deyil.

Sıxlaşdırmadan sonra fərqli qliflərə aid piksellər diaqonal və ya şaquli şəkildə bir-birinin yanında ola bilər, lakin yatay olaraq toxunmaq olmaz. Aşağıdakı nümunə piksellərin diaqonal şəkildə yanaşı ola biləcəyini göstərir. Nümunə giriş bölməsindəki "Love" test tapşırığında isə onlar şaquli olaraq yanaşı ola bilərlər.

Qlif sıxlaşdırmasının o özəlliyi var ki, şriftə "bəzəkli" qliflər əlavə etmək asandır və qlif sıxlaşdırılması avtomatik xüsusi effektlər meydana gətirir. Aşağıdakı "Toy" nümunəsinə baxın. Burada da yuxarıdakı kimi sadə sıxlaşdırma prosesi tətbiq olunub, amma nəticə daha fərqlidir:

Qlif sıxlaşdırması vaxtı bəzi nüanslar var və onlardan biri bu məsələdə əhəmiyyət kəsb edir. Aşağıda solda verilmiş nümunədə defis qlifi alt xətt qlifi ilə birləşir. "Yatayda bir piksel aralıq" qaydasına əsasən, bunlar necə sıxlaşdırılacaq? Aydındır ki, əlavə bir şey tələb olunur və bu da qlifin özündəki əlavə ipuçlarıdır. Əslində şriftlərdə kerning cütləri, trackinq ipucları və s. olur. Bizim halda, ipuçları "görünməz" piksel rolunu oynayır: bu piksellər sıxlaşdırmada nəzərə alınır, lakin ekranda göstərilmir. Aşağıda ortada olan şəkildə görünməz pikselləri açıq nöqtələr kimi göstəriblər. Buna görə də iki qlif düzgün sıxlaşdırıla bildi və nəticədə sağda göstərilən çıxış əldə olundu.

İndi isə düzgün sıxlaşdırmanın rəsmi tərifi: (1) Qliflər, müxtəlif qliflərə aid piksellərin yatayda dərhal yanaşı olmasına yol vermədən, mümkün qədər yaxın yerləşdirilir; (2) İki qlif üçün, sol qlifin eyni hündürlükdə olan istənilən pikselinin sağ qlifdə həmin hündürlükdəki istənilən pikseldən sağda yerləşməsi qadağandır.
Yuxarıdakı (2)-ci şərt vizual olaraq iki qlifi yanaşı təsəvvür etməklə asan başa düşülür: aralarında cüzi məsafə ilə qoyulublarsa, bu məsafəni sıxışdırırsınızsa, (2)-ci şərt onların piksellərinin bir-birini "ötüb keçməsinə" icazə vermir. Soldakı nümunəyə baxın. Ortadakı şəkil düzgün sıxlaşdırma deyil, çünki (2)-ci şərti pozur. Sağdakı şəkil isə düzgün sıxlaşdırmadır.

Bu məsələnin girişində sıxlaşdırılacaq qlif dəstləri verilir. Hər bir testdə bütün qliflər eyni hündürlükdə olur və testin ilk sətrində tam ədədi bu hündürlüyü göstərir. Sonrakı sətirdə sıxlaşdırılacaq qliflər verilir. Qlifdə boş piksellər nöqtə "." ilə, görünən piksellər "#" işarəsi ilə, görünməz piksellər isə "0" rəqəmi ilə göstərilir. Qliflər bir sütun aralıq boşluqla ayrılır. Girişdə həmişə bir neçə qlif veriləcək, onlardan ən azı biri ən azı bir görünən pikseldən ibarət olacaq. Hər bir qlifin sol və sağ kənarındakı sütunlarda ən azı bir boş olmayan piksel, hər bir qlifdə isə ən azı bir başqa qlifdə eyni hündürlükdə yerləşən ən azı bir boş olmayan piksel olacaq. Qliflərin ölçüsü minimum 1 \times 1, maksimum 20 \times 20-dir, bir testdə maksimum 20 qlif ola bilər. Testlər -in sıfır olduğu sətrədək davam edir.
Hər bir test üçün birinci sətrdə həmin testin nömrəsini (1-dən başlayaraq) yazın. Sonra isə girişdə verilmiş qliflərin düzgün sıxlaşdırılmış şəklini aşağıdakı kimi göstərin: boş və görünməz pikselləri "." ilə, görünən pikselləri "#" ilə işarələyin. Sol və sağ kənar boş sütunları buraxın (yəni, çıxışın həm sol, həm də sağ kənarında ən azı bir görünən piksel olmalıdır).
Nümunə 1