Contact și feedback

Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.


Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.


Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

Centrul de ajutor » Propune probleme

Ghidul propunătorului: cum să alcătuiești o problemă bună

Dacă ai probleme de informatică pe care vrei să le publici în colecția platformei, poți să le propui chiar acum.

InfoAs dorește ca, prin problemele sale, să asigure cerințe de toate dificultățile, compuse din enunțuri bine-scrise și indicații ușor de înțeles. Așadar punem preț până și pe cele mai mici detalii, pentru a rămâne constant la standardele înalte pe care ni le dorim. Avem o regulă ușor de reținut: calitate > cantitate.

Acest ghid explică ce valorificăm exact și cum putem să compunem probleme de calitate.

Vom parcurge toate detaliile problemei, explicând regulile acestora.

Reguli generale pentru texte

Pentru orice text, sunt esențiale următoarele reguli:

  • Folosește diacritice. Diacriticile ajută la ușurința înțelegerii textului — plus, fac parte din limba română!
  • Folosește caracterele corecte. Unele tastaturi conțin diacritice greșite pentru limba română (exemple mai jos). Diacriticile greșite pot aduce confuzie în rândul motoarelor de căutare, având astfel un impact negativ asupra platformei:
    • Iată setul de diacritice corecte ale limbii române: ă, â, î, ș, ț, Ă, Â, Î, Ș, Ț;
    • Alte diacritice asemănătoare, dar greșite: ş, Ş, ţ, Ţ (au sedilă dedesubt);
  • Folosește o exprimare corectă. Folosește acest ghid sau alte surse de pe internet dacă ești confuz. Câteva exemple:
    • Andrei și-a cumpărat n creioane, pe care are de gând să le folosească (pe care);
    • Mihaela creează câte n benzi desenate în fiecare zi (creează);
  • Scrie corect, cu semne de punctuație corespunzătoare.
    • Nu pune mai multe spații între cuvinte;
    • După o propoziție, urmează un punct (.) și un spațiu ( );
    • Fiecare propoziție și nume încep printr-o literă majusculă (mare);
    • Într-o listă, elementele se termină în punct și virgulă (;), mai puțin ultimul element, care se termină în punct (.);
    • Limbajul folosit trebuie să fie formal și obiectiv;
    • Respectați și celelalte reguli de scriere.

Reguli generale pentru coduri

Secvențele de cod sunt la fel de importante precum cele de text — așadar, am stabilit următoarele reguli:

  • Aspectele generale ale codului trebuie comentate — fiecare pas important este însoțit de un comentariu scurt, descriind ce face codul;
  • Instrucțiunile sunt indentate corect (în CodeBlocks selectați Format use AStyle pentru autoindentare), în două moduri (de dorit să nu se combine cele două moduri):
    • taburi (care pe platformă sunt afișate ca 4 spații);
    • 4 spații (nici mai multe, nici mai puține);
  • Operatorii și operanzii sunt separați prin exact un spațiu, excepție făcând operatorii de incrementare sau decrementare. Exemple:
    • i += 2, a = a * b, x != y;
    • i++, --j;
  • Se folosesc fluxuri de date (streamuri) în rezolvări. Exemple:
    • corect: cin >> a >> b;
    • greșit: scanf("%d %d ", &a, &b);
  • Variabilele folosite local se declară local;
  • De dorit: acoladele de început nu se trec pe rând nou.

Dacă aceste reguli se respectă parțial, sau chiar deloc, poate să dureze mai mult timp până când problema este publicată, până când un administrator corectează greșelile.

1. Datele problemei

Aceste informații vor fi vizibile pe pagina problemei.

Denumirea problemei

Fiecare problemă trebuie să fie intitulată în vreun fel, pentru a fi identificabilă ușor.

