Donada la classe Llista que ja
coneixem, volem afegir a les nostres llistes la possibilitat d’accedir
als elements i de canviar els seus valors mitjançant un índex numèric
entre claudàtors (igual que podem fer amb les llistes de Python).
Hem fet una subclasse de Llista,
anomenada Llista_Extesa, on sobreescrivim
els mètodes heretats d’object que ens
permeten fer això. Aquests mètodes tenen com a capçalera
def __getitem__(self,index) i
def __setitem__(self,index,valor) (vegeu
el fitxer code.py). Amb aquests mètodes
sobreescrits, si lst és instància de
Llista_Extesa i
index és un enter positiu on 0
index <
lst.mida(), podrem demanar l’element a la
posició corresponent amb lst[index] o
canviar el valor emmagatzemat a aquesta posició amb
lst[index] = valor.
Un cop fet això, podem interactuar amb les instàncies de
Llista_Extesa fent, per exemple:
>>> from code import *
>>>
>>> lst = Llista_Extesa().inserir("un").inserir("dos").inserir("tres").inserir("quatre")
>>> print(lst)
un -- dos -- tres -- quatre
>>>
>>> lst[2]
'tres'
>>> lst[0]
'un'
>>>
>>> lst[2] = 3
>>> print(lst)
un -- dos -- 3 -- quatre
>>>
>>> lst[0] = 1
>>> print(lst)
1 -- dos -- 3 -- quatre
>>>
Entrada
L’entrada al programa serà una col·lecció d’elements, que formen la llista. Pot no haver cap element (llista buida).
Vegeu els exemples del joc de proves públic.
Sortida
La sortida, tal com veieu a code.py, és
una línia amb els elements de la llista separats per un guionet entre
espais, i en la línia següent els elements de la llista en ordre
invertit, també separats per un guionet entre espais.
Aquestes escriptures de la llista i de la llista invertida han estat
generades fent servir la indexació afegida en l’exercici (un cop més,
vegeu el programa principal de
code.py).
Si la llista d’entrada és buida, cal escriure
llista buida
Vegeu els exemples del joc de proves públic.
Observacions
Heu de baixar-vos el fitxer code.py
(icona de la serp). Aquest fitxer és un programa amb
tot el que cal per executar els jocs de prova públics.
Només falta, clar, el codi dels mètodes que us demanem a l’enunciat.
Aquest fitxer l’heu de completar amb el codi que falta, i això,
tot, és el que heu d’enviar al Jutge com a solució.
Dins el fitxer code.py teniu la classe
Llista, que hem treballat a l’assignatura,
i la subclasse Llista_Extesa amb les
capçaleres dels mètodes demanats per aquest enunciat. No caldrà que la
vostra solució faci cap import ni res. Tot el codi que us cal
el teniu dins de code.py.
Atenció: El cos dels mètodes demanats no pot fer
servir CAP mètode de la classe
Llista (tret de
mida, que es fa servir a
l’assert, i només aquí). Heu de
fer el que cal manipulant la implementació interna amb les instàncies de
_Node que conté la llista.
Atenció: L’eficiència en l’accés i manipulació dels
elements de les instàncies de
Llista_Extesa fent servir claudàtors NO ha
de ser la mateixa que l’eficiència de les operacions equivalents en
llistes de Python. L’accés i manipulació dels elements de les llistes de
Python fent servir claudàtors té cost
.
No serà aquest el cas dels mètodes demanats en aquest exercici.
L’eficiència i la qualitat de la solució es tindran en compte a la correcció manual.
Input
luke leia han chewie c3po r2d2 obi-wan anakin
Output
luke - leia - han - chewie - c3po - r2d2 - obi-wan - anakin anakin - obi-wan - r2d2 - c3po - chewie - han - leia - luke
Input
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Output
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24 - 25 25 - 24 - 23 - 22 - 21 - 20 - 19 - 18 - 17 - 16 - 15 - 14 - 13 - 12 - 11 - 10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1
Input
Output
llista buida
Input
007
Output
007 007
Input
peter ben may flash harry gwen mj betty liz norman felicia otto connors
Output
peter - ben - may - flash - harry - gwen - mj - betty - liz - norman - felicia - otto - connors connors - otto - felicia - norman - liz - betty - mj - gwen - harry - flash - may - ben - peter
Input
Per molts anys Andoni
Output
Per - molts - anys - Andoni Andoni - anys - molts - Per