1
0

feat: Initial commit

This commit is contained in:
2024-03-22 17:37:24 +01:00
parent 4288bd63a1
commit 6732a7a166
120 changed files with 9620 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
15
5 7 4 10
6 8 10 1
3 1 6 10
4 4 2 1
7 2 4 10
8 8 4 6
6 1 4 4
8 3 6 4
7 7 4 2
1 3 7 1
10 10 9 10
8 8 8 6
9 6 10 5
6 10 9 5
9 6 9 9

View File

@@ -0,0 +1,45 @@
TEST #1
zaffiro = 5, rubino = 7, topazio = 4, smeraldo = 10, TOT = 26
Collana massima di lunghezza 24
TEST #2
zaffiro = 6, rubino = 8, topazio = 10, smeraldo = 1, TOT = 25
Collana massima di lunghezza 24
TEST #3
zaffiro = 3, rubino = 1, topazio = 6, smeraldo = 10, TOT = 20
Collana massima di lunghezza 16
TEST #4
zaffiro = 4, rubino = 4, topazio = 2, smeraldo = 1, TOT = 11
Collana massima di lunghezza 10
TEST #5
zaffiro = 7, rubino = 2, topazio = 4, smeraldo = 10, TOT = 23
Collana massima di lunghezza 22
TEST #6
zaffiro = 8, rubino = 8, topazio = 4, smeraldo = 6, TOT = 26
Collana massima di lunghezza 23
TEST #7
zaffiro = 6, rubino = 1, topazio = 4, smeraldo = 4, TOT = 15
Collana massima di lunghezza 13
TEST #8
zaffiro = 8, rubino = 3, topazio = 6, smeraldo = 4, TOT = 21
Collana massima di lunghezza 19
TEST #9
zaffiro = 7, rubino = 7, topazio = 4, smeraldo = 2, TOT = 20
Collana massima di lunghezza 18
TEST #10
zaffiro = 1, rubino = 3, topazio = 7, smeraldo = 1, TOT = 12
Collana massima di lunghezza 9
TEST #11
zaffiro = 10, rubino = 10, topazio = 9, smeraldo = 10, TOT = 39
Collana massima di lunghezza 39
TEST #12
zaffiro = 8, rubino = 8, topazio = 8, smeraldo = 6, TOT = 30
Collana massima di lunghezza 30
TEST #13
zaffiro = 9, rubino = 6, topazio = 10, smeraldo = 5, TOT = 30
Collana massima di lunghezza 27
TEST #14
zaffiro = 6, rubino = 10, topazio = 9, smeraldo = 5, TOT = 30
Collana massima di lunghezza 30
TEST #15
zaffiro = 9, rubino = 6, topazio = 9, smeraldo = 9, TOT = 33
Collana massima di lunghezza 31

View File

@@ -0,0 +1,16 @@
15
19 6 8 5
19 14 5 11
14 14 5 8
12 16 5 14
12 17 20 20
13 11 14 18
7 14 12 10
13 20 12 17
17 18 6 9
5 5 15 19
18 12 20 17
13 6 19 6
17 20 15 19
12 18 17 8
7 20 12 7

View File

@@ -0,0 +1,45 @@
TEST #1
zaffiro = 19, rubino = 6, topazio = 8, smeraldo = 5, TOT = 38
Collana massima di lunghezza 37
TEST #2
zaffiro = 19, rubino = 14, topazio = 5, smeraldo = 11, TOT = 49
Collana massima di lunghezza 41
TEST #3
zaffiro = 14, rubino = 14, topazio = 5, smeraldo = 8, TOT = 41
Collana massima di lunghezza 33
TEST #4
zaffiro = 12, rubino = 16, topazio = 5, smeraldo = 14, TOT = 47
Collana massima di lunghezza 37
TEST #5
zaffiro = 12, rubino = 17, topazio = 20, smeraldo = 20, TOT = 69
Collana massima di lunghezza 67
TEST #6
zaffiro = 13, rubino = 11, topazio = 14, smeraldo = 18, TOT = 56
Collana massima di lunghezza 54
TEST #7
zaffiro = 7, rubino = 14, topazio = 12, smeraldo = 10, TOT = 43
Collana massima di lunghezza 42
TEST #8
zaffiro = 13, rubino = 20, topazio = 12, smeraldo = 17, TOT = 62
Collana massima di lunghezza 55
TEST #9
zaffiro = 17, rubino = 18, topazio = 6, smeraldo = 9, TOT = 50
Collana massima di lunghezza 39
TEST #10
zaffiro = 5, rubino = 5, topazio = 15, smeraldo = 19, TOT = 44
Collana massima di lunghezza 35
TEST #11
zaffiro = 18, rubino = 12, topazio = 20, smeraldo = 17, TOT = 67
Collana massima di lunghezza 60
TEST #12
zaffiro = 13, rubino = 6, topazio = 19, smeraldo = 6, TOT = 44
Collana massima di lunghezza 32
TEST #13
zaffiro = 17, rubino = 20, topazio = 15, smeraldo = 19, TOT = 71
Collana massima di lunghezza 67
TEST #14
zaffiro = 12, rubino = 18, topazio = 17, smeraldo = 8, TOT = 55
Collana massima di lunghezza 55
TEST #15
zaffiro = 7, rubino = 20, topazio = 12, smeraldo = 7, TOT = 46
Collana massima di lunghezza 39

View File

@@ -0,0 +1,107 @@
// Laboratorio 4 - Esercizio 3 - main.c
// Matteo Schiff - s295565
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
enum Pietra{zaffiro, rubino, topazio, smeraldo};
// Esploro il set di collane valide in modo ordinato, quando arrivo alla fine della collana ne controllo
// la lunghezza e aggiorno se necessario la soluzione
void esploraSoluzioni(int z, int r, int t, int s, int len, int * tmp, int * max, int * sol) {
int added = false;
if (z > 0 && (len == 0 || (tmp[len - 1] == zaffiro || tmp[len - 1] == topazio))) {
tmp[len] = zaffiro;
esploraSoluzioni(z-1,r,t,s,len +1,tmp,max,sol);
added = true;
}
if (s > 0 && (len == 0 || (tmp[len - 1] == smeraldo || tmp[len - 1] == rubino))) {
tmp[len] = smeraldo;
esploraSoluzioni(z,r,t,s-1,len +1,tmp,max,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,len +1,tmp,max,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,len +1,tmp,max,sol);
added = true;
}
// se non è possibile più aggiungere pietre, ho raggiunto la lunghezza massima ottenibile dal ramo
if (!added) {
if (len > *max) {
*max = 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;
// vettore su cui la funzione costruisce le collane
int * tmp = malloc(maxL * sizeof(int));
// vettore utilizzato per memorizzare la soluzione
int * sol = malloc(maxL * sizeof(int));
printf("zaffiri = %d, rubini = %d, topazi = %d, smeraldi = %d; numero pietre = %d\n", z,r,t,s,maxL);
esploraSoluzioni(z,r,t,s,0,tmp,&max,sol);
printf("Collana massima di lunghezza %d\n", max);
for(int i = 0; i < max; 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("easy_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", &z, &r, &t, &s);
printf("Test case %d\n", i+1);
solveCase(z,r,t,s);
}
fclose(fp);
}

View File

@@ -0,0 +1,7 @@
6
2 1 2 2
3 2 3 3
6 2 2 3
6 4 4 3
4 3 7 4
6 5 9 7

View File

@@ -0,0 +1,3 @@
1
2 1 2 2