IAP #15: Task tagging

Aceasta pagina descrie o propunere pentru echipa infoarena. Informatiile prezentate aici nu reprezinta planuri oficiale ale Asociatiei infoarena decat daca propunerea este adoptata.
Data2009-11-26
Autor(i)bogdan2412Bogdan-Cristian Tataroiu bogdan2412
StareAPROBAT

Abstract

Se propune crearea unui sistem prin care fiecarei probleme ii vor fi asociate informatii sub forma de taguri si a unui sistem de cautare bazat pe aceste taguri.

Motivatie

Arhiva de probleme devine din ce in ce mai mare si din ce in ce mai greu de navigat. Un astfel de sistem ar ajuta utilizatorii sa filtreze mult mai usor probleme in functie de mai multe informatii.

Propun ca urmatoarele informatii sa fie asociate fiecarei probleme:

  • Autorul sau autorii problemelor (daca o problema a fost propusa de catre mai multi autori, fiecare autor va avea un tag separat).
  • Concursul (si runda) la care a fost data problema. Pentru problemele date la concursuri pe infoarena ar fi bine de mentinut si un tag cu grupa de varsta la care a fost data problema (din nou, daca o problema a fost data la mai multe grupe de varsta, fiecare grupa de varsta va avea un tag separat).
    • Spre exemplu tagurile asociate problemei vrejuri ar fi "Algoritmiada 2010", "Algoritmiada 2010, Runda 1", "Algoritmiada 2010, Runda 1, 9-10"
  • Cunostintele necesare rezolvarii problemelor. In aceasta categorie intra orice fel de algoritm classic cunoscut (un punct bun de plecare ar fi Training Path).
    • Propun sa impartim aceste taguri in doua categorii: "Generale" (Grafuri, Programare Dinamica, Greedy, Structuri de date, Geometrie) si "Specifice" (Deque, Arbori echilibrati, Codul Gray, Minimal enclosing circle). Tag-urile generale nu iti ofera foarte multe informatii care ar putea strica farmecul problemelor, in timp ce cele "specifice" iti zic exact ce algoritmi sunt necesari pentru rezolvarea problemei. Fiecare din tagurile "specifice" se va incadra intr-o categorie denumita de un tag general. (spre exemplu Deque intra sub Structuri de date)
    • In momentul in care utilizatorul deschide o problema, tagurile sunt ascunse by default. Daca acesta vrea un hint de rezolvare, ii aratam intai tagurile generale. Daca vrea si mai multe hinturi, ii aratam toate tagurile.

Implementare

Un astfel de sistem implica adaugarea unei noi coloane in tabelul ia_tags sau ia_task_tags care sa mentina pentru fiecare tag de ce tip este. Pentru a putea face o interfata frumoasa, ne trebuie sa stim pentru fiecare tag daca el este pentru:

  • un "autor"
  • un "concurs"
  • o "runda din concurs"
  • o "grupa de varsta"
  • o "categorie de algoritmi" (tag-urile de cunostinte generale)
  • un "algoritm".

Interfata de filtrare dupa taguri ar trebui sa-ti dea o lista frumoasa cu toate tagurile pentru un autor, concurs, algoritm etc. Datorita separarii intre taguri de "concurs", de "runda" si de "grupa de varsta", odata ce utilizatorul a selectat un concurs dupa care vrea sa filtreze i se da optiunea de a filtra si dupa o runda a acelui concurs (daca acesta doreste), si dupa aceea i se da optiunea de a selecta si o anumita grupa de varsta.

Feedback

remote content