Röviden: fontos, hogy tároljuk az előző sort, hogy össze tudjuk vetni az adott sorral, ezt két pufferrel valósítjuk meg: egyikből olvasunk, másikba írunk, majd a sor vizsgálatánál váltunk (a jelenlegi sorból lesz az "előző"). Nyomon kell azt is követni, hogy volt-e egyezés, és ha igen, akkor melyik pozíciótól kezdődően. Egy adott sor vizsgálatánál, fontos, hogy különbözik-e a két karakter:
- Ha igen: Ha eddig mindig volt egyezés, akkor megjegyezzük, hogy melyik pozíciótól kezdődően van eltérés. Ha még mindig nincs egyezés, akkor megint két ágra bomlunk: új karakterben különbözik, vagy még mindig ugyan az a karakter: első esetben bezárjuk az eddigi differenciát, és újat kezdünk, másik esetben folytatjuk.
- Ha nem: Ha eddig mindig volt egyezés, akkor jók vagyunk, ha nem, akkor most vége van egy differenciának, tehát ezt el kell tárolni.
char[] prevLine[] := feltöltjük nem színt jelentő karakterrel, mondjuk '0'-val.
char[] curLine[]
int start := -1
char ch
Ciklus j:=1-től N-ig
curLine := beolvas()
start := -1
Ciklus i:=1-től M-ig
Ha curLine[i] != prevLine[i] Akkor
Ha start = -1 Akkor
start := i
ch := curLine[i]
Különben
Ha ch != curLine[i] Akkor
ujDifferencia( j, start, i-1, ch );
start := i
ch := curLine[i]
Elágazás vége
Elágazás vége
Különben Ha start != -1 Akkor
ujDifferencia( j, start, i-1, ch )
start := -1
Elágazás vége
prevLine := curLine
Ciklus vége
Ha start != -1 Akkor
ujDifferencia( j, start, M, ch )
Elágazás vége
Ciklus vége
Nincs más dolgunk a végén mint az
ujDifferencia(sor, tol, ig, karakter) függvény által kapott
sor,
pozíciótól,
pozícióig,
karakter adatokat kiírjuk a fájlba.