Upload files to 'Exercise 9 - Dynamic Programming: Crazy Eights (Week 10)'
This commit is contained in:
parent
af8ccdb223
commit
5ec98b5b3c
BIN
Exercise 9 - Dynamic Programming: Crazy Eights (Week 10)/Ex9.pdf
Normal file
BIN
Exercise 9 - Dynamic Programming: Crazy Eights (Week 10)/Ex9.pdf
Normal file
Binary file not shown.
@ -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
|
Binary file not shown.
@ -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;
|
||||||
|
}
|
@ -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
|
Loading…
Reference in New Issue
Block a user