Am folosit un loop care are "len" iteratii, pentru a parcurge simultan cele 2 siruri ("plain" si "enc_string"). Fiecare caracter din "plain" este salvat in ah, unde i se adauga pasul, iar daca depaseste 90 ('Z'), se micsoreaza cu 26, apoi se muta in "enc_string".
Am inceput prin a verifica daca segmentul este paralel cu Ox sau cu Oy, de unde s-au desprins 2 cazuri, iar pentru fiecare am verificat coordonata carui punct este mai mare, pentru a avea un numar pozitiv ca distanta. In oricare dintre cazuri, am adaugat distanta in [eax].
Am folosit un loop cu "len - 1" iteratii, pentru a calcula distantele dintre fiecare 2 puncte. Pentru asta am transmis parametrii si am apelat functia points_distance
, dupa care am trecut la urmatoarele elemente.
Am parcurs vectorul de distante printr-un loop, iar pesntru fiecare element am calculat o serie de patrate perfecte consecutive, verificand 3 cazuri: daca patratul este egal cu distanta, in vector se pune 1, daca este mai mare, se pune 0, iar daca este mai mic, se continua iteratiile.
Am inceput prin a completa sirul "enc" cu cheia, prin repetarea sa. Apoi, am parcurs paralel sirul "enc" si "plain". Pentru fiecare pereche de caractere, daca litera din "enc" este mai mare decat cea din "plain", se face diferenta si se aduna cu 65 ('A'). In caz contrar, diferenta in modul se scade din 26, iar numarul obtinut este adunat cu 65 ('A'). Noul caracter este retinut in "enc".
Se formeaza un loop cu N/2 iteratii, in care este parcursa matricea pe contur, in felul urmator: prima linie, ultima coloana, ultima linie, prima coloana. Dupa fiecare parcurgere, se reincepe acest proces din primul element din interiorul conturului. In cazul in care N este impar, elementul din mijloc reprezinta un caz special, care este tradat ulterior. Pe masura ce se parcurge matricea, elementul curent din "plain" se mareste cu elementul curent din matrice. La final, sirul din "plain" este copiat in "enc_string".