Numele trebuie să fie relevant pentru problemă: de exemplu, o problemă despre algoritmul Fill ar putea fi denumită simplu Fill sau Algoritmul fill. Se acceptă și alte nume pentru problemă — de pildă, problemele de olimpiadă au nume care pot fi nerelevante cu rezolvarea problemei sau cu categoria din care fac parte, dar sunt ușor de reținut și au legătură cu enunțul: Buldo, Castel, etc.

Câteva aspecte de urmărit:

  • numele poate conține doar litere, cifre și spații;
  • numele poate conține mai multe cuvinte; acestea trebuie despărțite prin câte un singur spațiu;
  • numele poate începe doar prin literă;
  • în cazul problemelor cu denumiri generice, dacă deja există o problemă cu aceeași denumire, începând cu a doua problemă, denumirile vor fi numerotate; adică:
    • prima problemă: Inserare vector;
    • a doua problemă: Inserare vector 2;
    • a treia problemă Inserare vector 3;
    • etc.
  • în cazul problemelor cu denumiri generice, primul cuvânt începe cu o majusculă, iar restul cuvintelor sunt scrise cu litere mici.

Rezumatul problemei

Rezumatul este afișat mai rar (spre exemplu, în momentul în care un profesor vrea să adauge o problemă la un material, la o temă sau la un test), însă are scop descriptiv în legătură cu cerința problemei și nu trebuie neglijată.

Rezumatul trebuie să fie în jur de 30 – 40 de cuvinte lungime, desigur în funcție de lungimea cerinței, explicând într-o propoziție sau două ce trebuie făcut în problemă.

Enunțul problemei

Enunțul problemei este opțional. În cazul în care, pentru rezolvarea cerinței, este nevoie de o poveste sau sunt necesare clarificări ori definiții, acestea se completează aici.

Majoritatea problemelor de olimpiadă sau din concursuri folosesc enunțul problemei pentru context.

Cerința problemei

Cerința este cea mai importantă parte a problemei. Aceasta explică în detaliu:

  • ce date de intrare se dau;
  • ce trebuie rezolvatorii să facă cu datele de intrare;
  • alte informații importante.

Datele de intrare ale problemei

Datele de intrare explică într-un mod logic cum se citesc datele problemei:

  • modul de input (consolă/fișier/etc.);
  • ordinea datelor de intrare (mai întâi numărul n, după care cele n numere), cum sunt separate datele de intrare (prin câte un spațiu, pe câte un rând);
  • alte informații necesare;
  • de dorit: explicarea cu precizie, ca și cum nu s-ar da exemple. Fără mesaje de genul: vedeți exemplul pentru mai multe detalii.

Datele de ieșire ale problemei

Datele de ieșire explică într-un mod logic cum se afișează datele problemei:

  • modul de output (consolă/fișier/etc.);
  • ordinea datelor de ieșire (mai întâi numărul x, după care cele n numere modificate), cum sunt separate datele de ieșire (prin câte un spațiu, pe câte un rând);
  • alte informații necesare;
  • de dorit: explicarea cu precizie, ca și cum nu s-ar da exemple. Fără mesaje de genul: vedeți exemplul pentru mai multe detalii.

Restricții și precizări

Secțiunea de restricții și precizări oferă informații despre:

  • limitele variabilelor, chiar dacă au apărut deja în cerință sau în enunț (1 ≤ n ≤ 2.000.000.000);
  • numerele cu mai mult de 4 cifre se vor afișa:
    • ori cu un punct la fiecare trei cifre (1000000 -> 1.000.000);
    • ori sub forma 10^x (Ex. 1000000 -> 10^6);
  • in cazul problemelor cu subtaskuri, se vor scrie fiecare cu propriile lor limite de variabile.

Exemple

Indicarea datelor de intrare și de ieșire corespunzătoare. Trebuie să respecte semantica precizată la secțiunile Date de intrare și Date de ieșire respectiv.

Se recomandă 1 - 2 exemple.

Explicația exemplelor

