This is an old revision of the document!
Tema: Minarea de resurse de la asteroizi
Descriere
În această temă se simulează o misiune de minare a resurselor din asteroizi folosind rachete, fiecare cu propriile caracteristici și costuri de operare. Scopul este de a optimiza folosirea resurselor și costurilor asociate, maximizând profitul obținut din vânzarea resurselor extrase. Aceasta presupune calcularea costurilor cu combustibil, profitul brut și net, și evaluarea eficienței fiecărei rachete în funcție de performanțele sale în misiuni multiple.
Cerințe
Clasament al rachetelor:
Rachetele vor fi clasificate în funcție de profitul net obținut din misiuni, iar eficiența fiecărei rachete va fi evaluată pe baza scorului de eficiență (Profit net împărțit la numărul de misiuni realizate).
Rulare cu parametri în linia de comandă
Programul trebuie să fie rulat cu parametri în linia de comandă, unde `argv[1]` este `rachete.csv`, `argv[2]` este `asteroizi.csv` și `argv[3]` este `piata.csv`.
Exemplu de rulare:
```bash
./program rachete.csv asteroizi.csv piata.csv
Structura Fișierelor
Separatorul pentru fisierele .csv va fi caracterul ;
Fișiere de intrare
rachete.csv
| ID Rachetă | Capacitate (kg) | Consum combustibil (kg/1000 km) | Combustibil disponibil (kg) | Preț combustibil ($/kg) |
|------------|-----------------|---------------------------------|-----------------------------|-------------------------|
| R1 | 5000 | 150 | 10000 | 2 |
| R2 | 3000 | 120 | 8000 | 1.8 |
asteroizi.csv
| ID Asteroid | Resursă | Cantitate totală (kg)| Randament extracție (%) | Distanță (km) |
|-------------|-----------|----------------------|--------------------------|---------------|
| A1 | Aur | 2000 | 75 | 500 |
| A2 | Fier | 5000 | 90 | 3000 |
| A2 | Cupru | 1000 | 82 | 3000 |
Distanta este cea dintre locul unde e racheta si locatia asteroidului, pentru o calatorie pana la asteroid distanta parcursa va fi dubla deoarece racheta va face un drum dus-intors.
piata.csv
| Resursă | Preț minim ($/kg) | Preț maxim ($/kg) |
|-----------|-------------------|-------------------|
| Aur | 130 | 600 |
| Fier | 60 | 120 |
| Cupru | 120 | 220 |
Pretul unei resurse nu este constant el fluctueaza in functie de cat de mult s-a minat din acea resursa. Vezi capitolul de calcule.
Fișiere de ieșire
misiuni.csv
| ID Rachetă | ID Asteroid | Resursă | Cantitate extrasă (kg) | Combustibil consumat (kg) | Cost combustibil ($) | Profit brut ($) | Profit net ($) |
|------------|-------------|-----------|------------------------|---------------------------|----------------------|-----------------|----------------
| R2 | A1 | Aur | 1500 | 120 | 216 | 900,000 | 899,784 |
| R2 | A2 | Fier | 3000 | 720 | 1296 | 360,000 | 358,704 |
| R2 | A2 | Fier&Cupru| 2320 | 720 | 1296 | 360,400 | 359,104 |
Daca intr-o misiune minati mai multe resurse simultan de la un asteroid, scrieti resursele separate de caracterul &
profit_total.csv
| ID Rachetă | Profit brut ($) | Cost total combustibil ($) | Profit net ($) |
|------------|-----------------|----------------------------|----------------|
| R1 | 0 | 0 | 0 |
| R2 | 1,620,400 | 2808 | 1,617,592 |
profit_pe_resursa.csv
| Resursă | Cantitate extrasă (kg) | Profit brut ($) |
|-----------|------------------------|-----------------|
| Aur | 1500 | 900,000 |
| Fier | 4500 | 540,000 |
| Cupru | 820 | 180,400 |
clasament_rachete.csv
| Loc | ID Rachetă | Profit net ($) | Număr misiuni | Scor eficiență |
|-----|------------|----------------|---------------|----------------|
| 1 | R2 | 1,617,192 | 3 | 539,064 |
| 2 | R1 | 0 | 0 | 0 |
Teste
test0:
1 Asteroid, 1 Rachetă, 1 Resursă
test basic
test1:
1 Asteroid, 1 Rachetă, 2 Resurse
verificare implementare asteroid cu 2 resurse daca functioneaza
test2:
1 Asteroid, 3 Rachete, 1 Resurse
verificare implementare alegere din mai multe rachete
oricare racheta aleasa este in regula, scopul fiind sa nu fie mai multe alese
test3:
2 Asteroid, 2 Rachetă, 3 Resursă
testul dat ca exemplu pe ocw la problema
test4:
5 Asteriozi, 5 Rachete, 2 Resurse
test cu multiple variante de ales pentru cei care vor sa faca o implementare optima
test5:
1 Asteroid, 1 Rachetă, 1 Resurse
test verificare ca pretul este updatat corect
se mineaza multiple cantitati de 10000, deci pretul scade mereu pana la minim
test6:
10 Asteriozi, 4 Rachete, 30 Resurse
un test mare cu multe combinatii de resurse la asteroizi cu cantitati mari
Punctaj - 15 puncte
test 0 - 3p
test 1 - 1p
test 2 - 1p
test 3 - 1p
test 4 - 2p
test 5 - 2p
test 6 - 2p
*Total: 12 puncte pentru teste și 3 puncte pentru README.
- Depunctări: Vor exista depunctări pentru:
- Sintaxă și reguli de scriere.
- Neeliberarea memoriei.
===== Cerințe pentru README =====
- În fișierul README.md, includeți următoarele informații:
- Numele și grupa.
- Sistemul de operare și IDE-ul utilizat.
- Descrierea temei și o explicație a funcționalității programului.
- Explicația funcției `int main`: de ce este structurat astfel și cum funcționează.
- Notă: Pentru a obține punctajul maxim, programul trebuie să treacă toate cele 7 teste de verificare și să conțină un fișier README complet.
===== Calculul Prețului Actual al Resurselor =====
Prețul actual al resurselor se va calcula pe baza prețului maxim inițial, iar după fiecare vânzare de 10,000 kg de resurse, prețul va scădea cu 10%. Totuși, prețul nu va scădea niciodată sub prețul minim stabilit pentru fiecare resursă. Formula de calcul este:
1. Prețul inițial este prețul maxim din fișierul `piata.csv`.
2. Calculul Prețului Actual:
- Dacă resursa a fost vândută în cantitate de 10,000 kg sau mai mult, prețul se va reduce astfel:
```
Preț actual = Preț actual * 0.9
```
- Prețul nu poate scădea sub prețul minim:
```
Preț actual = max(Preț actual, Preț minim)
```
Astfel, la fiecare 10,000 kg de resurse vândute, prețul se va ajusta în funcție de acest calcul.
<note tip>
Exemplu: Daca am vandut in total 10,300 kg fier
* 10 000 kg fier vor fi la pretul initial
* 300 kg fier vor fi la pretul initial * 0.9
</note>
===== Calculul Consumul de Combustibil =====
Pentru fiecare misiune, consumul de combustibil se va calcula pe baza distanței și a consumului de combustibil pe 1000 km al fiecărei rachete. Având în vedere că drumul este dus-întors, distanța va trebui să fie dublată.
1. Formula pentru calculul consumului de combustibil:
```
Consum combustibil = (Distanta * 2) * (Consum combustibil / 1000)
```
Unde:
- Distanta: distanța către asteroid (din fișierul `asteroizi.csv`).
- Consum combustibil: consumul de combustibil al rachetei pe 1000 km (din fișierul `rachete.csv`).
- Multiplicăm distanța cu 2 pentru a ține cont de drumul dus-întors.
===== Calculul Profitului Brut =====
Profitul brut pentru fiecare misiune se va calcula prin înmulțirea cantității de resurse extrase cu prețul actual al resursei. Formula este:
1. Formula pentru calculul profitului brut:
```
Profit brut = Cantitate extrasă (kg) * Preț actual ($/kg)
```
Unde:
- Cantitatea extrasă este cantitatea de resursă extrasă în fiecare misiune, ținând cont de randamentul extracției.
- Preț actual este prețul actual calculat mai sus.
===== Calculul Costului cu Combustibilul =====
Costul combustibilului pentru fiecare misiune se va calcula înmulțind consumul de combustibil cu prețul combustibilului pe kilogram (din fișierul `rachete.csv`):
1. Formula pentru calculul costului combustibilului:
```
Cost combustibil = Consum combustibil (kg) * Preț combustibil ($/kg)
```
===== Calculul Profitului Net =====
Profitul net este rezultatul obținut prin scăderea costului combustibilului din profitul brut:
1. Formula pentru calculul profitului net:
```
Profit net = Profit brut - Cost combustibil
```
Acest calcul va fi realizat pentru fiecare misiune, iar totalul profitului net pentru fiecare rachetă va fi calculat prin adunarea profitului net din toate misiunile realizate de acea rachetă.
===== Calculul Eficienței Rachetelor =====
Eficiența fiecărei rachete va fi evaluată pe baza profitului net obținut și a numărului de misiuni realizate. Scorul de eficiență va fi calculat astfel:
1. Formula pentru scorul de eficiență**:
```
Scor eficiență = Profit net / Număr misiuni
```
Scorul de eficiență va ajuta la evaluarea performanței fiecărei rachete în funcție de cantitatea de profit net realizată în raport cu numărul de misiuni efectuate. O rachetă care a realizat mai multe misiuni, dar cu un profit net mic, va avea un scor de eficiență mai mic decât o rachetă care a realizat mai puține misiuni dar cu un profit net mai mare.
Aceste calcule vor ajuta la evaluarea performanței fiecărei rachete și la optimizarea procesului de extragere și vânzare a resurselor din asteroizi.