Autor: Petru Dimitriu
În cadrul unui spectacol nocturn, o formație de drone execută o mișcare sincronizată într-un plan vertical. Dronele se deplasează simultan în aceeași direcție, menținând formația pe parcursul deplasării.
În timpul zborului, fiecare dronă emite periodic scântei colorate în toate direcțiile din jurul ei. Aceste scântei reprezintă singurul indiciu vizual al poziției dronelor la un moment dat.
Pentru monitorizarea spectacolului și detectarea eventualelor incidente, un sistem automat capturează periodic instantanee ale spectacolului și înregistrează pozițiile scânteilor observate în fiecare instantaneu.
Pe baza acestor observații, se dorește:

Pentru rezolvarea problemei este disponibil fișierul dataset.csv, care conține observațiile colectate de sistemul de monitorizare.
Fiecare înregistrare din acest fișier descrie poziția unei scântei detectate într-un anumit instantaneu și conține următoarele câmpuri:
Jan 26, 2026, 12:00:00 AM;Într-un instantaneu pot apărea mai multe scântei, iar fiecare dronă poate genera mai multe scântei în jurul poziției sale.
Determinați numărul de instantanee distincte din setul de date.
Determinați numărul de drone din formație. Este garantat că pentru fiecare instantaneu avem același număr de drone.
Pentru fiecare moment pentru care există un instantaneu în setul de date, estimați poziția fiecărei drone.
Pentru fiecare instantaneu trebuie determinate exact atâtea poziții câte drone considerați că există în formație.
Determinați pozițiile dronelor la momentul:
Jan 26, 2026, 12:08:20 AM
Presupuneți că dronele își continuă deplasarea neabătut, în aceeași direcție și cu aceeași viteză.
Fișierul de submisie trebuie să fie un fișier CSV cu exact următoarele coloane:
id,subtaskID,answer
Valorile permise pentru subtaskID sunt:
task1task2task3task4idPentru task-urile globale, coloana id trebuie să fie:
GLOBAL
Pentru pozițiile dronelor, id trebuie să aibă forma:
<timestamp>|<droneID>
unde:
timestamp este momentul instantaneului;droneID este un identificator ales de concurent pentru organizarea propriului răspuns.droneID nu trebuie să corespundă unei numerotări oficiale. Evaluarea pentru task-urile 3 și 4 este invariantă la permutarea identificatorilor, deoarece pozițiile sunt asociate geometric.
Exemple de identificatori valizi:
Jan 26, 2026, 12:00:03 AM|0
Jan 26, 2026, 12:00:03 AM|1
Jan 26, 2026, 12:08:20 AM|4
answeranswer trebuie să fie un număr întreg:
answer trebuie să aibă forma:
<x>|<y>
unde:
x este coordonata orizontală estimată;y este coordonata verticală estimată.Exemple de valori valide:
54.581|68.31
132.61|179.141
submission.csvid,subtaskID,answer
GLOBAL,task1,50
GLOBAL,task2,5
"Jan 26, 2026, 12:00:03 AM|0",task3,"54.581|68.31"
"Jan 26, 2026, 12:00:03 AM|1",task3,"176.592|67.15"
"Jan 26, 2026, 12:08:20 AM|0",task4,"132.61|179.141"
"Jan 26, 2026, 12:08:20 AM|1",task4,"254.621|177.981"
Se verifică egalitatea exactă între valoarea trimisă și răspunsul corect.
Se verifică egalitatea exactă între valoarea trimisă și răspunsul corect.
Pentru task-urile 3 și 4, fiecare poziție estimată este comparată cu pozițiile reale folosind o potrivire geometrică.
O poziție este considerată corect estimată dacă, după asociere, sunt îndeplinite simultan:
|x_pred - x_true| ≤ 0.7
|y_pred - y_true| ≤ 0.7
Asocierea între pozițiile trimise și pozițiile reale se face astfel încât numărul total de poziții corecte să fie maxim. Ordinea rândurilor și valorile droneID nu influențează scorul.
Dacă pentru un timestamp lipsesc poziții, doar pozițiile corect asociate dintre cele existente pot primi punctaj. Dacă sunt trimise poziții în plus, acestea nu aduc punctaj suplimentar.
Pentru fiecare timestamp observat din setul de date, evaluatorul calculează câte poziții au fost estimate corect.
Dacă notăm cu:
correct_task3 - numărul total de poziții corect estimate la toate timestampurile evaluate;total_task3 - numărul total de poziții reale pentru timestampurile evaluate,atunci scorul pentru task 3 este:
score_task3 = 60 × correct_task3 / total_task3
Dacă notăm cu:
correct_task4 — numărul de poziții corect estimate la momentul viitor;total_task4 — numărul total de poziții reale la momentul viitor,atunci scorul pentru task 4 este:
score_task4 = 10 × correct_task4 / total_task4