Explicația clară a exemplelor — cum am ajuns la datele de ieșire pornind de la cele de intrare?

Fiecare exemplu trebuie să vină cu explicații.

Limite de memorie

Rezolvările trebuie să vină cu două limite de memorie, pe care, pentru simplitate, le vom exprima în MB:

  • memorie totală (valoare implicită: 64 MB): memoria totală folosită în rezolvare, pentru variabile (simple, tablouri unidimensionale/bidimensionale, containere STL, ale structuri de date liniare/de tip arbore). Pentru probleme obișnuite, setați valoarea 64 MB. Nu trebuie să depășească 256 MB.
  • memorie folosibilă pentru stivă (valoare implicită: 8 MB): memoria totală care se poate folosi doar în stivă (pe scurt, funcții și variabile locale). Trebuie să fie mai mică sau egală cu memoria totală (deoarece se scade din aceasta). Pentru probleme obișnuite, setați valoarea 8 MB. Nu trebuie să depășească 128 MB.

Limită de timp

Reprezintă, în secunde, timpul maxim alocabil pentru rularea fiecărui test în parte. Se pot folosi valori cu zecimale. Valoarea implicită este de 0.1 secunde, iar valoarea maximă este de 3 secunde. Pentru probleme obișnuite, se recomandă 0.1 secunde, dar pentru probleme de backtracking sau recursivitate se recomandă calibrarea valorii în funcție de mărimile testelor (nu mai mult de 3 secunde pentru fiecare test).

2. Indicații și rezolvări

InfoAs este o comunitate de oameni care vor să învețe — și de multe ori vor fi blocați la câte o problemă. De aceea, pentru absolut fiecare problemă în parte vrem să punem accent în mod special pe indicații și pe rezolvare. Multe resurse de pe internet neglijează aceste aspecte, creând confuzie, iar noi nu dorim să facem același lucru.

Vă îndemnăm să urmăriți probleme similare din capitolul ales pentru a înțelege mai bine standardele impuse.

Indicații

Indicațiile explică în mod clar atât procesul de gândire, cât și indicațiile în sine.

Nu se vor folosi secvențe de cod (doar în cazul în care problema este preluată), în cel mai rău caz se va folosi pseudocod.

Se acceptă imagini.

Pentru probleme ușoare, în care de cele mai multe ori nu există vreo soluție optimă și așadar nu este nevoie de un proces de gândire, putem să afișăm direct indicațiile în sine, astfel:

  • primul alineat al indicațiilor va conține un scurt rezumat într-o frază a rezolvării;
  • următoarele alineate conțin rezolvarea precisă, pas cu pas.

Pentru celelalte probleme, în care o soluție naivă nu obține punctajul maxim, trebuie menționat și procesul de gândire. Dacă există mai multe soluții pentru o problemă, se vor prezenta fiecare (separate prin alineate), iar pentru fiecare soluție în parte se va da și rezolvarea (la secțiunea de rezolvare). Astfel, avem următoarea structură:

  • primele alineate conțin observații care explică de ce nu funcționează soluția naivă (pe scurt);
  • prima soluție:
    • primul alineat conține un scurt rezumat într-o frază a soluției;
    • urmează, pe următoarele alineate, soluția exactă, pas cu pas.
  • a doua soluție:
    • etc.

Rezolvare

Rezolvarea (sau rezolvările, în cazul în care sunt mai multe) trebuie să fie de maximum 10 KB (10240 bytes), să obțină punctaj maxim la problemă (adică 100 de puncte), și să respecte regulile gramatice ale unui cod bun, explicate la începutul acestui ghid.

Alte aspecte

Dacă mai aveți întrebări sau sugestii despre cum se compune o problemă calitativă, ne puteți contacta. Mulțumim mult pentru interesul în extinderea comunității InfoAs!


Ultima actualizare a acestui articol a avut loc pe data de 07 septembrie 2021, 03:00.