feat: Initial commit
This commit is contained in:
122
Laboratorio 4/Esercizio 4/main.c
Normal file
122
Laboratorio 4/Esercizio 4/main.c
Normal file
@@ -0,0 +1,122 @@
|
||||
// Laboratorio 4 - Esercizio 4 - item.c
|
||||
// Matteo Schiff - s295565
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
enum Pietra{zaffiro, rubino, topazio, smeraldo};
|
||||
|
||||
// Ho messo queste variabili globali per diminuire il numero di parametri
|
||||
// di `esploraSoluzioni` per migliorarne la leggibilità
|
||||
// Questi numeri sono costanti per ogni set
|
||||
int vz, vr, vt, vs, max_rip;
|
||||
|
||||
void esploraSoluzioni(int z, int r, int t, int s, int nz, int ns, int cur_rip, int len, int val, int * tmp, int * max, int*maxlen, int * sol) {
|
||||
int added = false;
|
||||
if (z > 0 && (nz +1) <= ns) {
|
||||
tmp[len] = zaffiro;
|
||||
if (len == 0 || tmp[len - 1] == topazio) {
|
||||
esploraSoluzioni(z-1,r,t,s,nz+1,ns,1,len +1,val+vz,tmp,max,maxlen,sol);
|
||||
added = true;
|
||||
}
|
||||
if (len != 0 && tmp[len - 1] == zaffiro && cur_rip < max_rip) {
|
||||
esploraSoluzioni(z-1,r,t,s,nz+1,ns,cur_rip+1,len +1,val+vz,tmp,max,maxlen,sol);
|
||||
added = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (s > 0) {
|
||||
tmp[len] = smeraldo;
|
||||
if (len == 0 || tmp[len - 1] == rubino) {
|
||||
esploraSoluzioni(z,r,t,s-1,nz,ns+1,1,len +1,val+vs,tmp,max,maxlen,sol);
|
||||
added = true;
|
||||
}
|
||||
if (len != 0 && tmp[len - 1] == smeraldo && cur_rip < max_rip) {
|
||||
esploraSoluzioni(z,r,t,s-1,nz,ns+1,cur_rip+1,len +1,val+vs,tmp,max,maxlen,sol);
|
||||
added = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (r > 0 && (len == 0 || (tmp[len - 1] == zaffiro || tmp[len - 1] == topazio))) {
|
||||
tmp[len] = rubino;
|
||||
esploraSoluzioni(z,r-1,t,s,nz,ns,1,len +1,val+vr,tmp,max,maxlen,sol);
|
||||
added = true;
|
||||
}
|
||||
|
||||
if (t > 0 && (len == 0 || (tmp[len - 1] == smeraldo || tmp[len - 1] == rubino))) {
|
||||
tmp[len] = topazio;
|
||||
esploraSoluzioni(z,r,t-1,s,nz,ns,1,len +1,val+vt,tmp,max,maxlen,sol);
|
||||
added = true;
|
||||
}
|
||||
|
||||
// se non è possibile più aggiungere pietre, ho raggiunto la lunghezza massima ottenibile dal ramo
|
||||
if (!added) {
|
||||
if (val >= *max) {
|
||||
*max = val;
|
||||
*maxlen = len;
|
||||
for (int i = 0; i < len; i++) {
|
||||
sol[i] = tmp[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void solveCase(int z, int r, int t, int s) {
|
||||
int maxL = z+r+t+s;
|
||||
int max = 0;
|
||||
int maxlen = 0;
|
||||
int * tmp = malloc(maxL * sizeof(int));
|
||||
int * sol = malloc(maxL * sizeof(int));
|
||||
|
||||
printf("zaffiri = %d (valore: %d), rubini = %d (valore: %d), topazi = %d (valore: %d), smeraldi = %d (valore: %d); numero pietre = %d {max_rip = %d}\n", z, vz,r,vr,t,vt,s,vs,maxL, max_rip);
|
||||
|
||||
esploraSoluzioni(z,r,t,s,0,0,0,0,0,tmp,&max,&maxlen,sol);
|
||||
|
||||
printf("Collana con valore massimo %d, lunghezza %d\n", max, maxlen);
|
||||
for(int i = 0; i < maxlen; i++) {
|
||||
switch (sol[i])
|
||||
{
|
||||
case zaffiro:
|
||||
printf("z ");
|
||||
break;
|
||||
case rubino:
|
||||
printf("r ");
|
||||
break;
|
||||
case smeraldo:
|
||||
printf("s ");
|
||||
break;
|
||||
case topazio:
|
||||
printf("t ");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
putc('\n', stdout);
|
||||
fflush(stdout);
|
||||
free(tmp);
|
||||
free(sol);
|
||||
}
|
||||
|
||||
int main() {
|
||||
int z, r, t, s, N = 0;
|
||||
|
||||
FILE *fp;
|
||||
|
||||
if ((fp = fopen("test_set.txt", "r")) == NULL)
|
||||
{
|
||||
puts("Impossibile aprire il file");
|
||||
return 1;
|
||||
}
|
||||
|
||||
fscanf(fp, "%d", &N);
|
||||
|
||||
for (int i = 0; i < N; i++) {
|
||||
fscanf(fp, " %d %d %d %d %d %d %d %d %d", &z, &r, &t, &s, &vz, &vr, &vt, &vs, &max_rip);
|
||||
printf("Test case %d\n", i+1);
|
||||
solveCase(z,r,t,s);
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
21
Laboratorio 4/Esercizio 4/test_set.txt
Normal file
21
Laboratorio 4/Esercizio 4/test_set.txt
Normal file
@@ -0,0 +1,21 @@
|
||||
20
|
||||
8 1 10 5 6 6 20 8 3
|
||||
6 5 7 2 2 15 2 21 5
|
||||
10 7 8 10 17 16 18 17 3
|
||||
7 1 9 2 10 13 16 20 5
|
||||
6 6 8 10 8 25 20 10 7
|
||||
5 6 1 5 21 7 13 1 9
|
||||
9 5 3 8 7 3 10 8 6
|
||||
7 8 6 8 5 5 12 15 5
|
||||
4 8 8 6 1 19 13 19 1
|
||||
9 3 9 9 17 11 3 5 7
|
||||
1 1 5 10 15 12 14 15 6
|
||||
2 9 3 5 19 14 6 19 3
|
||||
4 5 2 7 21 10 16 5 10
|
||||
5 6 9 6 20 14 3 17 4
|
||||
9 8 9 2 17 5 21 11 9
|
||||
7 1 3 6 25 19 3 20 8
|
||||
6 2 5 4 19 22 3 11 8
|
||||
9 3 5 3 3 1 2 24 9
|
||||
5 10 7 9 19 1 6 5 1
|
||||
4 8 2 10 13 1 8 23 3
|
||||
80
Laboratorio 4/Esercizio 4/test_set_results.txt
Normal file
80
Laboratorio 4/Esercizio 4/test_set_results.txt
Normal file
@@ -0,0 +1,80 @@
|
||||
TEST #1
|
||||
zaffiro = 8 [6], rubino = 1 [6], topazio = 10 [20], smeraldo = 5 [8], TOT = 24 {max_rip = 3}
|
||||
Soluzione ottima di valore 116 usando 13 gemma/e
|
||||
Composizione collana: sstzzrssstzzz
|
||||
TEST #2
|
||||
zaffiro = 6 [2], rubino = 5 [15], topazio = 7 [2], smeraldo = 2 [21], TOT = 20 {max_rip = 5}
|
||||
Soluzione ottima di valore 133 usando 15 gemma/e
|
||||
Composizione collana: trtrtrtrtrsstzz
|
||||
TEST #3
|
||||
zaffiro = 10 [17], rubino = 7 [16], topazio = 8 [18], smeraldo = 10 [17], TOT = 35 {max_rip = 3}
|
||||
Soluzione ottima di valore 596 usando 35 gemma/e
|
||||
Composizione collana: trtrtrtrstzrssstzzzrssstzzzrssstzzz
|
||||
TEST #4
|
||||
zaffiro = 7 [10], rubino = 1 [13], topazio = 9 [16], smeraldo = 2 [20], TOT = 19 {max_rip = 5}
|
||||
Soluzione ottima di valore 105 usando 7 gemma/e
|
||||
Composizione collana: trsstzz
|
||||
TEST #5
|
||||
zaffiro = 6 [8], rubino = 6 [25], topazio = 8 [20], smeraldo = 10 [10], TOT = 30 {max_rip = 7}
|
||||
Soluzione ottima di valore 438 usando 29 gemma/e
|
||||
Composizione collana: trtrtrtrtrssstzzzrssssssstzzz
|
||||
TEST #6
|
||||
zaffiro = 5 [21], rubino = 6 [7], topazio = 1 [13], smeraldo = 5 [1], TOT = 17 {max_rip = 9}
|
||||
Soluzione ottima di valore 137 usando 13 gemma/e
|
||||
Composizione collana: rssssstzzzzzr
|
||||
TEST #7
|
||||
zaffiro = 9 [7], rubino = 5 [3], topazio = 3 [10], smeraldo = 8 [8], TOT = 25 {max_rip = 6}
|
||||
Soluzione ottima di valore 162 usando 23 gemma/e
|
||||
Composizione collana: rtrsstzzrsssssstzzzzzzr
|
||||
TEST #8
|
||||
zaffiro = 7 [5], rubino = 8 [5], topazio = 6 [12], smeraldo = 8 [15], TOT = 29 {max_rip = 5}
|
||||
Soluzione ottima di valore 262 usando 28 gemma/e
|
||||
Composizione collana: rtrtrtrtrsstzzrssssstzzzzzrs
|
||||
TEST #9
|
||||
zaffiro = 4 [1], rubino = 8 [19], topazio = 8 [13], smeraldo = 6 [19], TOT = 26 {max_rip = 1}
|
||||
Soluzione ottima di valore 374 usando 26 gemma/e
|
||||
Composizione collana: rtrtrstzrstzrstzrstzrstrst
|
||||
TEST #10
|
||||
zaffiro = 9 [17], rubino = 3 [11], topazio = 9 [3], smeraldo = 9 [5], TOT = 30 {max_rip = 7}
|
||||
Soluzione ottima di valore 243 usando 25 gemma/e
|
||||
Composizione collana: trtrsstzzrssssssstzzzzzzz
|
||||
TEST #11
|
||||
zaffiro = 1 [15], rubino = 1 [12], topazio = 5 [14], smeraldo = 10 [15], TOT = 17 {max_rip = 6}
|
||||
Soluzione ottima di valore 205 usando 14 gemma/e
|
||||
Composizione collana: sssstzrsssssst
|
||||
TEST #12
|
||||
zaffiro = 2 [19], rubino = 9 [14], topazio = 3 [6], smeraldo = 5 [19], TOT = 19 {max_rip = 3}
|
||||
Soluzione ottima di valore 207 usando 14 gemma/e
|
||||
Composizione collana: rtrtrsstzzrsss
|
||||
TEST #13
|
||||
zaffiro = 4 [21], rubino = 5 [10], topazio = 2 [16], smeraldo = 7 [5], TOT = 18 {max_rip = 10}
|
||||
Soluzione ottima di valore 181 usando 16 gemma/e
|
||||
Composizione collana: rtrsssstzzzzrsss
|
||||
TEST #14
|
||||
zaffiro = 5 [20], rubino = 6 [14], topazio = 9 [3], smeraldo = 6 [17], TOT = 26 {max_rip = 4}
|
||||
Soluzione ottima di valore 307 usando 24 gemma/e
|
||||
Composizione collana: trtrtrtrtrsstzzrsssstzzz
|
||||
TEST #15
|
||||
zaffiro = 9 [17], rubino = 8 [5], topazio = 9 [21], smeraldo = 2 [11], TOT = 28 {max_rip = 9}
|
||||
Soluzione ottima di valore 285 usando 21 gemma/e
|
||||
Composizione collana: trtrtrtrtrtrtrtrsstzz
|
||||
TEST #16
|
||||
zaffiro = 7 [25], rubino = 1 [19], topazio = 3 [3], smeraldo = 6 [20], TOT = 17 {max_rip = 8}
|
||||
Soluzione ottima di valore 295 usando 15 gemma/e
|
||||
Composizione collana: trsssssstzzzzzz
|
||||
TEST #17
|
||||
zaffiro = 6 [19], rubino = 2 [22], topazio = 5 [3], smeraldo = 4 [11], TOT = 17 {max_rip = 8}
|
||||
Soluzione ottima di valore 173 usando 13 gemma/e
|
||||
Composizione collana: trtrsssstzzzz
|
||||
TEST #18
|
||||
zaffiro = 9 [3], rubino = 3 [1], topazio = 5 [2], smeraldo = 3 [24], TOT = 20 {max_rip = 9}
|
||||
Soluzione ottima di valore 92 usando 13 gemma/e
|
||||
Composizione collana: trtrtrssstzzz
|
||||
TEST #19
|
||||
zaffiro = 5 [19], rubino = 10 [1], topazio = 7 [6], smeraldo = 9 [5], TOT = 31 {max_rip = 1}
|
||||
Soluzione ottima di valore 185 usando 28 gemma/e
|
||||
Composizione collana: rstzrstzrstzrstzrstzrstrstrs
|
||||
TEST #20
|
||||
zaffiro = 4 [13], rubino = 8 [1], topazio = 2 [8], smeraldo = 10 [23], TOT = 24 {max_rip = 3}
|
||||
Soluzione ottima di valore 278 usando 18 gemma/e
|
||||
Composizione collana: rssstzzzrssstzrsss
|
||||
Reference in New Issue
Block a user