Upload files to 'Exercise 9 - Dynamic Programming: Crazy Eights (Week 10)'

This commit is contained in:
Manish 2021-04-28 08:31:04 +02:00
parent af8ccdb223
commit 5ec98b5b3c
5 changed files with 150 additions and 0 deletions

View File

@ -0,0 +1,52 @@
AS
2H
2S
XS
6D
6C
JH
3D
XD
AD
JC
QC
9S
2C
7D
AH
4C
KH
2D
3C
7S
8S
JS
KC
8C
JD
5D
QD
9C
9D
5C
AC
4D
3H
KD
4S
6S
7H
6H
8H
XC
5H
3S
7C
XH
KS
QH
5S
9H
4H
8D
QS

View File

@ -0,0 +1,90 @@
/* License: AGPLv3 or later. https://www.gnu.org/licenses/licenses.html
*
* Exercise 9 - Dynamic Programming: Crazy Eights (Week 10)
* Name: Manish
* Student Login: *****
*
* Compile as:
* $ gcc -std=c11 -Wall -o ex9 ex9.c
*/
#include <stdio.h>
#include <stdlib.h>
int max(int i, int j);
int main(void)
{
printf("Enter file name: ");
// Assuming filename/file path will not be longer than 256 characters
char filename[257];
scanf("%s", filename);
FILE* file = fopen(filename, "r");
if (!file)
{
perror(filename);
exit(EXIT_FAILURE);
}
// 0th index is dummy card
char cards[53][2];
int size = 0;
int length[53] = {0}; // all get initialized to 0;
int parent[53] = {0}; // all get initialized to 0;
int max_leaf = 0; // index of last card of longest chain
// Dummy card as first card
cards[size][0] = '8';
cards[size++][1] = 'S';
// Read and add cards
while (fscanf(file, " %2c ", cards[size++]) != EOF)
{
}
int current_length;
int current_parent;
for (int i=1; i < size; i++)
{
current_length = 1;
current_parent = 0;
for (int j = i-1; j >= 0; j--)
{
if (cards[i][0] == cards[j][0]
|| cards[i][1] == cards[j][1]
|| cards[i][0] == '8'
|| cards[j][0] == '8'
)
{
if (current_length < length[j]+1)
{
current_length = length[j]+1;
current_parent = j;
}
}
}
length[i] = current_length;
parent[i] = current_parent;
if (length[max_leaf] < current_length)
max_leaf = i;
}
// find first card of longest chain
int first = max_leaf;
while (parent[first] != 0)
first = parent[first];
printf(
"Longest sequence length: %d\n"
"First card in longest sequence: %.2s\n"
"Last card in longest sequence: %.2s\n",
length[max_leaf],
cards[first],
cards[max_leaf]
);
fclose(file);
return 0;
}

View File

@ -0,0 +1,8 @@
make: ex9.c
make ex9 && make ex9gnu11
ex9: ex9.c
gcc -Wall -std=c11 -o ex9 ex9.c
ex9gnu11: ex9.c
gcc -Wall -std=gnu11 -o ex9gnu11 ex9.c && rm ex9gnu11