This is an old revision of the document!
🌾 Simulare Fermă - Maximizare Profit 🚜
Gestionează o fermă virtuală și maximizează profitul prin plantare strategică și rotație culturilor!
Autor: Trifu Marius-Constantin
Tehnologii:
Cerințe:
.h / .cppmakeSimulați gestionarea unei ferme pe mai multe zile. Scopul este să maximizați suma finală de bani prin plantarea și vânzarea legumelor, respectând reguli de rotație a culturilor și constrângeri financiare.
🎯 Obiectiv: Maximizează SUMA_FINALA = bani_inițiali + venituri - cheltuieli
🚫 Rotație Culturi Identice:
În același pătrat NU poți planta două culturi identice una după alta.
Exemplu: Dacă în pătratul 00×00 ai plantat morcov la ziua 1 și l-ai cules la ziua 4, nu poți planta din nou morcov în același pătrat imediat după.
Regula: Trebuie să aștepți cel puțin 3 zile de la culegere.
✅ Plante Prietenoase:
Unele legume pot fi plantate doar după alte legume specifice.
Exemplu:
Aceste relații sunt definite în secțiunea ROTATIE.
💰 Constrângeri Financiare:
📝 Atenție la format! Respectați exact structura specificată.
Format general:
| ferma.txt |
|---|
L L ZILE BANI N nume_leguma1 timp_cultivare1 cost1 pret_vanzare1 nume_leguma2 timp_cultivare2 cost2 pret_vanzare2 ... ROTATIE M leguma1 N/A leguma2 leguma1 leguma3 leguma2 leguma4 leguma1 ... |
Explicații câmpuri:
Restricții:
| ferma.txt |
|---|
3 3 10 500 4 morcov 3 50 200 ceapa 2 30 150 castravete 4 80 300 roșie 5 100 400 ROTATIE 4 morcov ceapa ceapa N/A castravete N/A roșie morcov |
Interpretare exemplu:
Format general:
| ferma.out |
|---|
ZI ACTIUNE PATRAT LEGUMA ZI ACTIUNE PATRAT LEGUMA ... SUMA_FINALA: suma |
Tipuri de acțiuni:
Format linie acțiune:
Reguli de numerotare pătrate:
| ferma.out |
|---|
1 planteaza 00x00 ceapa 1 planteaza 00x01 ceapa 3 culege 00x00 3 culege 00x01 4 planteaza 00x00 morcov 4 planteaza 00x01 morcov 7 culege 00x00 7 culege 00x01 SUMA_FINALA: 740 |
Explicație exemplu:
Programul vostru trebuie să respecte următoarele constrângeri. Scriptul de verificare verifică automat fiecare regulă!
❌ Nu poți planta aceeași legumă imediat după culegere!
| Situație | Zi Culegere | Când poți replanta aceeași legumă? |
|---|---|---|
Culegi morcov din 00×00 | Ziua 4 | Ziua 8 sau mai târziu (după 3 zile) |
Culegi ceapă din 01×01 | Ziua 10 | Ziua 14 sau mai târziu |
Regulă: Dacă culegi leguma X din pătratul P la ziua Z, NU poți planta X în P în zilele Z, Z+1, Z+2.
✅ Poți planta: altă legumă (dacă respectă ROTATIE) sau aceeași legumă după minim 3 zile.
✅ Respectă relațiile din secțiunea ROTATIE!
Exemplu:
ROTATIE 2 morcov ceapa ← Morcov poate fi plantat doar după ceapă ceapa N/A ← Ceapă poate fi plantată după orice
| Pătrat | Legumă Culeasă | Ce poți planta după? |
|---|---|---|
00×00 | ceapă (zi 3) | morcov (zi 4+) sau ceapă (zi 7+, după 3 zile) |
00×01 | morcov (zi 7) | Nimic altceva! (morcov doar după ceapă) |
Reguli:
morcov ceapa) → poate fi plantată doar după legumele specificate
Când e un pătrat LIBER pentru plantare?
| Status Pătrat | Condiții |
|---|---|
| 🆕 Niciodată folosit | Poți planta doar legume cu N/A în ROTATIE |
| ✅ După culegere | A trecut ≥1 zi + respectă rotația (regula 2) + respectă 3 zile pentru aceeași legumă (regula 1) |
| ❌ Ocupat | Așteaptă până la culegere! |
Formula sumei finale:
SUMA_FINALA = BANI_INIȚIALI + VENITURI - CHELTUIELI Unde: VENITURI = Σ (preț_vânzare pentru fiecare legumă culeasă) CHELTUIELI = Σ (cost pentru fiecare legumă plantată)
Constrângeri:
bani_curent < cost_legumăCând poți culege o legumă?
| Legumă | Timp Cultivare | Plantată Ziua | Gata de Cules Ziua |
|---|---|---|---|
| Ceapă | 2 zile | 1 | 3 (1 + 2) |
| Morcov | 3 zile | 4 | 7 (4 + 3) |
| Roșie | 5 zile | 1 | 6 (1 + 5) |
Regulă: zi_culegere ≥ zi_plantare + timp_cultivare
Argumente linie de comandă:
teste/limite_minime.txt - conține minimul de bani necesar pentru fiecare testint mainClasament Live: rezultate.eu Actualizare automată la fiecare push în GitHub!
Puncte bonus pentru top 20 în clasament (bazat pe scorul total de bani):
| Poziție | Puncte Bonus |
|---|---|
| 🥇 Locul 1 | +5p |
| 🥈 Locurile 2-3 | +4p |
| 🥉 Locurile 4-5 | +3p |
| Locurile 6-10 | +2p |
| Locurile 11-20 | +1p |
Cum funcționează:
După accept:
Laborator-POO-2025-2026/tema2-USERNAMEgit clone https://github.com/Laborator-POO-2025-2026/tema2-USERNAME.gitcd tema2-USERNAMEComenzi disponibile:
make # Compilează și rulează toate cele 18 teste make build # Doar compilează (creează executabilul) make run # Compilează și rulează ferma.txt (trebuie să existe în folder!) make clean # Curăță fișierele generate
Testare individuală:
make test1 # Rulează doar testul 1 make test5 # Rulează doar testul 5 make test-all # Rulează toate testele (același cu make)
Când rulezi un test individual (ex: make test1), vei primi:
teste/limite_minime.txt conține minimul de bani pentru fiecare testClasament Live: Accesează rezultate.eu pentru a vedea clasamentul în timp real.
Nickname auto-generat:
git push), primești un nickname random (ex: “SwiftFalcon”, “BraveDragon”)🎯 Nickname-ul tău: BraveDragonEditare nickname (opțional):
make key # Generează o cheie unică în teste/scripturi/key.txt # Dacă cheia există deja, o afișează (nu generează alta) # Apoi: git add teste/scripturi/key.txt git commit -m "Add personal key" git push # Pe rezultate.eu: # 1. Găsește-te în clasament # 2. Click pe ✏️ lângă numele tău # 3. Introdu cheia din teste/scripturi/key.txt # 4. Alege un nickname nou (3-30 caractere, alfanumeric + . _)
make key oricând ulterior, îți va afișa cheia generată anterior (nu creează una nouă).
✨ Testare și trimitere automată la fiecare git push!
Ce se întâmplă când faci push:
make build)rezultate.euVezi rezultatele:
Output GitHub Actions:
✓ VERIFICARE REUSITA 🎉 Fisierul este valid! Suma finala: 10 702 303 RON ✓ Rezultate trimise cu succes la server! 🎯 Nickname-ul tău: BraveDragon Vezi clasamentul pe: https://rezultate.eu
| ferma.txt |
|---|
2 2 10 300 2 morcov 3 50 200 ceapa 2 40 160 ROTATIE 2 morcov ceapa ceapa N/A |
Strategie optimă:
| ferma.out |
|---|
1 planteaza 00x00 ceapa 1 planteaza 00x01 ceapa 3 culege 00x00 3 culege 00x01 4 planteaza 00x00 morcov 4 planteaza 00x01 morcov 7 culege 00x00 7 culege 00x01 8 planteaza 00x00 ceapa 8 planteaza 00x01 ceapa 10 culege 00x00 10 culege 00x01 SUMA_FINALA: 1040 |
Calcul sumă finală:
⚡ Strategii de Maximizare:
(preț_vânzare - cost) / timp_cultivare✅ Checklist Înainte de Submit:
make build)make)📁 Fișiere Importante:
teste/limite_minime.txt - limite minime pentru fiecare testteste/scripturi/key.txt - cheia ta unică (opțional, pentru editare nickname)Makefile - comenzi de compilare și testare🔗 Link-uri Utile:
—