Table of Contents

Tema 2 – Simulare Fermă (C++)

Publicare: 02.11.2024
Deadline: 16.11.2024, ora 23:59

Autor: Trifu Marius-Constantin

Informații generale

1. Descriere

Simulaț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 de bani.

Reguli importante:

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ă.

Aceste relații vor fi menționate în secțiunea ROTATIE a fișierului de intrare.

Cerințe:

2. Formate fișiere

2.1 Fișier de intrare: ferma.txt

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:

2.2 Fișier de ieșire: ferma.out

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
1 planteaza 00x02 morcov
3 culege 00x00
3 culege 00x01
4 culege 00x02
4 planteaza 00x00 morcov
4 planteaza 00x01 morcov
7 culege 00x00
7 culege 00x01
SUMA_FINALA: 1190

Explicație exemplu:

Observații:

  • Acțiunile trebuie să fie valide: nu poți planta dacă nu ai bani sau dacă pătratul este ocupat.
  • Nu poți culege o legumă care nu este matură sau care nu există.
  • Verificați regulile de validare pentru detalii despre rotație.

3. Reguli de validare

Constrângeri obligatorii:

1. **Rotație culturi identice:**  
   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 (trebuie să aștepți minim 3 zile sau să plantezi altă legumă).

2. **Rotație legume prietenoase:**  
   Dacă leguma A poate fi plantată după leguma B (din secțiunea ROTATIE cu B diferit de N/A), înseamnă că:
   * În pătratul unde tocmai ai cules B, poți planta A a doua zi (după ce s-a trecut cel puțin o zi de la culegere).
   * Dacă leguma A are N/A în ROTATIE, poate fi plantată după orice legumă a doua zi (exceptând regulile de culturi identice).

3. **Disponibilitate pătrat:**  
   Un pătrat este liber dacă:
   * Nu a fost niciodată plantat
   * Sau s-a cules leguma din el și s-a trecut cel puțin o zi și se respectă regulile de rotație

4. **Bani:**  
   La orice moment, banii disponibili = banii inițiali + venituri din vânzări - costuri plantare
   Suma finală de bani = banii inițiali + venituri din vânzări - costuri plantare

5. **Maturitate:**  
   O legumă poate fi culeasă doar dacă au trecut **cel puțin** `timp_cultivare` zile de la plantare

Priorități:

4. Implementare

5. Punctaj (10p)

Notă: Dacă tema nu compilează sau nu trece niciun test, va fi notată cu 0 puncte.

6. Încărcare

Link de încărcare: aici

După accept:

7. Exemple suplimentare

Exemplu complex:

ferma.txt
2 2 10 300 2
morcov 3 50 200
ceapa 2 40 160
ROTATIE 2
morcov ceapa
ceapa N/A

Strategie posibilă:

ferma.out
1 planteaza 00x00 ceapa
1 planteaza 00x01 ceapa
3 culege 00x00
3 culege 00x01
4 planteaza 00x00 morcov
4 planteaza 00x01 morcov
6 culege 00x00
6 culege 00x01
7 planteaza 00x00 ceapa
7 planteaza 00x01 morcov
9 culege 00x00
10 culege 00x01
SUMA_FINALA: 1110

Calcul sumă finală: