Skip to content

Stefano-Civelli/ProgettoAPI_2019-2020

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 

Repository files navigation

ProgettoAPI_2019-2020

Final project for the Algorithm and Principles of Computer Science Course.

Requirements

Il progetto consiste nell’implementare un semplice editor di testi. L’editor considera un documento come una sequenza di righe, di dimensione arbitraria, numerate a partire da uno.

L’interfaccia dell’editor è costituita da comandi testuali, terminati da un carattere di “a capo”. I comandi possono essere seguiti da una porzione di testo, costituita da una o più righe, terminata da un carattere . (punto) che compare come unico carattere sulla riga successiva. I comandi sono costituiti da un’unica lettera, preceduta opzionalmente da uno o due numeri interi. L’interfaccia dell’editor è liberamente ispirata a quella del tradizionale editor ed. In alcuni comandi, gli interi che compaiono in essi rappresentano degli speci- ficatori di indirizzo. Più precisamente, uno specificatore di indirizzo è un numero n, espresso in decimale, che indica l’indirizzo della n-esima riga; la prima riga del testo ha indirizzo 1. I comandi supportati sono i seguenti, con la convenzione che ind1,ind2 indicano due specificatori di indirizzo tali che ind1  ind2 e le parentesi tonde sono introdotte per semplicità di lettura di questo testo, ma non incluse nel comando:

• (ind1,ind2)c

Cambia il testo presente alle righe comprese tra ind1 ed ind2 (estremi
inclusi). Il testo che segue il comando deve essere fatto di un numero di
righe pari a ind2-ind1+1. ind1 deve essere o un indirizzo effettivamente
presente nel testo, oppure il primo indirizzo dopo l’ultima riga presente
nel testo (o 1 se il testo è ancora vuoto).

• (ind1,ind2)d

Cancella le righe comprese tra ind1 ed ind2 (estremi inclusi), spostando
verso l’alto le righe successive a quella di indirizzo ind2 (se ce ne sono).
La cancellazione di una riga che non esiste nel testo non ha alcun effetto.

• (ind1,ind2)p

Stampa le righe tra ind1 ed ind2, inclusi. Laddove non sia presente
una riga nel testo nella posizione da stampare, viene stampata una riga
contenente il solo carattere ’.’ seguito da un “a capo”.

• (numero)u

    Effettua l’annullamento (undo) di un numero di comandi (c o d) pari a quello specificato
    tra parentesi tonde (laddove numero è un intero strettamente maggiore di zero). Una sequenza 
    di comandi di undo consecutivi annulla un numero di passi pari alla somma dei passi specificati 
    in ognuno di essi. Se il numero di comandi di cui effettuare l’annullamento è superiore a quello 
    dei comandi eseguiti, vengono annullati tutti i passi. L’esecuzione di un comando di modifica 
    del testo (c, d) dopo un undo cancella gli effetti dei comandi annullati definitivamente.
    Si noti che nel numero dei comandi da annullare si contano anche i comandi che non hanno effetto
    (per esempio la cancellazione di un blocco di righe che non esistono).

• (numero)r

Annulla l’effetto di undo per un numero di comandi pari a numero a partire
dalla versione corrente (funzione di redo). Si noti che numero deve essere
un intero strettamente maggiore di zero. 
Una riga di testo fornita in ingresso all’editor può contenere al massimo 1024
caratteri.

Test cases

Task Commands Time Limit Memory limit
WriteOnly c 7.4 s 3.00 GiB
BulkReads c 1.250 s 240 MiB
TimeForAChange c, d 2.100 s 540 MiB
AlteringHistory c, d, u 2.100 s 400 MiB
RollingBack c, d, u, r 2.400 s 550 MiB
RollerCoaster c, d, u, r 2.700 s 1.03 GiB
Laude c, d, u, r 2.000 s 340 MiB

Tools Used:

  • terminal
  • sublime text
  • blocco note
  • Debugging: printf()

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages