SkylineBot

El projecte SkylineBot per GEI-LP (edició primavera 2020).

skyline

L’skyline d’una ciutat mostra una vista horizontal dels seus edificis.

L’objectiu general de la pràctica consisteix en desenvolupar un chatbot en Telegram per a la manipulació d’Skylines via un intèrpret.

Llenguatge

Abans de començar a detallar el que s’espera, anem a veure un exemple d’interacció amb el nostre chatbot intèrpret.

Exemple d’interacció

/start

La comanda /start s’encarrega de fer totes les inicialitzacions pertinents i donar el missatge de benvinguda.

/author

La comanda /author ens dóna la informació sobre l’autor del bot.

a := (1, 2, 3)

Amb l’expressió (1, 2, 3) estem creant un edifici que va desde la posició horitzontal 1 a la 3 i que té una alçada de 2. Amb l’operador := estem assignant l’edifici a l’identificador a. De fet, estem creant una skyline amb un únic edifici.

El resultat que dona l’intèrpret és una representació de l’skyline juntament amb el còmput de la seva àrea i alçada.

a := a + (3, 4, 6)

En aquest cas estem afegint un edifici nou (3, 4, 6) a l’skyline anterior mitjançant l’operador +.

a := a * 3

Amb l’operador * i un nombre natural podem replicar l’edifici tantes vegades com especifiquem.

-a)

També podem reflectir un skyline. Noteu que en aquest cas no estem assignant res, només preguntant pel resultat d’una expressió.

Notació del llenguatge

El llenguatge permet els tipus d’operacions següents:

En la creació d’edificis ha de controlar que xmax sigui més gran que xmin i que no es donin edificis amb alçades negatives.

La taula següent mostra la prioritat d’operadors de més gran a més petita:

operador descripció
( ) parèntesis
- mirall
* intersecció i replicació
+ - unió i desplaçaments

El llenguatge admet l’ús d’identificadors i d’assignacions mitjançant l’operador :=. Els identificadors han de ser una lletra seguida de zero o més lletres o dígits.

Tasques

La vostra pràctica ha de contenir els components que es detallen a continuació.

Classe Skyline

Dissenyeu una classe Skyline per a la gestió dels skylines.

Cap operació pot tenir un cost quadràtic amb el nombre d’edificis. Per exemple, una configuració {100000,20,3,1,10000} no hauria de trigar més de 30 segons.

Gramàtica

Definiu la part lèxica (tokens) i sintàctica (gramàtica). Feu la gramàtica per a ANTLR4 . La regla inicial de la gramàtica ha de ser:

grammar Skyline;

Visitor

Definiu un visitor per a l’avaluació d’expressions del llenguatge descrit anteriorment.

Nota: caldrà utilitzar algun tipus de taula de símbols per gestionar les assignacions i els identificadors.

Telegram

La vostra tasca consisteix en implementar un Bot de Telegram que interactui textualment i gràficament amb els components que es detallen a continuació.

Noteu que les dades han de ser guardades per a cada usuari. El bot ha de funcionar amb diversos usuaris treballant al mateix temps amb dades independents entre ells.

Comandes del bot

El vostre Bot ha d’entendre i contestar correctament les comandes següents:

Intèrpret

Feu un intèrpret que interactui amb l’usuari com a l’exemple mostrat a l’inici del document, mitjançant el MessageHandler del python-telegram-bot.

Llibreries

Utilitzeu les llibreries de Python següents:

Podeu utilitzar lliurament les llibreries estàndard de Python, però si no són estàndards, heu de demanar permís als vostres professors (que segurament no us el donaran).

Referències

Lliurament

Heu de lliurar la vostra pràctica al Racó. Només heu de lliurar un fitxer ZIP que, al descomprimir-se generi:

Els vostres fitxers de codi en Python han de seguir les regles d’estı́l PEP8, tot i que podeu oblidar les restriccions sobre la llargada màxima de les lı́nies. Podeu utilitzar el paquet pep8 o http://pep8online.com/ per assegurar-vos que seguiu aquestes regles d’estı́l. L’ús de tabuladors en el codi queda prohibit (zero directe).

El termini de lliurament és el dilluns 8 de juny a les 23:59 CEST.